1b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// Copyright (c) 2015-2016 The Khronos Group Inc.
2b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow//
3b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// Permission is hereby granted, free of charge, to any person obtaining a
4b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// copy of this software and/or associated documentation files (the
5b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// "Materials"), to deal in the Materials without restriction, including
6b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// without limitation the rights to use, copy, modify, merge, publish,
7b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// distribute, sublicense, and/or sell copies of the Materials, and to
8b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// permit persons to whom the Materials are furnished to do so, subject to
9b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// the following conditions:
10b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow//
11b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// The above copyright notice and this permission notice shall be included
12b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// in all copies or substantial portions of the Materials.
13b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow//
14b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
21b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
22b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// This header is generated from the Khronos Vulkan XML API Registry.
23b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
24b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
25b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP
26b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#define VULKAN_HPP
27b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
28b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <algorithm>
29b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <array>
30b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <cassert>
31b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <cstdint>
32b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <cstring>
33b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <initializer_list>
34b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <string>
35b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <system_error>
36b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <type_traits>
37b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#include <vulkan/vulkan.h>
38b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
39b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# include <memory>
40b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# include <vector>
41b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
42b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
43761bd3907ba2fe1ec2ffb96193f351bd9e1be1f1Mark Lobodzinskistatic_assert( VK_HEADER_VERSION ==  31 , "Wrong VK_HEADER_VERSION!" );
44b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
45b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
46b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
47af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
48b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#define VULKAN_HPP_TYPESAFE_CONVERSION 1
49b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
50b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
51b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_HAS_UNRESTRICTED_UNIONS)
52b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# if defined(__clang__)
53b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#  if __has_feature(cxx_unrestricted_unions)
54b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#   define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
55b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#  endif
56b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# elif defined(__GNUC__)
57af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#  define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
58b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#  if 40600 <= GCC_VERSION
59b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#   define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
60b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#  endif
61b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# elif defined(_MSC_VER)
62b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#  if 1900 <= _MSC_VER
63b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#   define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
64b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#  endif
65b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# endif
66b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
67b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
68b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komownamespace vk
69b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow{
70b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename BitType, typename MaskType = VkFlags>
71b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Flags
72b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
73b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
74b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags()
75b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_mask(0)
76b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
77b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
78b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
79b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags(BitType bit)
80b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_mask(static_cast<MaskType>(bit))
81b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
82b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
83b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
84b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags(Flags<BitType> const& rhs)
85b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_mask(rhs.m_mask)
86b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
87b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
88b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
89b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> & operator=(Flags<BitType> const& rhs)
90b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
91b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_mask = rhs.m_mask;
92b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
93b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
94b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
95b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> & operator|=(Flags<BitType> const& rhs)
96b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
97b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_mask |= rhs.m_mask;
98b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
99b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> & operator&=(Flags<BitType> const& rhs)
102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_mask &= rhs.m_mask;
104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> & operator^=(Flags<BitType> const& rhs)
108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_mask ^= rhs.m_mask;
110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> operator|(Flags<BitType> const& rhs) const
114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Flags<BitType> result(*this);
116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      result |= rhs;
117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return result;
118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> operator&(Flags<BitType> const& rhs) const
121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Flags<BitType> result(*this);
123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      result &= rhs;
124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return result;
125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Flags<BitType> operator^(Flags<BitType> const& rhs) const
128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Flags<BitType> result(*this);
130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      result ^= rhs;
131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return result;
132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !m_mask;
137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==(Flags<BitType> const& rhs) const
140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_mask == rhs.m_mask;
142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=(Flags<BitType> const& rhs) const
145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_mask != rhs.m_mask;
147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !!m_mask;
152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator MaskType() const
155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        return m_mask;
157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MaskType  m_mask;
161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename BitType>
164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  Flags<BitType> operator|(BitType bit, Flags<BitType> const& flags)
165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return flags | bit;
167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename BitType>
170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  Flags<BitType> operator&(BitType bit, Flags<BitType> const& flags)
171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return flags & bit;
173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename BitType>
176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  Flags<BitType> operator^(BitType bit, Flags<BitType> const& flags)
177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return flags ^ bit;
179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename RefType>
182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Optional
183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Optional(RefType & reference) { m_ptr = &reference; }
186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Optional(std::nullptr_t) { m_ptr = nullptr; }
187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator RefType*() const { return m_ptr; }
189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RefType const* operator->() const { return m_ptr; }
190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const { return !!m_ptr; }
191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RefType *m_ptr;
194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename T>
198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class ArrayProxy
199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(std::nullptr_t)
202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(0)
203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(nullptr)
204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(T & ptr)
207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(1)
208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(&ptr)
209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(uint32_t count, T * ptr)
212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(count)
213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(ptr)
214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <size_t N>
217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(std::array<typename std::remove_const<T>::type, N> & data)
218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(N)
219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(data.data())
220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <size_t N>
223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(std::array<typename std::remove_const<T>::type, N> const& data)
224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(N)
225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(data.data())
226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> & data)
230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(static_cast<uint32_t>(data.size()))
231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(data.data())
232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> const& data)
236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(static_cast<uint32_t>(data.size()))
237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(data.data())
238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ArrayProxy(std::initializer_list<T> const& data)
241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_count(static_cast<uint32_t>(data.end() - data.begin()))
242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , m_ptr(data.begin())
243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const T * begin() const
246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_ptr;
248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const T * end() const
251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_ptr + m_count;
253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const T & front() const
256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert(m_count && m_ptr);
258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *m_ptr;
259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const T & back() const
262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert(m_count && m_ptr);
264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *(m_ptr + m_count - 1);
265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool empty() const
268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return (m_count == 0);
270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t size() const
273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_count;
275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    T * data() const
278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_ptr;
280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t  m_count;
284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    T *       m_ptr;
285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class Result
289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSuccess = VK_SUCCESS,
291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNotReady = VK_NOT_READY,
292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTimeout = VK_TIMEOUT,
293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEventSet = VK_EVENT_SET,
294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEventReset = VK_EVENT_RESET,
295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIncomplete = VK_INCOMPLETE,
296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorOutOfHostMemory = VK_ERROR_OUT_OF_HOST_MEMORY,
297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorOutOfDeviceMemory = VK_ERROR_OUT_OF_DEVICE_MEMORY,
298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorInitializationFailed = VK_ERROR_INITIALIZATION_FAILED,
299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorDeviceLost = VK_ERROR_DEVICE_LOST,
300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorMemoryMapFailed = VK_ERROR_MEMORY_MAP_FAILED,
301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorLayerNotPresent = VK_ERROR_LAYER_NOT_PRESENT,
302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorExtensionNotPresent = VK_ERROR_EXTENSION_NOT_PRESENT,
303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorFeatureNotPresent = VK_ERROR_FEATURE_NOT_PRESENT,
304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorIncompatibleDriver = VK_ERROR_INCOMPATIBLE_DRIVER,
305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorTooManyObjects = VK_ERROR_TOO_MANY_OBJECTS,
306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorFormatNotSupported = VK_ERROR_FORMAT_NOT_SUPPORTED,
307af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eErrorFragmentedPool = VK_ERROR_FRAGMENTED_POOL,
308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR,
309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,
310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSuboptimalKHR = VK_SUBOPTIMAL_KHR,
311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR,
312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR,
313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT,
314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV
315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(Result value)
318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eSuccess: return "Success";
322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eNotReady: return "NotReady";
323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eTimeout: return "Timeout";
324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eEventSet: return "EventSet";
325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eEventReset: return "EventReset";
326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eIncomplete: return "Incomplete";
327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorOutOfHostMemory: return "ErrorOutOfHostMemory";
328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorOutOfDeviceMemory: return "ErrorOutOfDeviceMemory";
329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorInitializationFailed: return "ErrorInitializationFailed";
330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorDeviceLost: return "ErrorDeviceLost";
331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorMemoryMapFailed: return "ErrorMemoryMapFailed";
332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorLayerNotPresent: return "ErrorLayerNotPresent";
333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorExtensionNotPresent: return "ErrorExtensionNotPresent";
334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorFeatureNotPresent: return "ErrorFeatureNotPresent";
335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorIncompatibleDriver: return "ErrorIncompatibleDriver";
336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorTooManyObjects: return "ErrorTooManyObjects";
337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorFormatNotSupported: return "ErrorFormatNotSupported";
338af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Result::eErrorFragmentedPool: return "ErrorFragmentedPool";
339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR";
340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR";
341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eSuboptimalKHR: return "SuboptimalKHR";
342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorOutOfDateKHR: return "ErrorOutOfDateKHR";
343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorIncompatibleDisplayKHR: return "ErrorIncompatibleDisplayKHR";
344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT";
345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV";
346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(_MSC_VER) && (_MSC_VER == 1800)
351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# define noexcept _NOEXCEPT
352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class ErrorCategoryImpl : public std::error_category
355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    public:
357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    virtual const char* name() const noexcept override { return "vk::Result"; }
358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    virtual std::string message(int ev) const override { return to_string(static_cast<Result>(ev)); }
359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(_MSC_VER) && (_MSC_VER == 1800)
362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow# undef noexcept
363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline const std::error_category& errorCategory()
366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    static ErrorCategoryImpl instance;
368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return instance;
369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::error_code make_error_code(Result e)
372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return std::error_code(static_cast<int>(e), errorCategory());
374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::error_condition make_error_condition(Result e)
377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return std::error_condition(static_cast<int>(e), errorCategory());
379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow} // namespace vk
382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komownamespace std
384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow{
385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <>
386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct is_error_code_enum<vk::Result> : public true_type
387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {};
388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow}
389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komownamespace vk
391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow{
392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename T>
393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ResultValue
394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValue( Result r, T & v )
396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : result( r )
397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , value( v )
398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result  result;
401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    T       value;
402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename T>
405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ResultValueType
406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typedef ResultValue<T>  type;
409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typedef T              type;
411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <>  struct ResultValueType<void>
415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typedef Result type;
418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typedef void   type;
420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ResultValueType<void>::type createResultValue( Result result, char const * message )
424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    assert( result == Result::eSuccess );
427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return result;
428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if ( result != Result::eSuccess )
430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      throw std::system_error( result, message );
432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename T>
437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline typename ResultValueType<T>::type createResultValue( Result result, T & data, char const * message )
438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    assert( result == Result::eSuccess );
441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ResultValue<T>( result, data );
442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if ( result != Result::eSuccess )
444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      throw std::system_error( result, message );
446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return data;
448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline Result createResultValue( Result result, char const * message, std::initializer_list<Result> successCodes )
452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      throw std::system_error( result, message );
459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return result;
462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename T>
465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ResultValue<T> createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      throw std::system_error( result, message );
473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ResultValue<T>( result, data );
476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SampleMask = uint32_t;
479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using Bool32 = uint32_t;
481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DeviceSize = uint64_t;
483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class FramebufferCreateFlagBits
485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using FramebufferCreateFlags = Flags<FramebufferCreateFlagBits, VkFramebufferCreateFlags>;
489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline FramebufferCreateFlags operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 )
491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return FramebufferCreateFlags( bit0 ) | bit1;
493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class QueryPoolCreateFlagBits
496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using QueryPoolCreateFlags = Flags<QueryPoolCreateFlagBits, VkQueryPoolCreateFlags>;
500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline QueryPoolCreateFlags operator|( QueryPoolCreateFlagBits bit0, QueryPoolCreateFlagBits bit1 )
502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return QueryPoolCreateFlags( bit0 ) | bit1;
504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class RenderPassCreateFlagBits
507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using RenderPassCreateFlags = Flags<RenderPassCreateFlagBits, VkRenderPassCreateFlags>;
511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline RenderPassCreateFlags operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 )
513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return RenderPassCreateFlags( bit0 ) | bit1;
515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SamplerCreateFlagBits
518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SamplerCreateFlags = Flags<SamplerCreateFlagBits, VkSamplerCreateFlags>;
522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SamplerCreateFlags operator|( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 )
524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SamplerCreateFlags( bit0 ) | bit1;
526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineLayoutCreateFlagBits
529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineLayoutCreateFlags = Flags<PipelineLayoutCreateFlagBits, VkPipelineLayoutCreateFlags>;
533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineLayoutCreateFlags operator|( PipelineLayoutCreateFlagBits bit0, PipelineLayoutCreateFlagBits bit1 )
535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineLayoutCreateFlags( bit0 ) | bit1;
537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineCacheCreateFlagBits
540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineCacheCreateFlags = Flags<PipelineCacheCreateFlagBits, VkPipelineCacheCreateFlags>;
544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineCacheCreateFlags operator|( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 )
546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineCacheCreateFlags( bit0 ) | bit1;
548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineDepthStencilStateCreateFlagBits
551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineDepthStencilStateCreateFlags = Flags<PipelineDepthStencilStateCreateFlagBits, VkPipelineDepthStencilStateCreateFlags>;
555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineDepthStencilStateCreateFlags operator|( PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 )
557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineDepthStencilStateCreateFlags( bit0 ) | bit1;
559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineDynamicStateCreateFlagBits
562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineDynamicStateCreateFlags = Flags<PipelineDynamicStateCreateFlagBits, VkPipelineDynamicStateCreateFlags>;
566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineDynamicStateCreateFlags operator|( PipelineDynamicStateCreateFlagBits bit0, PipelineDynamicStateCreateFlagBits bit1 )
568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineDynamicStateCreateFlags( bit0 ) | bit1;
570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineColorBlendStateCreateFlagBits
573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineColorBlendStateCreateFlags = Flags<PipelineColorBlendStateCreateFlagBits, VkPipelineColorBlendStateCreateFlags>;
577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineColorBlendStateCreateFlags operator|( PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 )
579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineColorBlendStateCreateFlags( bit0 ) | bit1;
581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineMultisampleStateCreateFlagBits
584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineMultisampleStateCreateFlags = Flags<PipelineMultisampleStateCreateFlagBits, VkPipelineMultisampleStateCreateFlags>;
588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineMultisampleStateCreateFlags operator|( PipelineMultisampleStateCreateFlagBits bit0, PipelineMultisampleStateCreateFlagBits bit1 )
590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineMultisampleStateCreateFlags( bit0 ) | bit1;
592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineRasterizationStateCreateFlagBits
595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineRasterizationStateCreateFlags = Flags<PipelineRasterizationStateCreateFlagBits, VkPipelineRasterizationStateCreateFlags>;
599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineRasterizationStateCreateFlags operator|( PipelineRasterizationStateCreateFlagBits bit0, PipelineRasterizationStateCreateFlagBits bit1 )
601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineRasterizationStateCreateFlags( bit0 ) | bit1;
603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineViewportStateCreateFlagBits
606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineViewportStateCreateFlags = Flags<PipelineViewportStateCreateFlagBits, VkPipelineViewportStateCreateFlags>;
610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineViewportStateCreateFlags operator|( PipelineViewportStateCreateFlagBits bit0, PipelineViewportStateCreateFlagBits bit1 )
612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineViewportStateCreateFlags( bit0 ) | bit1;
614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineTessellationStateCreateFlagBits
617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineTessellationStateCreateFlags = Flags<PipelineTessellationStateCreateFlagBits, VkPipelineTessellationStateCreateFlags>;
621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineTessellationStateCreateFlags operator|( PipelineTessellationStateCreateFlagBits bit0, PipelineTessellationStateCreateFlagBits bit1 )
623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineTessellationStateCreateFlags( bit0 ) | bit1;
625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineInputAssemblyStateCreateFlagBits
628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineInputAssemblyStateCreateFlags = Flags<PipelineInputAssemblyStateCreateFlagBits, VkPipelineInputAssemblyStateCreateFlags>;
632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineInputAssemblyStateCreateFlags operator|( PipelineInputAssemblyStateCreateFlagBits bit0, PipelineInputAssemblyStateCreateFlagBits bit1 )
634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineInputAssemblyStateCreateFlags( bit0 ) | bit1;
636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineVertexInputStateCreateFlagBits
639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineVertexInputStateCreateFlags = Flags<PipelineVertexInputStateCreateFlagBits, VkPipelineVertexInputStateCreateFlags>;
643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineVertexInputStateCreateFlags operator|( PipelineVertexInputStateCreateFlagBits bit0, PipelineVertexInputStateCreateFlagBits bit1 )
645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineVertexInputStateCreateFlags( bit0 ) | bit1;
647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineShaderStageCreateFlagBits
650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineShaderStageCreateFlags = Flags<PipelineShaderStageCreateFlagBits, VkPipelineShaderStageCreateFlags>;
654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineShaderStageCreateFlags operator|( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 )
656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineShaderStageCreateFlags( bit0 ) | bit1;
658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DescriptorSetLayoutCreateFlagBits
661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DescriptorSetLayoutCreateFlags = Flags<DescriptorSetLayoutCreateFlagBits, VkDescriptorSetLayoutCreateFlags>;
665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DescriptorSetLayoutCreateFlags operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 )
667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DescriptorSetLayoutCreateFlags( bit0 ) | bit1;
669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class BufferViewCreateFlagBits
672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using BufferViewCreateFlags = Flags<BufferViewCreateFlagBits, VkBufferViewCreateFlags>;
676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline BufferViewCreateFlags operator|( BufferViewCreateFlagBits bit0, BufferViewCreateFlagBits bit1 )
678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return BufferViewCreateFlags( bit0 ) | bit1;
680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class InstanceCreateFlagBits
683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using InstanceCreateFlags = Flags<InstanceCreateFlagBits, VkInstanceCreateFlags>;
687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline InstanceCreateFlags operator|( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 )
689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return InstanceCreateFlags( bit0 ) | bit1;
691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DeviceCreateFlagBits
694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DeviceCreateFlags = Flags<DeviceCreateFlagBits, VkDeviceCreateFlags>;
698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DeviceCreateFlags operator|( DeviceCreateFlagBits bit0, DeviceCreateFlagBits bit1 )
700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DeviceCreateFlags( bit0 ) | bit1;
702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DeviceQueueCreateFlagBits
705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DeviceQueueCreateFlags = Flags<DeviceQueueCreateFlagBits, VkDeviceQueueCreateFlags>;
709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DeviceQueueCreateFlags operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 )
711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DeviceQueueCreateFlags( bit0 ) | bit1;
713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageViewCreateFlagBits
716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ImageViewCreateFlags = Flags<ImageViewCreateFlagBits, VkImageViewCreateFlags>;
720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ImageViewCreateFlags operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 )
722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ImageViewCreateFlags( bit0 ) | bit1;
724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SemaphoreCreateFlagBits
727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SemaphoreCreateFlags = Flags<SemaphoreCreateFlagBits, VkSemaphoreCreateFlags>;
731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SemaphoreCreateFlags operator|( SemaphoreCreateFlagBits bit0, SemaphoreCreateFlagBits bit1 )
733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SemaphoreCreateFlags( bit0 ) | bit1;
735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ShaderModuleCreateFlagBits
738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ShaderModuleCreateFlags = Flags<ShaderModuleCreateFlagBits, VkShaderModuleCreateFlags>;
742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ShaderModuleCreateFlags operator|( ShaderModuleCreateFlagBits bit0, ShaderModuleCreateFlagBits bit1 )
744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ShaderModuleCreateFlags( bit0 ) | bit1;
746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class EventCreateFlagBits
749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using EventCreateFlags = Flags<EventCreateFlagBits, VkEventCreateFlags>;
753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline EventCreateFlags operator|( EventCreateFlagBits bit0, EventCreateFlagBits bit1 )
755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return EventCreateFlags( bit0 ) | bit1;
757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class MemoryMapFlagBits
760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using MemoryMapFlags = Flags<MemoryMapFlagBits, VkMemoryMapFlags>;
764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline MemoryMapFlags operator|( MemoryMapFlagBits bit0, MemoryMapFlagBits bit1 )
766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return MemoryMapFlags( bit0 ) | bit1;
768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SubpassDescriptionFlagBits
771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SubpassDescriptionFlags = Flags<SubpassDescriptionFlagBits, VkSubpassDescriptionFlags>;
775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SubpassDescriptionFlags operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 )
777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SubpassDescriptionFlags( bit0 ) | bit1;
779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DescriptorPoolResetFlagBits
782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DescriptorPoolResetFlags = Flags<DescriptorPoolResetFlagBits, VkDescriptorPoolResetFlags>;
786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DescriptorPoolResetFlags operator|( DescriptorPoolResetFlagBits bit0, DescriptorPoolResetFlagBits bit1 )
788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DescriptorPoolResetFlags( bit0 ) | bit1;
790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SwapchainCreateFlagBitsKHR
793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SwapchainCreateFlagsKHR = Flags<SwapchainCreateFlagBitsKHR, VkSwapchainCreateFlagsKHR>;
797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SwapchainCreateFlagsKHR operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 )
799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SwapchainCreateFlagsKHR( bit0 ) | bit1;
801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DisplayModeCreateFlagBitsKHR
804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DisplayModeCreateFlagsKHR = Flags<DisplayModeCreateFlagBitsKHR, VkDisplayModeCreateFlagsKHR>;
808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DisplayModeCreateFlagsKHR operator|( DisplayModeCreateFlagBitsKHR bit0, DisplayModeCreateFlagBitsKHR bit1 )
810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DisplayModeCreateFlagsKHR( bit0 ) | bit1;
812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DisplaySurfaceCreateFlagBitsKHR
815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DisplaySurfaceCreateFlagsKHR = Flags<DisplaySurfaceCreateFlagBitsKHR, VkDisplaySurfaceCreateFlagsKHR>;
819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DisplaySurfaceCreateFlagsKHR operator|( DisplaySurfaceCreateFlagBitsKHR bit0, DisplaySurfaceCreateFlagBitsKHR bit1 )
821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DisplaySurfaceCreateFlagsKHR( bit0 ) | bit1;
823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class AndroidSurfaceCreateFlagBitsKHR
827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using AndroidSurfaceCreateFlagsKHR = Flags<AndroidSurfaceCreateFlagBitsKHR, VkAndroidSurfaceCreateFlagsKHR>;
833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline AndroidSurfaceCreateFlagsKHR operator|( AndroidSurfaceCreateFlagBitsKHR bit0, AndroidSurfaceCreateFlagBitsKHR bit1 )
835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return AndroidSurfaceCreateFlagsKHR( bit0 ) | bit1;
837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class MirSurfaceCreateFlagBitsKHR
842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using MirSurfaceCreateFlagsKHR = Flags<MirSurfaceCreateFlagBitsKHR, VkMirSurfaceCreateFlagsKHR>;
848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline MirSurfaceCreateFlagsKHR operator|( MirSurfaceCreateFlagBitsKHR bit0, MirSurfaceCreateFlagBitsKHR bit1 )
850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return MirSurfaceCreateFlagsKHR( bit0 ) | bit1;
852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class WaylandSurfaceCreateFlagBitsKHR
857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using WaylandSurfaceCreateFlagsKHR = Flags<WaylandSurfaceCreateFlagBitsKHR, VkWaylandSurfaceCreateFlagsKHR>;
863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline WaylandSurfaceCreateFlagsKHR operator|( WaylandSurfaceCreateFlagBitsKHR bit0, WaylandSurfaceCreateFlagBitsKHR bit1 )
865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return WaylandSurfaceCreateFlagsKHR( bit0 ) | bit1;
867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class Win32SurfaceCreateFlagBitsKHR
872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using Win32SurfaceCreateFlagsKHR = Flags<Win32SurfaceCreateFlagBitsKHR, VkWin32SurfaceCreateFlagsKHR>;
878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline Win32SurfaceCreateFlagsKHR operator|( Win32SurfaceCreateFlagBitsKHR bit0, Win32SurfaceCreateFlagBitsKHR bit1 )
880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return Win32SurfaceCreateFlagsKHR( bit0 ) | bit1;
882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class XlibSurfaceCreateFlagBitsKHR
887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using XlibSurfaceCreateFlagsKHR = Flags<XlibSurfaceCreateFlagBitsKHR, VkXlibSurfaceCreateFlagsKHR>;
893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline XlibSurfaceCreateFlagsKHR operator|( XlibSurfaceCreateFlagBitsKHR bit0, XlibSurfaceCreateFlagBitsKHR bit1 )
895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return XlibSurfaceCreateFlagsKHR( bit0 ) | bit1;
897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class XcbSurfaceCreateFlagBitsKHR
902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using XcbSurfaceCreateFlagsKHR = Flags<XcbSurfaceCreateFlagBitsKHR, VkXcbSurfaceCreateFlagsKHR>;
908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline XcbSurfaceCreateFlagsKHR operator|( XcbSurfaceCreateFlagBitsKHR bit0, XcbSurfaceCreateFlagBitsKHR bit1 )
910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return XcbSurfaceCreateFlagsKHR( bit0 ) | bit1;
912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DeviceMemory
916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceMemory()
919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_deviceMemory(VK_NULL_HANDLE)
920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceMemory(VkDeviceMemory deviceMemory)
924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_deviceMemory(deviceMemory)
925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceMemory& operator=(VkDeviceMemory deviceMemory)
928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_deviceMemory = deviceMemory;
930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
934af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DeviceMemory const &rhs) const
935af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
936af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_deviceMemory == rhs.m_deviceMemory;
937af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
938af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
939af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DeviceMemory const &rhs) const
940af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
941af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_deviceMemory != rhs.m_deviceMemory;
942af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
943af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
944af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DeviceMemory const &rhs) const
945af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
946af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_deviceMemory < rhs.m_deviceMemory;
947af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
948af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDeviceMemory() const
953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_deviceMemory;
955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_deviceMemory != VK_NULL_HANDLE;
960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_deviceMemory == VK_NULL_HANDLE;
965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDeviceMemory m_deviceMemory;
969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DeviceMemory ) == sizeof( VkDeviceMemory ), "handle and wrapper have different size!" );
971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class CommandPool
973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPool()
976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_commandPool(VK_NULL_HANDLE)
977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPool(VkCommandPool commandPool)
981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_commandPool(commandPool)
982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPool& operator=(VkCommandPool commandPool)
985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_commandPool = commandPool;
987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
991af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(CommandPool const &rhs) const
992af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
993af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_commandPool == rhs.m_commandPool;
994af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
995af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
996af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(CommandPool const &rhs) const
997af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
998af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_commandPool != rhs.m_commandPool;
999af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1000af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1001af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(CommandPool const &rhs) const
1002af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1003af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_commandPool < rhs.m_commandPool;
1004af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1005af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkCommandPool() const
1010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_commandPool;
1012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_commandPool != VK_NULL_HANDLE;
1017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_commandPool == VK_NULL_HANDLE;
1022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkCommandPool m_commandPool;
1026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CommandPool ) == sizeof( VkCommandPool ), "handle and wrapper have different size!" );
1028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Buffer
1030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer()
1033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_buffer(VK_NULL_HANDLE)
1034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer(VkBuffer buffer)
1038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_buffer(buffer)
1039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer& operator=(VkBuffer buffer)
1042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_buffer = buffer;
1044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1048af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Buffer const &rhs) const
1049af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1050af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_buffer == rhs.m_buffer;
1051af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1052af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1053af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Buffer const &rhs) const
1054af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1055af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_buffer != rhs.m_buffer;
1056af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1057af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1058af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Buffer const &rhs) const
1059af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1060af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_buffer < rhs.m_buffer;
1061af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1062af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkBuffer() const
1067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_buffer;
1069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_buffer != VK_NULL_HANDLE;
1074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_buffer == VK_NULL_HANDLE;
1079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkBuffer m_buffer;
1083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Buffer ) == sizeof( VkBuffer ), "handle and wrapper have different size!" );
1085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class BufferView
1087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferView()
1090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_bufferView(VK_NULL_HANDLE)
1091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferView(VkBufferView bufferView)
1095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_bufferView(bufferView)
1096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferView& operator=(VkBufferView bufferView)
1099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_bufferView = bufferView;
1101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1105af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(BufferView const &rhs) const
1106af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1107af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_bufferView == rhs.m_bufferView;
1108af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1109af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1110af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(BufferView const &rhs) const
1111af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1112af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_bufferView != rhs.m_bufferView;
1113af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1114af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1115af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(BufferView const &rhs) const
1116af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1117af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_bufferView < rhs.m_bufferView;
1118af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1119af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkBufferView() const
1124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_bufferView;
1126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_bufferView != VK_NULL_HANDLE;
1131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_bufferView == VK_NULL_HANDLE;
1136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkBufferView m_bufferView;
1140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BufferView ) == sizeof( VkBufferView ), "handle and wrapper have different size!" );
1142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Image
1144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image()
1147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_image(VK_NULL_HANDLE)
1148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image(VkImage image)
1152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_image(image)
1153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image& operator=(VkImage image)
1156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_image = image;
1158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1162af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Image const &rhs) const
1163af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1164af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_image == rhs.m_image;
1165af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1166af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1167af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Image const &rhs) const
1168af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1169af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_image != rhs.m_image;
1170af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1171af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1172af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Image const &rhs) const
1173af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1174af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_image < rhs.m_image;
1175af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1176af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkImage() const
1181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_image;
1183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_image != VK_NULL_HANDLE;
1188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_image == VK_NULL_HANDLE;
1193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkImage m_image;
1197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Image ) == sizeof( VkImage ), "handle and wrapper have different size!" );
1199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class ImageView
1201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageView()
1204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_imageView(VK_NULL_HANDLE)
1205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageView(VkImageView imageView)
1209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_imageView(imageView)
1210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageView& operator=(VkImageView imageView)
1213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_imageView = imageView;
1215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1219af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(ImageView const &rhs) const
1220af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1221af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_imageView == rhs.m_imageView;
1222af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1223af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1224af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(ImageView const &rhs) const
1225af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1226af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_imageView != rhs.m_imageView;
1227af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1228af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1229af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(ImageView const &rhs) const
1230af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1231af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_imageView < rhs.m_imageView;
1232af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1233af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkImageView() const
1238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_imageView;
1240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_imageView != VK_NULL_HANDLE;
1245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_imageView == VK_NULL_HANDLE;
1250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkImageView m_imageView;
1254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageView ) == sizeof( VkImageView ), "handle and wrapper have different size!" );
1256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class ShaderModule
1258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModule()
1261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_shaderModule(VK_NULL_HANDLE)
1262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModule(VkShaderModule shaderModule)
1266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_shaderModule(shaderModule)
1267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModule& operator=(VkShaderModule shaderModule)
1270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_shaderModule = shaderModule;
1272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1276af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(ShaderModule const &rhs) const
1277af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1278af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_shaderModule == rhs.m_shaderModule;
1279af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1280af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1281af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(ShaderModule const &rhs) const
1282af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1283af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_shaderModule != rhs.m_shaderModule;
1284af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1285af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1286af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(ShaderModule const &rhs) const
1287af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1288af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_shaderModule < rhs.m_shaderModule;
1289af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1290af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkShaderModule() const
1295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_shaderModule;
1297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_shaderModule != VK_NULL_HANDLE;
1302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_shaderModule == VK_NULL_HANDLE;
1307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkShaderModule m_shaderModule;
1311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ShaderModule ) == sizeof( VkShaderModule ), "handle and wrapper have different size!" );
1313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Pipeline
1315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Pipeline()
1318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_pipeline(VK_NULL_HANDLE)
1319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Pipeline(VkPipeline pipeline)
1323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_pipeline(pipeline)
1324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Pipeline& operator=(VkPipeline pipeline)
1327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_pipeline = pipeline;
1329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1333af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Pipeline const &rhs) const
1334af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1335af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipeline == rhs.m_pipeline;
1336af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1337af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1338af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Pipeline const &rhs) const
1339af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1340af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipeline != rhs.m_pipeline;
1341af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1342af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1343af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Pipeline const &rhs) const
1344af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1345af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipeline < rhs.m_pipeline;
1346af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1347af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkPipeline() const
1352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipeline;
1354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipeline != VK_NULL_HANDLE;
1359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipeline == VK_NULL_HANDLE;
1364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkPipeline m_pipeline;
1368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Pipeline ) == sizeof( VkPipeline ), "handle and wrapper have different size!" );
1370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class PipelineLayout
1372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayout()
1375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_pipelineLayout(VK_NULL_HANDLE)
1376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayout(VkPipelineLayout pipelineLayout)
1380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_pipelineLayout(pipelineLayout)
1381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayout& operator=(VkPipelineLayout pipelineLayout)
1384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_pipelineLayout = pipelineLayout;
1386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1390af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(PipelineLayout const &rhs) const
1391af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1392af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipelineLayout == rhs.m_pipelineLayout;
1393af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1394af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1395af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(PipelineLayout const &rhs) const
1396af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1397af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipelineLayout != rhs.m_pipelineLayout;
1398af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1399af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1400af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(PipelineLayout const &rhs) const
1401af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1402af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipelineLayout < rhs.m_pipelineLayout;
1403af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1404af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkPipelineLayout() const
1409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipelineLayout;
1411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipelineLayout != VK_NULL_HANDLE;
1416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipelineLayout == VK_NULL_HANDLE;
1421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkPipelineLayout m_pipelineLayout;
1425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineLayout ) == sizeof( VkPipelineLayout ), "handle and wrapper have different size!" );
1427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Sampler
1429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Sampler()
1432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_sampler(VK_NULL_HANDLE)
1433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Sampler(VkSampler sampler)
1437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_sampler(sampler)
1438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Sampler& operator=(VkSampler sampler)
1441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_sampler = sampler;
1443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1447af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Sampler const &rhs) const
1448af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1449af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_sampler == rhs.m_sampler;
1450af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1451af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1452af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Sampler const &rhs) const
1453af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1454af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_sampler != rhs.m_sampler;
1455af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1456af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1457af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Sampler const &rhs) const
1458af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1459af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_sampler < rhs.m_sampler;
1460af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1461af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkSampler() const
1466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_sampler;
1468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_sampler != VK_NULL_HANDLE;
1473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_sampler == VK_NULL_HANDLE;
1478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkSampler m_sampler;
1482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Sampler ) == sizeof( VkSampler ), "handle and wrapper have different size!" );
1484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DescriptorSet
1486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSet()
1489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_descriptorSet(VK_NULL_HANDLE)
1490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSet(VkDescriptorSet descriptorSet)
1494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_descriptorSet(descriptorSet)
1495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSet& operator=(VkDescriptorSet descriptorSet)
1498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_descriptorSet = descriptorSet;
1500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1504af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DescriptorSet const &rhs) const
1505af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1506af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorSet == rhs.m_descriptorSet;
1507af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1508af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1509af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DescriptorSet const &rhs) const
1510af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1511af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorSet != rhs.m_descriptorSet;
1512af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1513af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1514af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DescriptorSet const &rhs) const
1515af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1516af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorSet < rhs.m_descriptorSet;
1517af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1518af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDescriptorSet() const
1523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorSet;
1525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorSet != VK_NULL_HANDLE;
1530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorSet == VK_NULL_HANDLE;
1535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDescriptorSet m_descriptorSet;
1539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorSet ) == sizeof( VkDescriptorSet ), "handle and wrapper have different size!" );
1541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DescriptorSetLayout
1543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayout()
1546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_descriptorSetLayout(VK_NULL_HANDLE)
1547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout)
1551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_descriptorSetLayout(descriptorSetLayout)
1552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayout& operator=(VkDescriptorSetLayout descriptorSetLayout)
1555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_descriptorSetLayout = descriptorSetLayout;
1557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1561af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DescriptorSetLayout const &rhs) const
1562af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1563af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorSetLayout == rhs.m_descriptorSetLayout;
1564af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1565af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1566af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DescriptorSetLayout const &rhs) const
1567af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1568af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorSetLayout != rhs.m_descriptorSetLayout;
1569af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1570af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1571af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DescriptorSetLayout const &rhs) const
1572af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1573af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorSetLayout < rhs.m_descriptorSetLayout;
1574af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1575af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDescriptorSetLayout() const
1580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorSetLayout;
1582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorSetLayout != VK_NULL_HANDLE;
1587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorSetLayout == VK_NULL_HANDLE;
1592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDescriptorSetLayout m_descriptorSetLayout;
1596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ), "handle and wrapper have different size!" );
1598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DescriptorPool
1600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPool()
1603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_descriptorPool(VK_NULL_HANDLE)
1604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPool(VkDescriptorPool descriptorPool)
1608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_descriptorPool(descriptorPool)
1609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPool& operator=(VkDescriptorPool descriptorPool)
1612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_descriptorPool = descriptorPool;
1614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1618af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DescriptorPool const &rhs) const
1619af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1620af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorPool == rhs.m_descriptorPool;
1621af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1622af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1623af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DescriptorPool const &rhs) const
1624af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1625af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorPool != rhs.m_descriptorPool;
1626af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1627af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1628af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DescriptorPool const &rhs) const
1629af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1630af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_descriptorPool < rhs.m_descriptorPool;
1631af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1632af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDescriptorPool() const
1637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorPool;
1639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorPool != VK_NULL_HANDLE;
1644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_descriptorPool == VK_NULL_HANDLE;
1649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDescriptorPool m_descriptorPool;
1653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorPool ) == sizeof( VkDescriptorPool ), "handle and wrapper have different size!" );
1655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Fence
1657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Fence()
1660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_fence(VK_NULL_HANDLE)
1661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Fence(VkFence fence)
1665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_fence(fence)
1666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Fence& operator=(VkFence fence)
1669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_fence = fence;
1671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1675af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Fence const &rhs) const
1676af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1677af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_fence == rhs.m_fence;
1678af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1679af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1680af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Fence const &rhs) const
1681af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1682af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_fence != rhs.m_fence;
1683af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1684af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1685af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Fence const &rhs) const
1686af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1687af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_fence < rhs.m_fence;
1688af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1689af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkFence() const
1694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_fence;
1696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_fence != VK_NULL_HANDLE;
1701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_fence == VK_NULL_HANDLE;
1706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkFence m_fence;
1710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Fence ) == sizeof( VkFence ), "handle and wrapper have different size!" );
1712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Semaphore
1714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Semaphore()
1717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_semaphore(VK_NULL_HANDLE)
1718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Semaphore(VkSemaphore semaphore)
1722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_semaphore(semaphore)
1723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Semaphore& operator=(VkSemaphore semaphore)
1726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_semaphore = semaphore;
1728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1732af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Semaphore const &rhs) const
1733af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1734af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_semaphore == rhs.m_semaphore;
1735af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1736af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1737af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Semaphore const &rhs) const
1738af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1739af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_semaphore != rhs.m_semaphore;
1740af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1741af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1742af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Semaphore const &rhs) const
1743af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1744af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_semaphore < rhs.m_semaphore;
1745af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1746af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkSemaphore() const
1751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_semaphore;
1753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_semaphore != VK_NULL_HANDLE;
1758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_semaphore == VK_NULL_HANDLE;
1763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkSemaphore m_semaphore;
1767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Semaphore ) == sizeof( VkSemaphore ), "handle and wrapper have different size!" );
1769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Event
1771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Event()
1774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_event(VK_NULL_HANDLE)
1775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Event(VkEvent event)
1779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_event(event)
1780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Event& operator=(VkEvent event)
1783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_event = event;
1785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1789af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Event const &rhs) const
1790af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1791af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_event == rhs.m_event;
1792af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1793af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1794af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Event const &rhs) const
1795af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1796af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_event != rhs.m_event;
1797af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1798af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1799af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Event const &rhs) const
1800af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1801af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_event < rhs.m_event;
1802af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1803af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkEvent() const
1808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_event;
1810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_event != VK_NULL_HANDLE;
1815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_event == VK_NULL_HANDLE;
1820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkEvent m_event;
1824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Event ) == sizeof( VkEvent ), "handle and wrapper have different size!" );
1826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class QueryPool
1828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPool()
1831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_queryPool(VK_NULL_HANDLE)
1832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPool(VkQueryPool queryPool)
1836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_queryPool(queryPool)
1837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPool& operator=(VkQueryPool queryPool)
1840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_queryPool = queryPool;
1842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1846af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(QueryPool const &rhs) const
1847af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1848af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_queryPool == rhs.m_queryPool;
1849af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1850af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1851af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(QueryPool const &rhs) const
1852af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1853af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_queryPool != rhs.m_queryPool;
1854af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1855af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1856af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(QueryPool const &rhs) const
1857af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1858af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_queryPool < rhs.m_queryPool;
1859af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1860af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkQueryPool() const
1865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_queryPool;
1867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_queryPool != VK_NULL_HANDLE;
1872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_queryPool == VK_NULL_HANDLE;
1877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkQueryPool m_queryPool;
1881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( QueryPool ) == sizeof( VkQueryPool ), "handle and wrapper have different size!" );
1883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Framebuffer
1885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Framebuffer()
1888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_framebuffer(VK_NULL_HANDLE)
1889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Framebuffer(VkFramebuffer framebuffer)
1893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_framebuffer(framebuffer)
1894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Framebuffer& operator=(VkFramebuffer framebuffer)
1897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_framebuffer = framebuffer;
1899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1903af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Framebuffer const &rhs) const
1904af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1905af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_framebuffer == rhs.m_framebuffer;
1906af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1907af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1908af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Framebuffer const &rhs) const
1909af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1910af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_framebuffer != rhs.m_framebuffer;
1911af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1912af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1913af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Framebuffer const &rhs) const
1914af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1915af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_framebuffer < rhs.m_framebuffer;
1916af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1917af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkFramebuffer() const
1922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_framebuffer;
1924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_framebuffer != VK_NULL_HANDLE;
1929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_framebuffer == VK_NULL_HANDLE;
1934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkFramebuffer m_framebuffer;
1938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Framebuffer ) == sizeof( VkFramebuffer ), "handle and wrapper have different size!" );
1940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class RenderPass
1942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
1943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
1944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass()
1945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_renderPass(VK_NULL_HANDLE)
1946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass(VkRenderPass renderPass)
1950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_renderPass(renderPass)
1951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
1952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass& operator=(VkRenderPass renderPass)
1954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_renderPass = renderPass;
1956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
1957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1960af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(RenderPass const &rhs) const
1961af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1962af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_renderPass == rhs.m_renderPass;
1963af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1964af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1965af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(RenderPass const &rhs) const
1966af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1967af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_renderPass != rhs.m_renderPass;
1968af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1969af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1970af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(RenderPass const &rhs) const
1971af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
1972af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_renderPass < rhs.m_renderPass;
1973af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
1974af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
1975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
1977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
1978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkRenderPass() const
1979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_renderPass;
1981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
1984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_renderPass != VK_NULL_HANDLE;
1986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
1989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
1990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_renderPass == VK_NULL_HANDLE;
1991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
1992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
1994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkRenderPass m_renderPass;
1995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
1996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( RenderPass ) == sizeof( VkRenderPass ), "handle and wrapper have different size!" );
1997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
1998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class PipelineCache
1999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
2001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCache()
2002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_pipelineCache(VK_NULL_HANDLE)
2003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCache(VkPipelineCache pipelineCache)
2007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_pipelineCache(pipelineCache)
2008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCache& operator=(VkPipelineCache pipelineCache)
2011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_pipelineCache = pipelineCache;
2013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2017af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(PipelineCache const &rhs) const
2018af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2019af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipelineCache == rhs.m_pipelineCache;
2020af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2021af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2022af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(PipelineCache const &rhs) const
2023af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2024af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipelineCache != rhs.m_pipelineCache;
2025af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2026af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2027af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(PipelineCache const &rhs) const
2028af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2029af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_pipelineCache < rhs.m_pipelineCache;
2030af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2031af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
2034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkPipelineCache() const
2036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipelineCache;
2038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
2041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipelineCache != VK_NULL_HANDLE;
2043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
2046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_pipelineCache == VK_NULL_HANDLE;
2048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
2051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkPipelineCache m_pipelineCache;
2052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineCache ) == sizeof( VkPipelineCache ), "handle and wrapper have different size!" );
2054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DisplayKHR
2056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
2058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayKHR()
2059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_displayKHR(VK_NULL_HANDLE)
2060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayKHR(VkDisplayKHR displayKHR)
2064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_displayKHR(displayKHR)
2065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayKHR& operator=(VkDisplayKHR displayKHR)
2068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_displayKHR = displayKHR;
2070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2074af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DisplayKHR const &rhs) const
2075af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2076af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_displayKHR == rhs.m_displayKHR;
2077af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2078af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2079af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DisplayKHR const &rhs) const
2080af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2081af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_displayKHR != rhs.m_displayKHR;
2082af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2083af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2084af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DisplayKHR const &rhs) const
2085af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2086af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_displayKHR < rhs.m_displayKHR;
2087af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2088af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
2091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDisplayKHR() const
2093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_displayKHR;
2095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
2098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_displayKHR != VK_NULL_HANDLE;
2100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
2103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_displayKHR == VK_NULL_HANDLE;
2105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
2108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDisplayKHR m_displayKHR;
2109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayKHR ) == sizeof( VkDisplayKHR ), "handle and wrapper have different size!" );
2111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DisplayModeKHR
2113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
2115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeKHR()
2116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_displayModeKHR(VK_NULL_HANDLE)
2117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeKHR(VkDisplayModeKHR displayModeKHR)
2121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_displayModeKHR(displayModeKHR)
2122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeKHR& operator=(VkDisplayModeKHR displayModeKHR)
2125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_displayModeKHR = displayModeKHR;
2127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2131af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DisplayModeKHR const &rhs) const
2132af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2133af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_displayModeKHR == rhs.m_displayModeKHR;
2134af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2135af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2136af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DisplayModeKHR const &rhs) const
2137af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2138af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_displayModeKHR != rhs.m_displayModeKHR;
2139af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2140af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2141af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DisplayModeKHR const &rhs) const
2142af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2143af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_displayModeKHR < rhs.m_displayModeKHR;
2144af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2145af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
2148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDisplayModeKHR() const
2150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_displayModeKHR;
2152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
2155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_displayModeKHR != VK_NULL_HANDLE;
2157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
2160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_displayModeKHR == VK_NULL_HANDLE;
2162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
2165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDisplayModeKHR m_displayModeKHR;
2166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayModeKHR ) == sizeof( VkDisplayModeKHR ), "handle and wrapper have different size!" );
2168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class SurfaceKHR
2170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
2172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceKHR()
2173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_surfaceKHR(VK_NULL_HANDLE)
2174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceKHR(VkSurfaceKHR surfaceKHR)
2178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_surfaceKHR(surfaceKHR)
2179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceKHR& operator=(VkSurfaceKHR surfaceKHR)
2182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_surfaceKHR = surfaceKHR;
2184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2188af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(SurfaceKHR const &rhs) const
2189af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2190af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_surfaceKHR == rhs.m_surfaceKHR;
2191af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2192af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2193af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(SurfaceKHR const &rhs) const
2194af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2195af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_surfaceKHR != rhs.m_surfaceKHR;
2196af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2197af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2198af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(SurfaceKHR const &rhs) const
2199af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2200af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_surfaceKHR < rhs.m_surfaceKHR;
2201af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2202af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
2205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkSurfaceKHR() const
2207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_surfaceKHR;
2209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
2212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_surfaceKHR != VK_NULL_HANDLE;
2214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
2217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_surfaceKHR == VK_NULL_HANDLE;
2219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
2222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkSurfaceKHR m_surfaceKHR;
2223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SurfaceKHR ) == sizeof( VkSurfaceKHR ), "handle and wrapper have different size!" );
2225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class SwapchainKHR
2227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
2229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainKHR()
2230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_swapchainKHR(VK_NULL_HANDLE)
2231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainKHR(VkSwapchainKHR swapchainKHR)
2235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_swapchainKHR(swapchainKHR)
2236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainKHR& operator=(VkSwapchainKHR swapchainKHR)
2239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_swapchainKHR = swapchainKHR;
2241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2245af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(SwapchainKHR const &rhs) const
2246af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2247af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_swapchainKHR == rhs.m_swapchainKHR;
2248af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2249af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2250af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(SwapchainKHR const &rhs) const
2251af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2252af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_swapchainKHR != rhs.m_swapchainKHR;
2253af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2254af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2255af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(SwapchainKHR const &rhs) const
2256af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2257af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_swapchainKHR < rhs.m_swapchainKHR;
2258af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2259af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
2262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkSwapchainKHR() const
2264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_swapchainKHR;
2266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
2269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_swapchainKHR != VK_NULL_HANDLE;
2271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
2274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_swapchainKHR == VK_NULL_HANDLE;
2276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
2279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkSwapchainKHR m_swapchainKHR;
2280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SwapchainKHR ) == sizeof( VkSwapchainKHR ), "handle and wrapper have different size!" );
2282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class DebugReportCallbackEXT
2284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
2286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackEXT()
2287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_debugReportCallbackEXT(VK_NULL_HANDLE)
2288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackEXT(VkDebugReportCallbackEXT debugReportCallbackEXT)
2292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_debugReportCallbackEXT(debugReportCallbackEXT)
2293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
2294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackEXT& operator=(VkDebugReportCallbackEXT debugReportCallbackEXT)
2296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_debugReportCallbackEXT = debugReportCallbackEXT;
2298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2302af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(DebugReportCallbackEXT const &rhs) const
2303af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2304af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_debugReportCallbackEXT == rhs.m_debugReportCallbackEXT;
2305af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2306af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2307af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(DebugReportCallbackEXT const &rhs) const
2308af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2309af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_debugReportCallbackEXT != rhs.m_debugReportCallbackEXT;
2310af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2311af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2312af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(DebugReportCallbackEXT const &rhs) const
2313af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
2314af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_debugReportCallbackEXT < rhs.m_debugReportCallbackEXT;
2315af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
2316af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
2317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
2319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
2320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDebugReportCallbackEXT() const
2321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_debugReportCallbackEXT;
2323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
2326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_debugReportCallbackEXT != VK_NULL_HANDLE;
2328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
2331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_debugReportCallbackEXT == VK_NULL_HANDLE;
2333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
2336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDebugReportCallbackEXT m_debugReportCallbackEXT;
2337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ), "handle and wrapper have different size!" );
2339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Offset2D
2341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D( int32_t x_ = 0, int32_t y_ = 0 )
2343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : x( x_ )
2344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , y( y_ )
2345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D( VkOffset2D const & rhs )
2349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Offset2D) );
2351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D& operator=( VkOffset2D const & rhs )
2354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Offset2D) );
2356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D& setX( int32_t x_ )
2360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      x = x_;
2362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D& setY( int32_t y_ )
2366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      y = y_;
2368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkOffset2D&() const
2372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkOffset2D*>(this);
2374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Offset2D const& rhs ) const
2377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( x == rhs.x )
2379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( y == rhs.y );
2380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Offset2D const& rhs ) const
2383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t x;
2388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t y;
2389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" );
2391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Offset3D
2393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D( int32_t x_ = 0, int32_t y_ = 0, int32_t z_ = 0 )
2395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : x( x_ )
2396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , y( y_ )
2397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , z( z_ )
2398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D( VkOffset3D const & rhs )
2402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Offset3D) );
2404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D& operator=( VkOffset3D const & rhs )
2407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Offset3D) );
2409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D& setX( int32_t x_ )
2413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      x = x_;
2415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D& setY( int32_t y_ )
2419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      y = y_;
2421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D& setZ( int32_t z_ )
2425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      z = z_;
2427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkOffset3D&() const
2431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkOffset3D*>(this);
2433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Offset3D const& rhs ) const
2436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( x == rhs.x )
2438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( y == rhs.y )
2439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( z == rhs.z );
2440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Offset3D const& rhs ) const
2443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t x;
2448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t y;
2449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t z;
2450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" );
2452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Extent2D
2454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D( uint32_t width_ = 0, uint32_t height_ = 0 )
2456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : width( width_ )
2457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , height( height_ )
2458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D( VkExtent2D const & rhs )
2462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Extent2D) );
2464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D& operator=( VkExtent2D const & rhs )
2467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Extent2D) );
2469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D& setWidth( uint32_t width_ )
2473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      width = width_;
2475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D& setHeight( uint32_t height_ )
2479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      height = height_;
2481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkExtent2D&() const
2485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkExtent2D*>(this);
2487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Extent2D const& rhs ) const
2490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( width == rhs.width )
2492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( height == rhs.height );
2493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Extent2D const& rhs ) const
2496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t width;
2501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t height;
2502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" );
2504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Extent3D
2506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D( uint32_t width_ = 0, uint32_t height_ = 0, uint32_t depth_ = 0 )
2508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : width( width_ )
2509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , height( height_ )
2510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depth( depth_ )
2511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D( VkExtent3D const & rhs )
2515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Extent3D) );
2517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D& operator=( VkExtent3D const & rhs )
2520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Extent3D) );
2522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D& setWidth( uint32_t width_ )
2526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      width = width_;
2528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D& setHeight( uint32_t height_ )
2532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      height = height_;
2534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D& setDepth( uint32_t depth_ )
2538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depth = depth_;
2540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkExtent3D&() const
2544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkExtent3D*>(this);
2546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Extent3D const& rhs ) const
2549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( width == rhs.width )
2551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( height == rhs.height )
2552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depth == rhs.depth );
2553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Extent3D const& rhs ) const
2556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t width;
2561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t height;
2562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t depth;
2563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" );
2565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Viewport
2567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport( float x_ = 0, float y_ = 0, float width_ = 0, float height_ = 0, float minDepth_ = 0, float maxDepth_ = 0 )
2569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : x( x_ )
2570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , y( y_ )
2571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , width( width_ )
2572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , height( height_ )
2573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , minDepth( minDepth_ )
2574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , maxDepth( maxDepth_ )
2575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport( VkViewport const & rhs )
2579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Viewport) );
2581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& operator=( VkViewport const & rhs )
2584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Viewport) );
2586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& setX( float x_ )
2590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      x = x_;
2592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& setY( float y_ )
2596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      y = y_;
2598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& setWidth( float width_ )
2602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      width = width_;
2604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& setHeight( float height_ )
2608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      height = height_;
2610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& setMinDepth( float minDepth_ )
2614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      minDepth = minDepth_;
2616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Viewport& setMaxDepth( float maxDepth_ )
2620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      maxDepth = maxDepth_;
2622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkViewport&() const
2626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkViewport*>(this);
2628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Viewport const& rhs ) const
2631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( x == rhs.x )
2633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( y == rhs.y )
2634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( width == rhs.width )
2635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( height == rhs.height )
2636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minDepth == rhs.minDepth )
2637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDepth == rhs.maxDepth );
2638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Viewport const& rhs ) const
2641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float x;
2646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float y;
2647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float width;
2648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float height;
2649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float minDepth;
2650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxDepth;
2651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" );
2653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Rect2D
2655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D() )
2657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : offset( offset_ )
2658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , extent( extent_ )
2659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D( VkRect2D const & rhs )
2663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Rect2D) );
2665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D& operator=( VkRect2D const & rhs )
2668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Rect2D) );
2670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D& setOffset( Offset2D offset_ )
2674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
2676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D& setExtent( Extent2D extent_ )
2680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      extent = extent_;
2682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkRect2D&() const
2686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkRect2D*>(this);
2688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Rect2D const& rhs ) const
2691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( offset == rhs.offset )
2693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( extent == rhs.extent );
2694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Rect2D const& rhs ) const
2697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D offset;
2702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D extent;
2703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" );
2705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ClearRect
2707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearRect( Rect2D rect_ = Rect2D(), uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
2709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : rect( rect_ )
2710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , baseArrayLayer( baseArrayLayer_ )
2711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layerCount( layerCount_ )
2712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearRect( VkClearRect const & rhs )
2716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ClearRect) );
2718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearRect& operator=( VkClearRect const & rhs )
2721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ClearRect) );
2723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearRect& setRect( Rect2D rect_ )
2727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      rect = rect_;
2729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearRect& setBaseArrayLayer( uint32_t baseArrayLayer_ )
2733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      baseArrayLayer = baseArrayLayer_;
2735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearRect& setLayerCount( uint32_t layerCount_ )
2739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layerCount = layerCount_;
2741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkClearRect&() const
2745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkClearRect*>(this);
2747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ClearRect const& rhs ) const
2750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( rect == rhs.rect )
2752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( baseArrayLayer == rhs.baseArrayLayer )
2753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layerCount == rhs.layerCount );
2754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ClearRect const& rhs ) const
2757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D rect;
2762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t baseArrayLayer;
2763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t layerCount;
2764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" );
2766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ExtensionProperties
2768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkExtensionProperties&() const
2770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkExtensionProperties*>(this);
2772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ExtensionProperties const& rhs ) const
2775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( memcmp( extensionName, rhs.extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( specVersion == rhs.specVersion );
2778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ExtensionProperties const& rhs ) const
2781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
2786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t specVersion;
2787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ExtensionProperties ) == sizeof( VkExtensionProperties ), "struct and wrapper have different size!" );
2789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct LayerProperties
2791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkLayerProperties&() const
2793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkLayerProperties*>(this);
2795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( LayerProperties const& rhs ) const
2798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( memcmp( layerName, rhs.layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( specVersion == rhs.specVersion )
2801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( implementationVersion == rhs.implementationVersion )
2802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( description, rhs.description, VK_MAX_DESCRIPTION_SIZE * sizeof( char ) ) == 0 );
2803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( LayerProperties const& rhs ) const
2806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    char layerName[VK_MAX_EXTENSION_NAME_SIZE];
2811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t specVersion;
2812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t implementationVersion;
2813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    char description[VK_MAX_DESCRIPTION_SIZE];
2814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" );
2816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct AllocationCallbacks
2818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks( void* pUserData_ = nullptr, PFN_vkAllocationFunction pfnAllocation_ = nullptr, PFN_vkReallocationFunction pfnReallocation_ = nullptr, PFN_vkFreeFunction pfnFree_ = nullptr, PFN_vkInternalAllocationNotification pfnInternalAllocation_ = nullptr, PFN_vkInternalFreeNotification pfnInternalFree_ = nullptr )
2820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : pUserData( pUserData_ )
2821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pfnAllocation( pfnAllocation_ )
2822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pfnReallocation( pfnReallocation_ )
2823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pfnFree( pfnFree_ )
2824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pfnInternalAllocation( pfnInternalAllocation_ )
2825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pfnInternalFree( pfnInternalFree_ )
2826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks( VkAllocationCallbacks const & rhs )
2830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& operator=( VkAllocationCallbacks const & rhs )
2835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& setPUserData( void* pUserData_ )
2841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pUserData = pUserData_;
2843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ )
2847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pfnAllocation = pfnAllocation_;
2849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ )
2853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pfnReallocation = pfnReallocation_;
2855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& setPfnFree( PFN_vkFreeFunction pfnFree_ )
2859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pfnFree = pfnFree_;
2861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ )
2865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pfnInternalAllocation = pfnInternalAllocation_;
2867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AllocationCallbacks& setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ )
2871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pfnInternalFree = pfnInternalFree_;
2873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkAllocationCallbacks&() const
2877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkAllocationCallbacks*>(this);
2879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( AllocationCallbacks const& rhs ) const
2882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( pUserData == rhs.pUserData )
2884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pfnAllocation == rhs.pfnAllocation )
2885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pfnReallocation == rhs.pfnReallocation )
2886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pfnFree == rhs.pfnFree )
2887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pfnInternalAllocation == rhs.pfnInternalAllocation )
2888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pfnInternalFree == rhs.pfnInternalFree );
2889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( AllocationCallbacks const& rhs ) const
2892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void* pUserData;
2897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkAllocationFunction pfnAllocation;
2898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkReallocationFunction pfnReallocation;
2899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkFreeFunction pfnFree;
2900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkInternalAllocationNotification pfnInternalAllocation;
2901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkInternalFreeNotification pfnInternalFree;
2902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( AllocationCallbacks ) == sizeof( VkAllocationCallbacks ), "struct and wrapper have different size!" );
2904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MemoryRequirements
2906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMemoryRequirements&() const
2908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMemoryRequirements*>(this);
2910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MemoryRequirements const& rhs ) const
2913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( size == rhs.size )
2915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( alignment == rhs.alignment )
2916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memoryTypeBits == rhs.memoryTypeBits );
2917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MemoryRequirements const& rhs ) const
2920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
2925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize alignment;
2926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t memoryTypeBits;
2927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MemoryRequirements ) == sizeof( VkMemoryRequirements ), "struct and wrapper have different size!" );
2929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorBufferInfo
2931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorBufferInfo( Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize range_ = 0 )
2933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : buffer( buffer_ )
2934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
2935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , range( range_ )
2936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs )
2940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorBufferInfo& operator=( VkDescriptorBufferInfo const & rhs )
2945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorBufferInfo& setBuffer( Buffer buffer_ )
2951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      buffer = buffer_;
2953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorBufferInfo& setOffset( DeviceSize offset_ )
2957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
2959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorBufferInfo& setRange( DeviceSize range_ )
2963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      range = range_;
2965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
2966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorBufferInfo&() const
2969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorBufferInfo*>(this);
2971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorBufferInfo const& rhs ) const
2974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( buffer == rhs.buffer )
2976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
2977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( range == rhs.range );
2978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorBufferInfo const& rhs ) const
2981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
2983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer buffer;
2986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize offset;
2987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize range;
2988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
2989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ), "struct and wrapper have different size!" );
2990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SubresourceLayout
2992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
2993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSubresourceLayout&() const
2994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
2995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSubresourceLayout*>(this);
2996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
2997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
2998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SubresourceLayout const& rhs ) const
2999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( offset == rhs.offset )
3001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size )
3002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( rowPitch == rhs.rowPitch )
3003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( arrayPitch == rhs.arrayPitch )
3004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthPitch == rhs.depthPitch );
3005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SubresourceLayout const& rhs ) const
3008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize offset;
3013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
3014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize rowPitch;
3015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize arrayPitch;
3016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize depthPitch;
3017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SubresourceLayout ) == sizeof( VkSubresourceLayout ), "struct and wrapper have different size!" );
3019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct BufferCopy
3021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCopy( DeviceSize srcOffset_ = 0, DeviceSize dstOffset_ = 0, DeviceSize size_ = 0 )
3023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : srcOffset( srcOffset_ )
3024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstOffset( dstOffset_ )
3025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
3026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCopy( VkBufferCopy const & rhs )
3030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferCopy) );
3032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCopy& operator=( VkBufferCopy const & rhs )
3035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferCopy) );
3037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCopy& setSrcOffset( DeviceSize srcOffset_ )
3041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcOffset = srcOffset_;
3043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCopy& setDstOffset( DeviceSize dstOffset_ )
3047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstOffset = dstOffset_;
3049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCopy& setSize( DeviceSize size_ )
3053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
3055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkBufferCopy&() const
3059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkBufferCopy*>(this);
3061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( BufferCopy const& rhs ) const
3064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( srcOffset == rhs.srcOffset )
3066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstOffset == rhs.dstOffset )
3067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size );
3068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( BufferCopy const& rhs ) const
3071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize srcOffset;
3076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize dstOffset;
3077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
3078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" );
3080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SpecializationMapEntry
3082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationMapEntry( uint32_t constantID_ = 0, uint32_t offset_ = 0, size_t size_ = 0 )
3084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : constantID( constantID_ )
3085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
3086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
3087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationMapEntry( VkSpecializationMapEntry const & rhs )
3091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
3093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationMapEntry& operator=( VkSpecializationMapEntry const & rhs )
3096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
3098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationMapEntry& setConstantID( uint32_t constantID_ )
3102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      constantID = constantID_;
3104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationMapEntry& setOffset( uint32_t offset_ )
3108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
3110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationMapEntry& setSize( size_t size_ )
3114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
3116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSpecializationMapEntry&() const
3120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSpecializationMapEntry*>(this);
3122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SpecializationMapEntry const& rhs ) const
3125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( constantID == rhs.constantID )
3127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
3128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size );
3129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SpecializationMapEntry const& rhs ) const
3132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t constantID;
3137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t offset;
3138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    size_t size;
3139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ), "struct and wrapper have different size!" );
3141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SpecializationInfo
3143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo( uint32_t mapEntryCount_ = 0, const SpecializationMapEntry* pMapEntries_ = nullptr, size_t dataSize_ = 0, const void* pData_ = nullptr )
3145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : mapEntryCount( mapEntryCount_ )
3146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pMapEntries( pMapEntries_ )
3147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dataSize( dataSize_ )
3148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pData( pData_ )
3149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo( VkSpecializationInfo const & rhs )
3153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SpecializationInfo) );
3155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo& operator=( VkSpecializationInfo const & rhs )
3158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SpecializationInfo) );
3160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo& setMapEntryCount( uint32_t mapEntryCount_ )
3164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mapEntryCount = mapEntryCount_;
3166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo& setPMapEntries( const SpecializationMapEntry* pMapEntries_ )
3170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pMapEntries = pMapEntries_;
3172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo& setDataSize( size_t dataSize_ )
3176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dataSize = dataSize_;
3178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SpecializationInfo& setPData( const void* pData_ )
3182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pData = pData_;
3184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSpecializationInfo&() const
3188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSpecializationInfo*>(this);
3190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SpecializationInfo const& rhs ) const
3193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( mapEntryCount == rhs.mapEntryCount )
3195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pMapEntries == rhs.pMapEntries )
3196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dataSize == rhs.dataSize )
3197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pData == rhs.pData );
3198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SpecializationInfo const& rhs ) const
3201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t mapEntryCount;
3206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SpecializationMapEntry* pMapEntries;
3207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    size_t dataSize;
3208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pData;
3209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SpecializationInfo ) == sizeof( VkSpecializationInfo ), "struct and wrapper have different size!" );
3211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  union ClearColorValue
3213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue( const std::array<float,4>& float32_ = { {0} } )
3215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
3217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue( const std::array<int32_t,4>& int32_ )
3220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
3222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue( const std::array<uint32_t,4>& uint32_ )
3225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
3227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue& setFloat32( std::array<float,4> float32_ )
3230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
3232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue& setInt32( std::array<int32_t,4> int32_ )
3236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
3238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue& setUint32( std::array<uint32_t,4> uint32_ )
3242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
3244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkClearColorValue const& () const
3248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkClearColorValue*>(this);
3250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float float32[4];
3253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t int32[4];
3254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t uint32[4];
3255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ClearDepthStencilValue
3258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearDepthStencilValue( float depth_ = 0, uint32_t stencil_ = 0 )
3260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : depth( depth_ )
3261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stencil( stencil_ )
3262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearDepthStencilValue( VkClearDepthStencilValue const & rhs )
3266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
3268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearDepthStencilValue& operator=( VkClearDepthStencilValue const & rhs )
3271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
3273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearDepthStencilValue& setDepth( float depth_ )
3277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depth = depth_;
3279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearDepthStencilValue& setStencil( uint32_t stencil_ )
3283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stencil = stencil_;
3285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkClearDepthStencilValue&() const
3289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkClearDepthStencilValue*>(this);
3291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ClearDepthStencilValue const& rhs ) const
3294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( depth == rhs.depth )
3296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stencil == rhs.stencil );
3297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ClearDepthStencilValue const& rhs ) const
3300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float depth;
3305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t stencil;
3306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ), "struct and wrapper have different size!" );
3308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  union ClearValue
3310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearValue( ClearColorValue color_ = ClearColorValue() )
3312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      color = color_;
3314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearValue( ClearDepthStencilValue depthStencil_ )
3317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthStencil = depthStencil_;
3319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearValue& setColor( ClearColorValue color_ )
3322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      color = color_;
3324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearValue& setDepthStencil( ClearDepthStencilValue depthStencil_ )
3328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthStencil = depthStencil_;
3330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkClearValue const& () const
3334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkClearValue*>(this);
3336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
3339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearColorValue color;
3340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearDepthStencilValue depthStencil;
3341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
3342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkClearColorValue color;
3343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkClearDepthStencilValue depthStencil;
3344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif  // VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
3345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PhysicalDeviceFeatures
3348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
3350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : robustBufferAccess( robustBufferAccess_ )
3351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , fullDrawIndexUint32( fullDrawIndexUint32_ )
3352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageCubeArray( imageCubeArray_ )
3353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , independentBlend( independentBlend_ )
3354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , geometryShader( geometryShader_ )
3355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , tessellationShader( tessellationShader_ )
3356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sampleRateShading( sampleRateShading_ )
3357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dualSrcBlend( dualSrcBlend_ )
3358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , logicOp( logicOp_ )
3359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , multiDrawIndirect( multiDrawIndirect_ )
3360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , drawIndirectFirstInstance( drawIndirectFirstInstance_ )
3361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthClamp( depthClamp_ )
3362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBiasClamp( depthBiasClamp_ )
3363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , fillModeNonSolid( fillModeNonSolid_ )
3364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBounds( depthBounds_ )
3365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , wideLines( wideLines_ )
3366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , largePoints( largePoints_ )
3367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , alphaToOne( alphaToOne_ )
3368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , multiViewport( multiViewport_ )
3369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , samplerAnisotropy( samplerAnisotropy_ )
3370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , textureCompressionETC2( textureCompressionETC2_ )
3371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , textureCompressionASTC_LDR( textureCompressionASTC_LDR_ )
3372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , textureCompressionBC( textureCompressionBC_ )
3373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , occlusionQueryPrecise( occlusionQueryPrecise_ )
3374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pipelineStatisticsQuery( pipelineStatisticsQuery_ )
3375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , vertexPipelineStoresAndAtomics( vertexPipelineStoresAndAtomics_ )
3376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , fragmentStoresAndAtomics( fragmentStoresAndAtomics_ )
3377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderTessellationAndGeometryPointSize( shaderTessellationAndGeometryPointSize_ )
3378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderImageGatherExtended( shaderImageGatherExtended_ )
3379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderStorageImageExtendedFormats( shaderStorageImageExtendedFormats_ )
3380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderStorageImageMultisample( shaderStorageImageMultisample_ )
3381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderStorageImageReadWithoutFormat( shaderStorageImageReadWithoutFormat_ )
3382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderStorageImageWriteWithoutFormat( shaderStorageImageWriteWithoutFormat_ )
3383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderUniformBufferArrayDynamicIndexing( shaderUniformBufferArrayDynamicIndexing_ )
3384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderSampledImageArrayDynamicIndexing( shaderSampledImageArrayDynamicIndexing_ )
3385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderStorageBufferArrayDynamicIndexing( shaderStorageBufferArrayDynamicIndexing_ )
3386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderStorageImageArrayDynamicIndexing( shaderStorageImageArrayDynamicIndexing_ )
3387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderClipDistance( shaderClipDistance_ )
3388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderCullDistance( shaderCullDistance_ )
3389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderFloat64( shaderFloat64_ )
3390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderInt64( shaderInt64_ )
3391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderInt16( shaderInt16_ )
3392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderResourceResidency( shaderResourceResidency_ )
3393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , shaderResourceMinLod( shaderResourceMinLod_ )
3394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseBinding( sparseBinding_ )
3395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidencyBuffer( sparseResidencyBuffer_ )
3396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidencyImage2D( sparseResidencyImage2D_ )
3397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidencyImage3D( sparseResidencyImage3D_ )
3398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidency2Samples( sparseResidency2Samples_ )
3399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidency4Samples( sparseResidency4Samples_ )
3400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidency8Samples( sparseResidency8Samples_ )
3401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidency16Samples( sparseResidency16Samples_ )
3402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sparseResidencyAliased( sparseResidencyAliased_ )
3403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , variableMultisampleRate( variableMultisampleRate_ )
3404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , inheritedQueries( inheritedQueries_ )
3405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs )
3409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& operator=( VkPhysicalDeviceFeatures const & rhs )
3414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setRobustBufferAccess( Bool32 robustBufferAccess_ )
3420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      robustBufferAccess = robustBufferAccess_;
3422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setFullDrawIndexUint32( Bool32 fullDrawIndexUint32_ )
3426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      fullDrawIndexUint32 = fullDrawIndexUint32_;
3428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setImageCubeArray( Bool32 imageCubeArray_ )
3432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageCubeArray = imageCubeArray_;
3434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setIndependentBlend( Bool32 independentBlend_ )
3438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      independentBlend = independentBlend_;
3440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setGeometryShader( Bool32 geometryShader_ )
3444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      geometryShader = geometryShader_;
3446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setTessellationShader( Bool32 tessellationShader_ )
3450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      tessellationShader = tessellationShader_;
3452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSampleRateShading( Bool32 sampleRateShading_ )
3456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sampleRateShading = sampleRateShading_;
3458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setDualSrcBlend( Bool32 dualSrcBlend_ )
3462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dualSrcBlend = dualSrcBlend_;
3464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setLogicOp( Bool32 logicOp_ )
3468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      logicOp = logicOp_;
3470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setMultiDrawIndirect( Bool32 multiDrawIndirect_ )
3474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      multiDrawIndirect = multiDrawIndirect_;
3476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setDrawIndirectFirstInstance( Bool32 drawIndirectFirstInstance_ )
3480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      drawIndirectFirstInstance = drawIndirectFirstInstance_;
3482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setDepthClamp( Bool32 depthClamp_ )
3486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthClamp = depthClamp_;
3488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setDepthBiasClamp( Bool32 depthBiasClamp_ )
3492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBiasClamp = depthBiasClamp_;
3494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setFillModeNonSolid( Bool32 fillModeNonSolid_ )
3498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      fillModeNonSolid = fillModeNonSolid_;
3500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setDepthBounds( Bool32 depthBounds_ )
3504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBounds = depthBounds_;
3506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setWideLines( Bool32 wideLines_ )
3510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      wideLines = wideLines_;
3512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setLargePoints( Bool32 largePoints_ )
3516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      largePoints = largePoints_;
3518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setAlphaToOne( Bool32 alphaToOne_ )
3522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      alphaToOne = alphaToOne_;
3524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setMultiViewport( Bool32 multiViewport_ )
3528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      multiViewport = multiViewport_;
3530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSamplerAnisotropy( Bool32 samplerAnisotropy_ )
3534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      samplerAnisotropy = samplerAnisotropy_;
3536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setTextureCompressionETC2( Bool32 textureCompressionETC2_ )
3540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      textureCompressionETC2 = textureCompressionETC2_;
3542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setTextureCompressionASTC_LDR( Bool32 textureCompressionASTC_LDR_ )
3546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      textureCompressionASTC_LDR = textureCompressionASTC_LDR_;
3548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setTextureCompressionBC( Bool32 textureCompressionBC_ )
3552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      textureCompressionBC = textureCompressionBC_;
3554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setOcclusionQueryPrecise( Bool32 occlusionQueryPrecise_ )
3558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      occlusionQueryPrecise = occlusionQueryPrecise_;
3560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setPipelineStatisticsQuery( Bool32 pipelineStatisticsQuery_ )
3564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pipelineStatisticsQuery = pipelineStatisticsQuery_;
3566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setVertexPipelineStoresAndAtomics( Bool32 vertexPipelineStoresAndAtomics_ )
3570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_;
3572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setFragmentStoresAndAtomics( Bool32 fragmentStoresAndAtomics_ )
3576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      fragmentStoresAndAtomics = fragmentStoresAndAtomics_;
3578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderTessellationAndGeometryPointSize( Bool32 shaderTessellationAndGeometryPointSize_ )
3582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_;
3584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderImageGatherExtended( Bool32 shaderImageGatherExtended_ )
3588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderImageGatherExtended = shaderImageGatherExtended_;
3590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderStorageImageExtendedFormats( Bool32 shaderStorageImageExtendedFormats_ )
3594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_;
3596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderStorageImageMultisample( Bool32 shaderStorageImageMultisample_ )
3600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderStorageImageMultisample = shaderStorageImageMultisample_;
3602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderStorageImageReadWithoutFormat( Bool32 shaderStorageImageReadWithoutFormat_ )
3606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_;
3608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderStorageImageWriteWithoutFormat( Bool32 shaderStorageImageWriteWithoutFormat_ )
3612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_;
3614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderUniformBufferArrayDynamicIndexing( Bool32 shaderUniformBufferArrayDynamicIndexing_ )
3618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_;
3620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderSampledImageArrayDynamicIndexing( Bool32 shaderSampledImageArrayDynamicIndexing_ )
3624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_;
3626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderStorageBufferArrayDynamicIndexing( Bool32 shaderStorageBufferArrayDynamicIndexing_ )
3630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_;
3632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderStorageImageArrayDynamicIndexing( Bool32 shaderStorageImageArrayDynamicIndexing_ )
3636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_;
3638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderClipDistance( Bool32 shaderClipDistance_ )
3642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderClipDistance = shaderClipDistance_;
3644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderCullDistance( Bool32 shaderCullDistance_ )
3648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderCullDistance = shaderCullDistance_;
3650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderFloat64( Bool32 shaderFloat64_ )
3654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderFloat64 = shaderFloat64_;
3656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderInt64( Bool32 shaderInt64_ )
3660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderInt64 = shaderInt64_;
3662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderInt16( Bool32 shaderInt16_ )
3666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderInt16 = shaderInt16_;
3668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderResourceResidency( Bool32 shaderResourceResidency_ )
3672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderResourceResidency = shaderResourceResidency_;
3674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setShaderResourceMinLod( Bool32 shaderResourceMinLod_ )
3678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      shaderResourceMinLod = shaderResourceMinLod_;
3680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseBinding( Bool32 sparseBinding_ )
3684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseBinding = sparseBinding_;
3686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidencyBuffer( Bool32 sparseResidencyBuffer_ )
3690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidencyBuffer = sparseResidencyBuffer_;
3692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidencyImage2D( Bool32 sparseResidencyImage2D_ )
3696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidencyImage2D = sparseResidencyImage2D_;
3698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidencyImage3D( Bool32 sparseResidencyImage3D_ )
3702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidencyImage3D = sparseResidencyImage3D_;
3704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidency2Samples( Bool32 sparseResidency2Samples_ )
3708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidency2Samples = sparseResidency2Samples_;
3710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidency4Samples( Bool32 sparseResidency4Samples_ )
3714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidency4Samples = sparseResidency4Samples_;
3716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidency8Samples( Bool32 sparseResidency8Samples_ )
3720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidency8Samples = sparseResidency8Samples_;
3722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidency16Samples( Bool32 sparseResidency16Samples_ )
3726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidency16Samples = sparseResidency16Samples_;
3728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setSparseResidencyAliased( Bool32 sparseResidencyAliased_ )
3732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseResidencyAliased = sparseResidencyAliased_;
3734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setVariableMultisampleRate( Bool32 variableMultisampleRate_ )
3738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      variableMultisampleRate = variableMultisampleRate_;
3740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures& setInheritedQueries( Bool32 inheritedQueries_ )
3744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      inheritedQueries = inheritedQueries_;
3746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPhysicalDeviceFeatures&() const
3750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this);
3752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PhysicalDeviceFeatures const& rhs ) const
3755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( robustBufferAccess == rhs.robustBufferAccess )
3757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 )
3758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageCubeArray == rhs.imageCubeArray )
3759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( independentBlend == rhs.independentBlend )
3760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( geometryShader == rhs.geometryShader )
3761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( tessellationShader == rhs.tessellationShader )
3762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampleRateShading == rhs.sampleRateShading )
3763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dualSrcBlend == rhs.dualSrcBlend )
3764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( logicOp == rhs.logicOp )
3765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( multiDrawIndirect == rhs.multiDrawIndirect )
3766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance )
3767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthClamp == rhs.depthClamp )
3768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBiasClamp == rhs.depthBiasClamp )
3769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( fillModeNonSolid == rhs.fillModeNonSolid )
3770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBounds == rhs.depthBounds )
3771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( wideLines == rhs.wideLines )
3772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( largePoints == rhs.largePoints )
3773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( alphaToOne == rhs.alphaToOne )
3774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( multiViewport == rhs.multiViewport )
3775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( samplerAnisotropy == rhs.samplerAnisotropy )
3776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( textureCompressionETC2 == rhs.textureCompressionETC2 )
3777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR )
3778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( textureCompressionBC == rhs.textureCompressionBC )
3779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise )
3780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery )
3781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics )
3782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics )
3783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize )
3784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderImageGatherExtended == rhs.shaderImageGatherExtended )
3785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats )
3786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample )
3787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat )
3788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat )
3789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing )
3790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing )
3791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing )
3792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing )
3793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderClipDistance == rhs.shaderClipDistance )
3794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderCullDistance == rhs.shaderCullDistance )
3795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderFloat64 == rhs.shaderFloat64 )
3796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderInt64 == rhs.shaderInt64 )
3797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderInt16 == rhs.shaderInt16 )
3798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderResourceResidency == rhs.shaderResourceResidency )
3799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( shaderResourceMinLod == rhs.shaderResourceMinLod )
3800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseBinding == rhs.sparseBinding )
3801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidencyBuffer == rhs.sparseResidencyBuffer )
3802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D )
3803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidencyImage3D == rhs.sparseResidencyImage3D )
3804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidency2Samples == rhs.sparseResidency2Samples )
3805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidency4Samples == rhs.sparseResidency4Samples )
3806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidency8Samples == rhs.sparseResidency8Samples )
3807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidency16Samples == rhs.sparseResidency16Samples )
3808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseResidencyAliased == rhs.sparseResidencyAliased )
3809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( variableMultisampleRate == rhs.variableMultisampleRate )
3810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( inheritedQueries == rhs.inheritedQueries );
3811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PhysicalDeviceFeatures const& rhs ) const
3814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 robustBufferAccess;
3819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 fullDrawIndexUint32;
3820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 imageCubeArray;
3821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 independentBlend;
3822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 geometryShader;
3823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 tessellationShader;
3824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sampleRateShading;
3825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 dualSrcBlend;
3826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 logicOp;
3827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 multiDrawIndirect;
3828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 drawIndirectFirstInstance;
3829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthClamp;
3830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthBiasClamp;
3831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 fillModeNonSolid;
3832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthBounds;
3833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 wideLines;
3834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 largePoints;
3835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 alphaToOne;
3836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 multiViewport;
3837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 samplerAnisotropy;
3838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 textureCompressionETC2;
3839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 textureCompressionASTC_LDR;
3840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 textureCompressionBC;
3841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 occlusionQueryPrecise;
3842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 pipelineStatisticsQuery;
3843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 vertexPipelineStoresAndAtomics;
3844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 fragmentStoresAndAtomics;
3845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderTessellationAndGeometryPointSize;
3846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderImageGatherExtended;
3847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderStorageImageExtendedFormats;
3848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderStorageImageMultisample;
3849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderStorageImageReadWithoutFormat;
3850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderStorageImageWriteWithoutFormat;
3851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderUniformBufferArrayDynamicIndexing;
3852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderSampledImageArrayDynamicIndexing;
3853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderStorageBufferArrayDynamicIndexing;
3854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderStorageImageArrayDynamicIndexing;
3855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderClipDistance;
3856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderCullDistance;
3857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderFloat64;
3858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderInt64;
3859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderInt16;
3860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderResourceResidency;
3861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 shaderResourceMinLod;
3862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseBinding;
3863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidencyBuffer;
3864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidencyImage2D;
3865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidencyImage3D;
3866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidency2Samples;
3867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidency4Samples;
3868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidency8Samples;
3869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidency16Samples;
3870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sparseResidencyAliased;
3871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 variableMultisampleRate;
3872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 inheritedQueries;
3873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ), "struct and wrapper have different size!" );
3875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PhysicalDeviceSparseProperties
3877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPhysicalDeviceSparseProperties&() const
3879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPhysicalDeviceSparseProperties*>(this);
3881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PhysicalDeviceSparseProperties const& rhs ) const
3884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape )
3886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape )
3887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape )
3888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize )
3889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( residencyNonResidentStrict == rhs.residencyNonResidentStrict );
3890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PhysicalDeviceSparseProperties const& rhs ) const
3893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 residencyStandard2DBlockShape;
3898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 residencyStandard2DMultisampleBlockShape;
3899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 residencyStandard3DBlockShape;
3900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 residencyAlignedMipSize;
3901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 residencyNonResidentStrict;
3902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ), "struct and wrapper have different size!" );
3904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DrawIndirectCommand
3906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand( uint32_t vertexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstVertex_ = 0, uint32_t firstInstance_ = 0 )
3908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : vertexCount( vertexCount_ )
3909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , instanceCount( instanceCount_ )
3910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , firstVertex( firstVertex_ )
3911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , firstInstance( firstInstance_ )
3912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand( VkDrawIndirectCommand const & rhs )
3916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand& operator=( VkDrawIndirectCommand const & rhs )
3921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand& setVertexCount( uint32_t vertexCount_ )
3927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vertexCount = vertexCount_;
3929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
3933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      instanceCount = instanceCount_;
3935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand& setFirstVertex( uint32_t firstVertex_ )
3939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      firstVertex = firstVertex_;
3941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
3945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      firstInstance = firstInstance_;
3947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDrawIndirectCommand&() const
3951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDrawIndirectCommand*>(this);
3953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DrawIndirectCommand const& rhs ) const
3956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( vertexCount == rhs.vertexCount )
3958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( instanceCount == rhs.instanceCount )
3959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( firstVertex == rhs.firstVertex )
3960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( firstInstance == rhs.firstInstance );
3961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DrawIndirectCommand const& rhs ) const
3964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
3966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t vertexCount;
3969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t instanceCount;
3970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t firstVertex;
3971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t firstInstance;
3972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
3973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ), "struct and wrapper have different size!" );
3974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DrawIndexedIndirectCommand
3976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
3977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand( uint32_t indexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstIndex_ = 0, int32_t vertexOffset_ = 0, uint32_t firstInstance_ = 0 )
3978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : indexCount( indexCount_ )
3979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , instanceCount( instanceCount_ )
3980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , firstIndex( firstIndex_ )
3981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , vertexOffset( vertexOffset_ )
3982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , firstInstance( firstInstance_ )
3983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs )
3987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand& operator=( VkDrawIndexedIndirectCommand const & rhs )
3992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
3995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
3996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
3997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand& setIndexCount( uint32_t indexCount_ )
3998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
3999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      indexCount = indexCount_;
4000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
4004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      instanceCount = instanceCount_;
4006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand& setFirstIndex( uint32_t firstIndex_ )
4010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      firstIndex = firstIndex_;
4012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand& setVertexOffset( int32_t vertexOffset_ )
4016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vertexOffset = vertexOffset_;
4018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DrawIndexedIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
4022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      firstInstance = firstInstance_;
4024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDrawIndexedIndirectCommand&() const
4028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDrawIndexedIndirectCommand*>(this);
4030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DrawIndexedIndirectCommand const& rhs ) const
4033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( indexCount == rhs.indexCount )
4035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( instanceCount == rhs.instanceCount )
4036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( firstIndex == rhs.firstIndex )
4037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( vertexOffset == rhs.vertexOffset )
4038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( firstInstance == rhs.firstInstance );
4039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DrawIndexedIndirectCommand const& rhs ) const
4042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t indexCount;
4047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t instanceCount;
4048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t firstIndex;
4049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t vertexOffset;
4050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t firstInstance;
4051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ), "struct and wrapper have different size!" );
4053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DispatchIndirectCommand
4055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DispatchIndirectCommand( uint32_t x_ = 0, uint32_t y_ = 0, uint32_t z_ = 0 )
4057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : x( x_ )
4058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , y( y_ )
4059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , z( z_ )
4060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs )
4064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
4066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DispatchIndirectCommand& operator=( VkDispatchIndirectCommand const & rhs )
4069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
4071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DispatchIndirectCommand& setX( uint32_t x_ )
4075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      x = x_;
4077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DispatchIndirectCommand& setY( uint32_t y_ )
4081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      y = y_;
4083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DispatchIndirectCommand& setZ( uint32_t z_ )
4087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      z = z_;
4089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDispatchIndirectCommand&() const
4093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDispatchIndirectCommand*>(this);
4095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DispatchIndirectCommand const& rhs ) const
4098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( x == rhs.x )
4100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( y == rhs.y )
4101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( z == rhs.z );
4102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DispatchIndirectCommand const& rhs ) const
4105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t x;
4110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t y;
4111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t z;
4112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ), "struct and wrapper have different size!" );
4114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayPlanePropertiesKHR
4116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayPlanePropertiesKHR&() const
4118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayPlanePropertiesKHR*>(this);
4120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayPlanePropertiesKHR const& rhs ) const
4123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( currentDisplay == rhs.currentDisplay )
4125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( currentStackIndex == rhs.currentStackIndex );
4126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayPlanePropertiesKHR const& rhs ) const
4129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayKHR currentDisplay;
4134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t currentStackIndex;
4135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), "struct and wrapper have different size!" );
4137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayModeParametersKHR
4139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR( Extent2D visibleRegion_ = Extent2D(), uint32_t refreshRate_ = 0 )
4141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : visibleRegion( visibleRegion_ )
4142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , refreshRate( refreshRate_ )
4143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs )
4147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR& operator=( VkDisplayModeParametersKHR const & rhs )
4152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR& setVisibleRegion( Extent2D visibleRegion_ )
4158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      visibleRegion = visibleRegion_;
4160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR& setRefreshRate( uint32_t refreshRate_ )
4164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      refreshRate = refreshRate_;
4166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayModeParametersKHR&() const
4170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayModeParametersKHR*>(this);
4172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayModeParametersKHR const& rhs ) const
4175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( visibleRegion == rhs.visibleRegion )
4177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( refreshRate == rhs.refreshRate );
4178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayModeParametersKHR const& rhs ) const
4181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D visibleRegion;
4186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t refreshRate;
4187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), "struct and wrapper have different size!" );
4189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayModePropertiesKHR
4191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayModePropertiesKHR&() const
4193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayModePropertiesKHR*>(this);
4195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayModePropertiesKHR const& rhs ) const
4198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( displayMode == rhs.displayMode )
4200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( parameters == rhs.parameters );
4201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayModePropertiesKHR const& rhs ) const
4204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeKHR displayMode;
4209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR parameters;
4210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
4212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageLayout
4214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUndefined = VK_IMAGE_LAYOUT_UNDEFINED,
4216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGeneral = VK_IMAGE_LAYOUT_GENERAL,
4217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
4218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
4219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
4220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
4221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
4222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
4223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED,
4224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
4225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorImageInfo
4228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorImageInfo( Sampler sampler_ = Sampler(), ImageView imageView_ = ImageView(), ImageLayout imageLayout_ = ImageLayout::eUndefined )
4230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sampler( sampler_ )
4231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageView( imageView_ )
4232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageLayout( imageLayout_ )
4233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorImageInfo( VkDescriptorImageInfo const & rhs )
4237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorImageInfo& operator=( VkDescriptorImageInfo const & rhs )
4242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorImageInfo& setSampler( Sampler sampler_ )
4248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sampler = sampler_;
4250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorImageInfo& setImageView( ImageView imageView_ )
4254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageView = imageView_;
4256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorImageInfo& setImageLayout( ImageLayout imageLayout_ )
4260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageLayout = imageLayout_;
4262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorImageInfo&() const
4266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorImageInfo*>(this);
4268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorImageInfo const& rhs ) const
4271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sampler == rhs.sampler )
4273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageView == rhs.imageView )
4274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageLayout == rhs.imageLayout );
4275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorImageInfo const& rhs ) const
4278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Sampler sampler;
4283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageView imageView;
4284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout imageLayout;
4285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" );
4287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct AttachmentReference
4289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentReference( uint32_t attachment_ = 0, ImageLayout layout_ = ImageLayout::eUndefined )
4291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : attachment( attachment_ )
4292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layout( layout_ )
4293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentReference( VkAttachmentReference const & rhs )
4297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AttachmentReference) );
4299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentReference& operator=( VkAttachmentReference const & rhs )
4302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AttachmentReference) );
4304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentReference& setAttachment( uint32_t attachment_ )
4308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      attachment = attachment_;
4310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentReference& setLayout( ImageLayout layout_ )
4314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layout = layout_;
4316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkAttachmentReference&() const
4320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkAttachmentReference*>(this);
4322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( AttachmentReference const& rhs ) const
4325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( attachment == rhs.attachment )
4327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layout == rhs.layout );
4328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( AttachmentReference const& rhs ) const
4331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t attachment;
4336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout layout;
4337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" );
4339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class AttachmentLoadOp
4341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLoad = VK_ATTACHMENT_LOAD_OP_LOAD,
4343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClear = VK_ATTACHMENT_LOAD_OP_CLEAR,
4344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE
4345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class AttachmentStoreOp
4348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStore = VK_ATTACHMENT_STORE_OP_STORE,
4350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE
4351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageType
4354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e1D = VK_IMAGE_TYPE_1D,
4356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e2D = VK_IMAGE_TYPE_2D,
4357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e3D = VK_IMAGE_TYPE_3D
4358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageTiling
4361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOptimal = VK_IMAGE_TILING_OPTIMAL,
4363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLinear = VK_IMAGE_TILING_LINEAR
4364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageViewType
4367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e1D = VK_IMAGE_VIEW_TYPE_1D,
4369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e2D = VK_IMAGE_VIEW_TYPE_2D,
4370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e3D = VK_IMAGE_VIEW_TYPE_3D,
4371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCube = VK_IMAGE_VIEW_TYPE_CUBE,
4372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY,
4373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
4374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
4375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CommandBufferLevel
4378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
4380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY
4381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ComponentSwizzle
4384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY,
4386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eZero = VK_COMPONENT_SWIZZLE_ZERO,
4387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOne = VK_COMPONENT_SWIZZLE_ONE,
4388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR = VK_COMPONENT_SWIZZLE_R,
4389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eG = VK_COMPONENT_SWIZZLE_G,
4390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB = VK_COMPONENT_SWIZZLE_B,
4391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA = VK_COMPONENT_SWIZZLE_A
4392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ComponentMapping
4395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping( ComponentSwizzle r_ = ComponentSwizzle::eIdentity, ComponentSwizzle g_ = ComponentSwizzle::eIdentity, ComponentSwizzle b_ = ComponentSwizzle::eIdentity, ComponentSwizzle a_ = ComponentSwizzle::eIdentity )
4397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : r( r_ )
4398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , g( g_ )
4399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , b( b_ )
4400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , a( a_ )
4401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping( VkComponentMapping const & rhs )
4405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ComponentMapping) );
4407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping& operator=( VkComponentMapping const & rhs )
4410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ComponentMapping) );
4412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping& setR( ComponentSwizzle r_ )
4416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      r = r_;
4418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping& setG( ComponentSwizzle g_ )
4422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      g = g_;
4424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping& setB( ComponentSwizzle b_ )
4428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      b = b_;
4430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping& setA( ComponentSwizzle a_ )
4434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      a = a_;
4436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkComponentMapping&() const
4440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkComponentMapping*>(this);
4442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ComponentMapping const& rhs ) const
4445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( r == rhs.r )
4447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( g == rhs.g )
4448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( b == rhs.b )
4449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( a == rhs.a );
4450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ComponentMapping const& rhs ) const
4453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentSwizzle r;
4458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentSwizzle g;
4459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentSwizzle b;
4460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentSwizzle a;
4461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" );
4463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DescriptorType
4465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampler = VK_DESCRIPTOR_TYPE_SAMPLER,
4467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
4468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
4469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
4470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
4471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
4472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
4473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
4474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
4475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
4476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
4477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorPoolSize
4480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolSize( DescriptorType type_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0 )
4482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : type( type_ )
4483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorCount( descriptorCount_ )
4484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolSize( VkDescriptorPoolSize const & rhs )
4488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolSize& operator=( VkDescriptorPoolSize const & rhs )
4493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolSize& setType( DescriptorType type_ )
4499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      type = type_;
4501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolSize& setDescriptorCount( uint32_t descriptorCount_ )
4505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorCount = descriptorCount_;
4507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorPoolSize&() const
4511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorPoolSize*>(this);
4513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorPoolSize const& rhs ) const
4516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( type == rhs.type )
4518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorCount == rhs.descriptorCount );
4519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorPoolSize const& rhs ) const
4522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorType type;
4527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t descriptorCount;
4528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" );
4530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class QueryType
4532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOcclusion = VK_QUERY_TYPE_OCCLUSION,
4534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS,
4535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTimestamp = VK_QUERY_TYPE_TIMESTAMP
4536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class BorderColor
4539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
4541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK,
4542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
4543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
4544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
4545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE
4546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineBindPoint
4549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS,
4551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCompute = VK_PIPELINE_BIND_POINT_COMPUTE
4552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SubpassDescription
4555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
4557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : flags( flags_ )
4558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pipelineBindPoint( pipelineBindPoint_ )
4559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , inputAttachmentCount( inputAttachmentCount_ )
4560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pInputAttachments( pInputAttachments_ )
4561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , colorAttachmentCount( colorAttachmentCount_ )
4562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pColorAttachments( pColorAttachments_ )
4563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pResolveAttachments( pResolveAttachments_ )
4564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pDepthStencilAttachment( pDepthStencilAttachment_ )
4565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , preserveAttachmentCount( preserveAttachmentCount_ )
4566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pPreserveAttachments( pPreserveAttachments_ )
4567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription( VkSubpassDescription const & rhs )
4571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SubpassDescription) );
4573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& operator=( VkSubpassDescription const & rhs )
4576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SubpassDescription) );
4578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setFlags( SubpassDescriptionFlags flags_ )
4582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
4584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
4588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pipelineBindPoint = pipelineBindPoint_;
4590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setInputAttachmentCount( uint32_t inputAttachmentCount_ )
4594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      inputAttachmentCount = inputAttachmentCount_;
4596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPInputAttachments( const AttachmentReference* pInputAttachments_ )
4600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pInputAttachments = pInputAttachments_;
4602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setColorAttachmentCount( uint32_t colorAttachmentCount_ )
4606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      colorAttachmentCount = colorAttachmentCount_;
4608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPColorAttachments( const AttachmentReference* pColorAttachments_ )
4612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pColorAttachments = pColorAttachments_;
4614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPResolveAttachments( const AttachmentReference* pResolveAttachments_ )
4618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pResolveAttachments = pResolveAttachments_;
4620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPDepthStencilAttachment( const AttachmentReference* pDepthStencilAttachment_ )
4624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pDepthStencilAttachment = pDepthStencilAttachment_;
4626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ )
4630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      preserveAttachmentCount = preserveAttachmentCount_;
4632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescription& setPPreserveAttachments( const uint32_t* pPreserveAttachments_ )
4636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pPreserveAttachments = pPreserveAttachments_;
4638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSubpassDescription&() const
4642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSubpassDescription*>(this);
4644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SubpassDescription const& rhs ) const
4647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( flags == rhs.flags )
4649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pipelineBindPoint == rhs.pipelineBindPoint )
4650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( inputAttachmentCount == rhs.inputAttachmentCount )
4651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pInputAttachments == rhs.pInputAttachments )
4652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( colorAttachmentCount == rhs.colorAttachmentCount )
4653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pColorAttachments == rhs.pColorAttachments )
4654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pResolveAttachments == rhs.pResolveAttachments )
4655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment )
4656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( preserveAttachmentCount == rhs.preserveAttachmentCount )
4657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pPreserveAttachments == rhs.pPreserveAttachments );
4658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SubpassDescription const& rhs ) const
4661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDescriptionFlags flags;
4666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineBindPoint pipelineBindPoint;
4667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t inputAttachmentCount;
4668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const AttachmentReference* pInputAttachments;
4669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t colorAttachmentCount;
4670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const AttachmentReference* pColorAttachments;
4671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const AttachmentReference* pResolveAttachments;
4672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const AttachmentReference* pDepthStencilAttachment;
4673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t preserveAttachmentCount;
4674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const uint32_t* pPreserveAttachments;
4675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" );
4677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineCacheHeaderVersion
4679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE
4681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PrimitiveTopology
4684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
4686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
4687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
4688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
4689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
4690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
4691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
4692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
4693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
4694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
4695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
4696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SharingMode
4699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eExclusive = VK_SHARING_MODE_EXCLUSIVE,
4701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eConcurrent = VK_SHARING_MODE_CONCURRENT
4702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class IndexType
4705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUint16 = VK_INDEX_TYPE_UINT16,
4707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUint32 = VK_INDEX_TYPE_UINT32
4708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class Filter
4711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNearest = VK_FILTER_NEAREST,
4713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLinear = VK_FILTER_LINEAR,
4714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCubicIMG = VK_FILTER_CUBIC_IMG
4715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SamplerMipmapMode
4718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST,
4720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR
4721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SamplerAddressMode
4724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT,
4726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
4727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
4728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
4729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
4730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CompareOp
4733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNever = VK_COMPARE_OP_NEVER,
4735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLess = VK_COMPARE_OP_LESS,
4736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEqual = VK_COMPARE_OP_EQUAL,
4737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
4738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGreater = VK_COMPARE_OP_GREATER,
4739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNotEqual = VK_COMPARE_OP_NOT_EQUAL,
4740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
4741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAlways = VK_COMPARE_OP_ALWAYS
4742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PolygonMode
4745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFill = VK_POLYGON_MODE_FILL,
4747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLine = VK_POLYGON_MODE_LINE,
4748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePoint = VK_POLYGON_MODE_POINT
4749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CullModeFlagBits
4752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNone = VK_CULL_MODE_NONE,
4754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFront = VK_CULL_MODE_FRONT_BIT,
4755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBack = VK_CULL_MODE_BACK_BIT,
4756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK
4757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using CullModeFlags = Flags<CullModeFlagBits, VkCullModeFlags>;
4760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 )
4762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return CullModeFlags( bit0 ) | bit1;
4764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
4765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class FrontFace
4767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE,
4769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClockwise = VK_FRONT_FACE_CLOCKWISE
4770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class BlendFactor
4773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eZero = VK_BLEND_FACTOR_ZERO,
4775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOne = VK_BLEND_FACTOR_ONE,
4776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSrcColor = VK_BLEND_FACTOR_SRC_COLOR,
4777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
4778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDstColor = VK_BLEND_FACTOR_DST_COLOR,
4779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR,
4780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA,
4781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
4782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA,
4783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
4784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR,
4785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
4786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA,
4787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
4788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE,
4789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR,
4790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
4791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA,
4792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
4793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class BlendOp
4796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAdd = VK_BLEND_OP_ADD,
4798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSubtract = VK_BLEND_OP_SUBTRACT,
4799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT,
4800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMin = VK_BLEND_OP_MIN,
4801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMax = VK_BLEND_OP_MAX
4802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class StencilOp
4805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eKeep = VK_STENCIL_OP_KEEP,
4807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eZero = VK_STENCIL_OP_ZERO,
4808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eReplace = VK_STENCIL_OP_REPLACE,
4809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP,
4810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP,
4811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInvert = VK_STENCIL_OP_INVERT,
4812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP,
4813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP
4814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct StencilOpState
4817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
4819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : failOp( failOp_ )
4820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , passOp( passOp_ )
4821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthFailOp( depthFailOp_ )
4822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , compareOp( compareOp_ )
4823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , compareMask( compareMask_ )
4824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , writeMask( writeMask_ )
4825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , reference( reference_ )
4826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState( VkStencilOpState const & rhs )
4830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(StencilOpState) );
4832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& operator=( VkStencilOpState const & rhs )
4835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(StencilOpState) );
4837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setFailOp( StencilOp failOp_ )
4841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      failOp = failOp_;
4843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setPassOp( StencilOp passOp_ )
4847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      passOp = passOp_;
4849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setDepthFailOp( StencilOp depthFailOp_ )
4853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthFailOp = depthFailOp_;
4855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setCompareOp( CompareOp compareOp_ )
4859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      compareOp = compareOp_;
4861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setCompareMask( uint32_t compareMask_ )
4865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      compareMask = compareMask_;
4867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setWriteMask( uint32_t writeMask_ )
4871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      writeMask = writeMask_;
4873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState& setReference( uint32_t reference_ )
4877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      reference = reference_;
4879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkStencilOpState&() const
4883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkStencilOpState*>(this);
4885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( StencilOpState const& rhs ) const
4888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( failOp == rhs.failOp )
4890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( passOp == rhs.passOp )
4891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthFailOp == rhs.depthFailOp )
4892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( compareOp == rhs.compareOp )
4893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( compareMask == rhs.compareMask )
4894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( writeMask == rhs.writeMask )
4895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( reference == rhs.reference );
4896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( StencilOpState const& rhs ) const
4899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
4901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOp failOp;
4904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOp passOp;
4905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOp depthFailOp;
4906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CompareOp compareOp;
4907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t compareMask;
4908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t writeMask;
4909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t reference;
4910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
4912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class LogicOp
4914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClear = VK_LOGIC_OP_CLEAR,
4916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAnd = VK_LOGIC_OP_AND,
4917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAndReverse = VK_LOGIC_OP_AND_REVERSE,
4918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCopy = VK_LOGIC_OP_COPY,
4919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAndInverted = VK_LOGIC_OP_AND_INVERTED,
4920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNoOp = VK_LOGIC_OP_NO_OP,
4921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eXor = VK_LOGIC_OP_XOR,
4922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOr = VK_LOGIC_OP_OR,
4923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNor = VK_LOGIC_OP_NOR,
4924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEquivalent = VK_LOGIC_OP_EQUIVALENT,
4925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInvert = VK_LOGIC_OP_INVERT,
4926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOrReverse = VK_LOGIC_OP_OR_REVERSE,
4927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCopyInverted = VK_LOGIC_OP_COPY_INVERTED,
4928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOrInverted = VK_LOGIC_OP_OR_INVERTED,
4929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNand = VK_LOGIC_OP_NAND,
4930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSet = VK_LOGIC_OP_SET
4931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class InternalAllocationType
4934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
4936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SystemAllocationScope
4939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
4941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
4942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE,
4943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
4944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
4945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PhysicalDeviceType
4948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER,
4950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
4951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
4952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
4953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU
4954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class VertexInputRate
4957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertex = VK_VERTEX_INPUT_RATE_VERTEX,
4959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInstance = VK_VERTEX_INPUT_RATE_INSTANCE
4960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
4961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct VertexInputBindingDescription
4963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
4964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputBindingDescription( uint32_t binding_ = 0, uint32_t stride_ = 0, VertexInputRate inputRate_ = VertexInputRate::eVertex )
4965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : binding( binding_ )
4966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stride( stride_ )
4967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , inputRate( inputRate_ )
4968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs )
4972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
4974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputBindingDescription& operator=( VkVertexInputBindingDescription const & rhs )
4977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
4979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputBindingDescription& setBinding( uint32_t binding_ )
4983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      binding = binding_;
4985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputBindingDescription& setStride( uint32_t stride_ )
4989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stride = stride_;
4991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
4994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputBindingDescription& setInputRate( VertexInputRate inputRate_ )
4995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
4996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      inputRate = inputRate_;
4997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
4998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
4999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkVertexInputBindingDescription&() const
5001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkVertexInputBindingDescription*>(this);
5003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( VertexInputBindingDescription const& rhs ) const
5006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( binding == rhs.binding )
5008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stride == rhs.stride )
5009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( inputRate == rhs.inputRate );
5010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( VertexInputBindingDescription const& rhs ) const
5013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t binding;
5018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t stride;
5019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputRate inputRate;
5020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), "struct and wrapper have different size!" );
5022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class Format
5024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUndefined = VK_FORMAT_UNDEFINED,
5026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8,
5027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
5028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
5029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16,
5030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16,
5031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
5032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16,
5033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16,
5034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Unorm = VK_FORMAT_R8_UNORM,
5035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Snorm = VK_FORMAT_R8_SNORM,
5036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Uscaled = VK_FORMAT_R8_USCALED,
5037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Sscaled = VK_FORMAT_R8_SSCALED,
5038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Uint = VK_FORMAT_R8_UINT,
5039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Sint = VK_FORMAT_R8_SINT,
5040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8Srgb = VK_FORMAT_R8_SRGB,
5041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Unorm = VK_FORMAT_R8G8_UNORM,
5042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Snorm = VK_FORMAT_R8G8_SNORM,
5043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Uscaled = VK_FORMAT_R8G8_USCALED,
5044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED,
5045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Uint = VK_FORMAT_R8G8_UINT,
5046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Sint = VK_FORMAT_R8G8_SINT,
5047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8Srgb = VK_FORMAT_R8G8_SRGB,
5048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM,
5049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM,
5050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED,
5051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED,
5052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT,
5053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT,
5054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB,
5055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM,
5056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM,
5057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED,
5058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED,
5059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT,
5060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT,
5061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB,
5062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM,
5063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM,
5064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED,
5065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED,
5066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT,
5067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT,
5068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB,
5069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM,
5070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM,
5071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED,
5072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED,
5073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT,
5074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT,
5075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB,
5076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32,
5077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32,
5078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32,
5079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
5080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32,
5081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32,
5082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32,
5083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
5084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32,
5085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32,
5086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
5087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32,
5088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32,
5089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
5090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32,
5091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32,
5092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
5093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32,
5094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32,
5095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Unorm = VK_FORMAT_R16_UNORM,
5096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Snorm = VK_FORMAT_R16_SNORM,
5097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Uscaled = VK_FORMAT_R16_USCALED,
5098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Sscaled = VK_FORMAT_R16_SSCALED,
5099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Uint = VK_FORMAT_R16_UINT,
5100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Sint = VK_FORMAT_R16_SINT,
5101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16Sfloat = VK_FORMAT_R16_SFLOAT,
5102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Unorm = VK_FORMAT_R16G16_UNORM,
5103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Snorm = VK_FORMAT_R16G16_SNORM,
5104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Uscaled = VK_FORMAT_R16G16_USCALED,
5105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED,
5106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Uint = VK_FORMAT_R16G16_UINT,
5107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Sint = VK_FORMAT_R16G16_SINT,
5108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT,
5109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM,
5110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM,
5111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED,
5112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED,
5113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT,
5114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT,
5115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT,
5116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM,
5117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM,
5118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED,
5119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED,
5120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT,
5121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT,
5122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT,
5123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32Uint = VK_FORMAT_R32_UINT,
5124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32Sint = VK_FORMAT_R32_SINT,
5125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32Sfloat = VK_FORMAT_R32_SFLOAT,
5126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32Uint = VK_FORMAT_R32G32_UINT,
5127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32Sint = VK_FORMAT_R32G32_SINT,
5128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT,
5129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT,
5130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT,
5131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT,
5132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT,
5133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT,
5134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT,
5135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64Uint = VK_FORMAT_R64_UINT,
5136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64Sint = VK_FORMAT_R64_SINT,
5137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64Sfloat = VK_FORMAT_R64_SFLOAT,
5138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64Uint = VK_FORMAT_R64G64_UINT,
5139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64Sint = VK_FORMAT_R64G64_SINT,
5140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT,
5141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT,
5142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT,
5143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT,
5144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT,
5145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT,
5146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT,
5147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32,
5148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
5149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eD16Unorm = VK_FORMAT_D16_UNORM,
5150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32,
5151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eD32Sfloat = VK_FORMAT_D32_SFLOAT,
5152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eS8Uint = VK_FORMAT_S8_UINT,
5153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT,
5154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT,
5155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT,
5156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK,
5157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK,
5158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
5159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
5160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK,
5161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK,
5162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK,
5163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK,
5164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK,
5165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK,
5166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK,
5167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK,
5168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK,
5169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK,
5170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK,
5171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK,
5172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
5173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
5174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
5175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
5176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
5177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
5178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK,
5179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK,
5180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
5181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
5182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
5183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
5184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
5185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
5186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
5187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
5188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
5189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
5190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
5191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
5192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
5193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
5194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
5195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
5196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
5197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
5198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
5199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
5200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
5201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
5202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
5203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
5204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
5205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
5206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
5207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
5208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
5209af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
5210af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
5211af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
5212af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
5213af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
5214af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
5215af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
5216af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
5217af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
5218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct VertexInputAttributeDescription
5221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription( uint32_t location_ = 0, uint32_t binding_ = 0, Format format_ = Format::eUndefined, uint32_t offset_ = 0 )
5223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : location( location_ )
5224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , binding( binding_ )
5225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , format( format_ )
5226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
5227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs )
5231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription& operator=( VkVertexInputAttributeDescription const & rhs )
5236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription& setLocation( uint32_t location_ )
5242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      location = location_;
5244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription& setBinding( uint32_t binding_ )
5248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      binding = binding_;
5250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription& setFormat( Format format_ )
5254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      format = format_;
5256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VertexInputAttributeDescription& setOffset( uint32_t offset_ )
5260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
5262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkVertexInputAttributeDescription&() const
5266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkVertexInputAttributeDescription*>(this);
5268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( VertexInputAttributeDescription const& rhs ) const
5271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( location == rhs.location )
5273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( binding == rhs.binding )
5274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( format == rhs.format )
5275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset );
5276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( VertexInputAttributeDescription const& rhs ) const
5279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t location;
5284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t binding;
5285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format format;
5286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t offset;
5287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), "struct and wrapper have different size!" );
5289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class StructureType
5291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO,
5293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
5294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
5295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
5296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO,
5297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
5298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
5299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
5300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
5301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
5302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
5303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
5304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
5305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
5306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
5307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
5308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
5309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
5310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
5311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
5312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
5313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
5314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
5315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
5316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
5317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
5318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
5319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
5320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
5321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
5322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
5323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
5324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
5325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
5326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
5327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
5328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
5329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
5330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
5331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
5332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
5333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
5334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
5335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
5336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
5337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
5338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
5339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
5340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
5341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
5342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
5343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
5344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
5345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
5346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
5347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
5348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
5349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMirSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR,
5350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
5351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
5352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
5353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
5354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
5355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
5356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
5357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
5358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
5359af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
5360af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eExternalMemoryImageCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV,
5361af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eExportMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV,
5362af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eImportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV,
5363af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eExportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV,
53645b8df846785da667163755e11aa07599c02fd28dLenny Komow    eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV,
53655b8df846785da667163755e11aa07599c02fd28dLenny Komow    eValidationFlagsEXT = VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
5366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ApplicationInfo
5369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
5371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eApplicationInfo )
5372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pApplicationName( pApplicationName_ )
5374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , applicationVersion( applicationVersion_ )
5375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pEngineName( pEngineName_ )
5376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , engineVersion( engineVersion_ )
5377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , apiVersion( apiVersion_ )
5378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo( VkApplicationInfo const & rhs )
5382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ApplicationInfo) );
5384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& operator=( VkApplicationInfo const & rhs )
5387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ApplicationInfo) );
5389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setSType( StructureType sType_ )
5393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setPNext( const void* pNext_ )
5399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
5405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pApplicationName = pApplicationName_;
5407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
5411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      applicationVersion = applicationVersion_;
5413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setPEngineName( const char* pEngineName_ )
5417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pEngineName = pEngineName_;
5419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
5423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      engineVersion = engineVersion_;
5425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
5429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      apiVersion = apiVersion_;
5431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkApplicationInfo&() const
5435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkApplicationInfo*>(this);
5437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ApplicationInfo const& rhs ) const
5440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
5442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
5443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pApplicationName == rhs.pApplicationName )
5444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( applicationVersion == rhs.applicationVersion )
5445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pEngineName == rhs.pEngineName )
5446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( engineVersion == rhs.engineVersion )
5447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( apiVersion == rhs.apiVersion );
5448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ApplicationInfo const& rhs ) const
5451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
5456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
5457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
5459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
5460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* pApplicationName;
5461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t applicationVersion;
5462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* pEngineName;
5463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t engineVersion;
5464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t apiVersion;
5465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
5467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DeviceQueueCreateInfo
5469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
5471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDeviceQueueCreateInfo )
5472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
5474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueFamilyIndex( queueFamilyIndex_ )
5475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueCount( queueCount_ )
5476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pQueuePriorities( pQueuePriorities_ )
5477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
5481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
5486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& setSType( StructureType sType_ )
5492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& setPNext( const void* pNext_ )
5498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
5504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
5506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
5510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueFamilyIndex = queueFamilyIndex_;
5512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
5516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueCount = queueCount_;
5518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
5522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pQueuePriorities = pQueuePriorities_;
5524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDeviceQueueCreateInfo&() const
5528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
5530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DeviceQueueCreateInfo const& rhs ) const
5533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
5535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
5536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
5537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueFamilyIndex == rhs.queueFamilyIndex )
5538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueCount == rhs.queueCount )
5539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pQueuePriorities == rhs.pQueuePriorities );
5540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DeviceQueueCreateInfo const& rhs ) const
5543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
5548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
5549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
5551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
5552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceQueueCreateFlags flags;
5553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueFamilyIndex;
5554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueCount;
5555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const float* pQueuePriorities;
5556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
5558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DeviceCreateInfo
5560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
5562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDeviceCreateInfo )
5563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
5565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueCreateInfoCount( queueCreateInfoCount_ )
5566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pQueueCreateInfos( pQueueCreateInfos_ )
5567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , enabledLayerCount( enabledLayerCount_ )
5568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , ppEnabledLayerNames( ppEnabledLayerNames_ )
5569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , enabledExtensionCount( enabledExtensionCount_ )
5570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pEnabledFeatures( pEnabledFeatures_ )
5572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
5576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
5581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setSType( StructureType sType_ )
5587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setPNext( const void* pNext_ )
5593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
5599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
5601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
5605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueCreateInfoCount = queueCreateInfoCount_;
5607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
5611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pQueueCreateInfos = pQueueCreateInfos_;
5613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      enabledLayerCount = enabledLayerCount_;
5619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ppEnabledLayerNames = ppEnabledLayerNames_;
5625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      enabledExtensionCount = enabledExtensionCount_;
5631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ppEnabledExtensionNames = ppEnabledExtensionNames_;
5637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
5641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pEnabledFeatures = pEnabledFeatures_;
5643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDeviceCreateInfo&() const
5647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
5649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DeviceCreateInfo const& rhs ) const
5652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
5654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
5655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
5656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
5657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
5658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( enabledLayerCount == rhs.enabledLayerCount )
5659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( enabledExtensionCount == rhs.enabledExtensionCount )
5661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
5662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pEnabledFeatures == rhs.pEnabledFeatures );
5663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DeviceCreateInfo const& rhs ) const
5666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
5671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
5672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
5674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
5675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceCreateFlags flags;
5676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueCreateInfoCount;
5677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DeviceQueueCreateInfo* pQueueCreateInfos;
5678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t enabledLayerCount;
5679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* const* ppEnabledLayerNames;
5680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t enabledExtensionCount;
5681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* const* ppEnabledExtensionNames;
5682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PhysicalDeviceFeatures* pEnabledFeatures;
5683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
5685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct InstanceCreateInfo
5687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
5689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eInstanceCreateInfo )
5690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
5692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pApplicationInfo( pApplicationInfo_ )
5693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , enabledLayerCount( enabledLayerCount_ )
5694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , ppEnabledLayerNames( ppEnabledLayerNames_ )
5695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , enabledExtensionCount( enabledExtensionCount_ )
5696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
5701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
5706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setSType( StructureType sType_ )
5712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setPNext( const void* pNext_ )
5718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
5724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
5726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
5730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pApplicationInfo = pApplicationInfo_;
5732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      enabledLayerCount = enabledLayerCount_;
5738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ppEnabledLayerNames = ppEnabledLayerNames_;
5744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      enabledExtensionCount = enabledExtensionCount_;
5750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ppEnabledExtensionNames = ppEnabledExtensionNames_;
5756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkInstanceCreateInfo&() const
5760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
5762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( InstanceCreateInfo const& rhs ) const
5765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
5767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
5768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
5769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pApplicationInfo == rhs.pApplicationInfo )
5770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( enabledLayerCount == rhs.enabledLayerCount )
5771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( enabledExtensionCount == rhs.enabledExtensionCount )
5773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
5774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( InstanceCreateInfo const& rhs ) const
5777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
5782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
5783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
5785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
5786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    InstanceCreateFlags flags;
5787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const ApplicationInfo* pApplicationInfo;
5788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t enabledLayerCount;
5789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* const* ppEnabledLayerNames;
5790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t enabledExtensionCount;
5791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* const* ppEnabledExtensionNames;
5792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
5794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MemoryAllocateInfo
5796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
5798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eMemoryAllocateInfo )
5799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , allocationSize( allocationSize_ )
5801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , memoryTypeIndex( memoryTypeIndex_ )
5802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
5806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
5811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo& setSType( StructureType sType_ )
5817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo& setPNext( const void* pNext_ )
5823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
5829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      allocationSize = allocationSize_;
5831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
5835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memoryTypeIndex = memoryTypeIndex_;
5837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMemoryAllocateInfo&() const
5841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
5843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MemoryAllocateInfo const& rhs ) const
5846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
5848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
5849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( allocationSize == rhs.allocationSize )
5850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memoryTypeIndex == rhs.memoryTypeIndex );
5851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MemoryAllocateInfo const& rhs ) const
5854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
5859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
5860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
5862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
5863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize allocationSize;
5864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t memoryTypeIndex;
5865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
5867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MappedMemoryRange
5869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
5871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eMappedMemoryRange )
5872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , memory( memory_ )
5874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
5875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
5876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange( VkMappedMemoryRange const & rhs )
5880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
5885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange& setSType( StructureType sType_ )
5891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange& setPNext( const void* pNext_ )
5897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange& setMemory( DeviceMemory memory_ )
5903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memory = memory_;
5905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange& setOffset( DeviceSize offset_ )
5909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
5911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MappedMemoryRange& setSize( DeviceSize size_ )
5915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
5917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMappedMemoryRange&() const
5921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMappedMemoryRange*>(this);
5923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MappedMemoryRange const& rhs ) const
5926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
5928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
5929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memory == rhs.memory )
5930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
5931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size );
5932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MappedMemoryRange const& rhs ) const
5935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
5937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
5940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
5941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
5943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
5944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceMemory memory;
5945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize offset;
5946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
5947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
5948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
5949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct WriteDescriptorSet
5951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
5952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
5953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eWriteDescriptorSet )
5954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
5955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstSet( dstSet_ )
5956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstBinding( dstBinding_ )
5957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstArrayElement( dstArrayElement_ )
5958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorCount( descriptorCount_ )
5959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorType( descriptorType_ )
5960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pImageInfo( pImageInfo_ )
5961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pBufferInfo( pBufferInfo_ )
5962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pTexelBufferView( pTexelBufferView_ )
5963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
5967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
5969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
5972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
5974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setSType( StructureType sType_ )
5978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
5980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setPNext( const void* pNext_ )
5984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
5986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
5990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstSet = dstSet_;
5992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
5994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
5995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
5996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
5997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstBinding = dstBinding_;
5998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
5999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstArrayElement = dstArrayElement_;
6004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorCount = descriptorCount_;
6010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
6014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorType = descriptorType_;
6016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
6020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pImageInfo = pImageInfo_;
6022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
6026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pBufferInfo = pBufferInfo_;
6028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
6032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pTexelBufferView = pTexelBufferView_;
6034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkWriteDescriptorSet&() const
6038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
6040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( WriteDescriptorSet const& rhs ) const
6043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstSet == rhs.dstSet )
6047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstBinding == rhs.dstBinding )
6048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstArrayElement == rhs.dstArrayElement )
6049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorCount == rhs.descriptorCount )
6050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorType == rhs.descriptorType )
6051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pImageInfo == rhs.pImageInfo )
6052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pBufferInfo == rhs.pBufferInfo )
6053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pTexelBufferView == rhs.pTexelBufferView );
6054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( WriteDescriptorSet const& rhs ) const
6057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSet dstSet;
6067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstBinding;
6068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstArrayElement;
6069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t descriptorCount;
6070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorType descriptorType;
6071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DescriptorImageInfo* pImageInfo;
6072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DescriptorBufferInfo* pBufferInfo;
6073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const BufferView* pTexelBufferView;
6074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
6076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct CopyDescriptorSet
6078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
6080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eCopyDescriptorSet )
6081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcSet( srcSet_ )
6083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcBinding( srcBinding_ )
6084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcArrayElement( srcArrayElement_ )
6085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstSet( dstSet_ )
6086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstBinding( dstBinding_ )
6087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstArrayElement( dstArrayElement_ )
6088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorCount( descriptorCount_ )
6089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
6093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
6098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setSType( StructureType sType_ )
6104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setPNext( const void* pNext_ )
6110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
6116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcSet = srcSet_;
6118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
6122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcBinding = srcBinding_;
6124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
6128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcArrayElement = srcArrayElement_;
6130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstSet = dstSet_;
6136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstBinding = dstBinding_;
6142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstArrayElement = dstArrayElement_;
6148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorCount = descriptorCount_;
6154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkCopyDescriptorSet&() const
6158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
6160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( CopyDescriptorSet const& rhs ) const
6163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcSet == rhs.srcSet )
6167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcBinding == rhs.srcBinding )
6168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcArrayElement == rhs.srcArrayElement )
6169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstSet == rhs.dstSet )
6170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstBinding == rhs.dstBinding )
6171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstArrayElement == rhs.dstArrayElement )
6172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorCount == rhs.descriptorCount );
6173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( CopyDescriptorSet const& rhs ) const
6176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSet srcSet;
6186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t srcBinding;
6187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t srcArrayElement;
6188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSet dstSet;
6189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstBinding;
6190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstArrayElement;
6191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t descriptorCount;
6192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
6194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct BufferViewCreateInfo
6196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
6198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eBufferViewCreateInfo )
6199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , buffer( buffer_ )
6202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , format( format_ )
6203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
6204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , range( range_ )
6205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
6209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
6214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setSType( StructureType sType_ )
6220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setPNext( const void* pNext_ )
6226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
6232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setBuffer( Buffer buffer_ )
6238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      buffer = buffer_;
6240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setFormat( Format format_ )
6244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      format = format_;
6246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setOffset( DeviceSize offset_ )
6250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
6252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateInfo& setRange( DeviceSize range_ )
6256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      range = range_;
6258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkBufferViewCreateInfo&() const
6262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
6264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( BufferViewCreateInfo const& rhs ) const
6267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( buffer == rhs.buffer )
6272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( format == rhs.format )
6273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
6274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( range == rhs.range );
6275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( BufferViewCreateInfo const& rhs ) const
6278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferViewCreateFlags flags;
6288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer buffer;
6289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format format;
6290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize offset;
6291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize range;
6292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
6294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ShaderModuleCreateInfo
6296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
6298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eShaderModuleCreateInfo )
6299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , codeSize( codeSize_ )
6302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pCode( pCode_ )
6303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
6307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
6312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo& setSType( StructureType sType_ )
6318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo& setPNext( const void* pNext_ )
6324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
6330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
6336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      codeSize = codeSize_;
6338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
6342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pCode = pCode_;
6344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkShaderModuleCreateInfo&() const
6348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
6350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ShaderModuleCreateInfo const& rhs ) const
6353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( codeSize == rhs.codeSize )
6358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pCode == rhs.pCode );
6359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ShaderModuleCreateInfo const& rhs ) const
6362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModuleCreateFlags flags;
6372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    size_t codeSize;
6373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const uint32_t* pCode;
6374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
6376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorSetAllocateInfo
6378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
6380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDescriptorSetAllocateInfo )
6381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorPool( descriptorPool_ )
6383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorSetCount( descriptorSetCount_ )
6384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSetLayouts( pSetLayouts_ )
6385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
6389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
6394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo& setSType( StructureType sType_ )
6400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
6406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
6412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorPool = descriptorPool_;
6414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
6418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorSetCount = descriptorSetCount_;
6420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
6424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSetLayouts = pSetLayouts_;
6426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorSetAllocateInfo&() const
6430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
6432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorSetAllocateInfo const& rhs ) const
6435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorPool == rhs.descriptorPool )
6439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorSetCount == rhs.descriptorSetCount )
6440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSetLayouts == rhs.pSetLayouts );
6441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
6444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPool descriptorPool;
6454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t descriptorSetCount;
6455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DescriptorSetLayout* pSetLayouts;
6456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
6458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineVertexInputStateCreateInfo
6460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
6462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineVertexInputStateCreateInfo )
6463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
6466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
6467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
6468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
6469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
6473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
6478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setSType( StructureType sType_ )
6484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
6490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
6496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
6502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
6504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
6508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pVertexBindingDescriptions = pVertexBindingDescriptions_;
6510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
6514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
6516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
6520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
6522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineVertexInputStateCreateInfo&() const
6526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
6528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
6531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
6536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
6537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
6538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
6539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
6542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineVertexInputStateCreateFlags flags;
6552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t vertexBindingDescriptionCount;
6553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const VertexInputBindingDescription* pVertexBindingDescriptions;
6554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t vertexAttributeDescriptionCount;
6555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const VertexInputAttributeDescription* pVertexAttributeDescriptions;
6556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
6558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineInputAssemblyStateCreateInfo
6560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
6562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineInputAssemblyStateCreateInfo )
6563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , topology( topology_ )
6566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , primitiveRestartEnable( primitiveRestartEnable_ )
6567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo& setSType( StructureType sType_ )
6582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
6588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
6594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
6600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      topology = topology_;
6602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
6606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      primitiveRestartEnable = primitiveRestartEnable_;
6608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineInputAssemblyStateCreateInfo&() const
6612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
6614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( topology == rhs.topology )
6622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
6623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineInputAssemblyStateCreateFlags flags;
6636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PrimitiveTopology topology;
6637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 primitiveRestartEnable;
6638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
6640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineTessellationStateCreateInfo
6642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
6644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineTessellationStateCreateInfo )
6645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , patchControlPoints( patchControlPoints_ )
6648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
6652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
6657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo& setSType( StructureType sType_ )
6663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
6669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
6675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
6681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      patchControlPoints = patchControlPoints_;
6683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineTessellationStateCreateInfo&() const
6687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
6689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
6692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( patchControlPoints == rhs.patchControlPoints );
6697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
6700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineTessellationStateCreateFlags flags;
6710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t patchControlPoints;
6711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
6713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineViewportStateCreateInfo
6715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
6717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineViewportStateCreateInfo )
6718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , viewportCount( viewportCount_ )
6721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pViewports( pViewports_ )
6722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , scissorCount( scissorCount_ )
6723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pScissors( pScissors_ )
6724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
6728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
6733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setSType( StructureType sType_ )
6739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
6745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
6751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
6757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      viewportCount = viewportCount_;
6759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
6763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pViewports = pViewports_;
6765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
6769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      scissorCount = scissorCount_;
6771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
6775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pScissors = pScissors_;
6777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineViewportStateCreateInfo&() const
6781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
6783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
6786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( viewportCount == rhs.viewportCount )
6791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pViewports == rhs.pViewports )
6792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( scissorCount == rhs.scissorCount )
6793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pScissors == rhs.pScissors );
6794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
6797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineViewportStateCreateFlags flags;
6807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t viewportCount;
6808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Viewport* pViewports;
6809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t scissorCount;
6810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Rect2D* pScissors;
6811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
6813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineRasterizationStateCreateInfo
6815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
6817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineRasterizationStateCreateInfo )
6818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthClampEnable( depthClampEnable_ )
6821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
6822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , polygonMode( polygonMode_ )
6823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , cullMode( cullMode_ )
6824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , frontFace( frontFace_ )
6825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBiasEnable( depthBiasEnable_ )
6826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBiasConstantFactor( depthBiasConstantFactor_ )
6827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBiasClamp( depthBiasClamp_ )
6828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
6829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , lineWidth( lineWidth_ )
6830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
6834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
6839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setSType( StructureType sType_ )
6845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
6847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
6851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
6853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
6857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
6859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
6863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthClampEnable = depthClampEnable_;
6865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
6869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      rasterizerDiscardEnable = rasterizerDiscardEnable_;
6871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
6875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      polygonMode = polygonMode_;
6877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
6881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      cullMode = cullMode_;
6883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
6887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      frontFace = frontFace_;
6889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
6893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBiasEnable = depthBiasEnable_;
6895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
6899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBiasConstantFactor = depthBiasConstantFactor_;
6901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
6905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBiasClamp = depthBiasClamp_;
6907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
6911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBiasSlopeFactor = depthBiasSlopeFactor_;
6913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
6917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      lineWidth = lineWidth_;
6919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineRasterizationStateCreateInfo&() const
6923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
6925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
6928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
6930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
6931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
6932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthClampEnable == rhs.depthClampEnable )
6933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
6934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( polygonMode == rhs.polygonMode )
6935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( cullMode == rhs.cullMode )
6936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( frontFace == rhs.frontFace )
6937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBiasEnable == rhs.depthBiasEnable )
6938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
6939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBiasClamp == rhs.depthBiasClamp )
6940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
6941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( lineWidth == rhs.lineWidth );
6942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
6945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
6947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
6950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
6951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
6953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
6954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineRasterizationStateCreateFlags flags;
6955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthClampEnable;
6956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 rasterizerDiscardEnable;
6957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PolygonMode polygonMode;
6958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CullModeFlags cullMode;
6959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FrontFace frontFace;
6960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthBiasEnable;
6961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float depthBiasConstantFactor;
6962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float depthBiasClamp;
6963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float depthBiasSlopeFactor;
6964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float lineWidth;
6965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
6966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
6967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineDepthStencilStateCreateInfo
6969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
6970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
6971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineDepthStencilStateCreateInfo )
6972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
6973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
6974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthTestEnable( depthTestEnable_ )
6975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthWriteEnable( depthWriteEnable_ )
6976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthCompareOp( depthCompareOp_ )
6977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , depthBoundsTestEnable( depthBoundsTestEnable_ )
6978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stencilTestEnable( stencilTestEnable_ )
6979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , front( front_ )
6980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , back( back_ )
6981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , minDepthBounds( minDepthBounds_ )
6982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , maxDepthBounds( maxDepthBounds_ )
6983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
6987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
6989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
6992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
6994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
6995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
6996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
6997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setSType( StructureType sType_ )
6998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
6999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
7004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
7010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
7016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthTestEnable = depthTestEnable_;
7018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
7022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthWriteEnable = depthWriteEnable_;
7024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
7028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthCompareOp = depthCompareOp_;
7030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
7034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      depthBoundsTestEnable = depthBoundsTestEnable_;
7036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
7040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stencilTestEnable = stencilTestEnable_;
7042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
7046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      front = front_;
7048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
7052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      back = back_;
7054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
7058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      minDepthBounds = minDepthBounds_;
7060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
7064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      maxDepthBounds = maxDepthBounds_;
7066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineDepthStencilStateCreateInfo&() const
7070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
7072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
7075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
7079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthTestEnable == rhs.depthTestEnable )
7080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthWriteEnable == rhs.depthWriteEnable )
7081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthCompareOp == rhs.depthCompareOp )
7082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
7083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stencilTestEnable == rhs.stencilTestEnable )
7084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( front == rhs.front )
7085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( back == rhs.back )
7086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minDepthBounds == rhs.minDepthBounds )
7087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDepthBounds == rhs.maxDepthBounds );
7088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
7091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDepthStencilStateCreateFlags flags;
7101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthTestEnable;
7102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthWriteEnable;
7103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CompareOp depthCompareOp;
7104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 depthBoundsTestEnable;
7105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 stencilTestEnable;
7106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState front;
7107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StencilOpState back;
7108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float minDepthBounds;
7109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxDepthBounds;
7110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
7112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineCacheCreateInfo
7114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
7116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineCacheCreateInfo )
7117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , initialDataSize( initialDataSize_ )
7120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pInitialData( pInitialData_ )
7121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
7125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
7130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo& setSType( StructureType sType_ )
7136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo& setPNext( const void* pNext_ )
7142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
7148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
7154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      initialDataSize = initialDataSize_;
7156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
7160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pInitialData = pInitialData_;
7162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineCacheCreateInfo&() const
7166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
7168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineCacheCreateInfo const& rhs ) const
7171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
7175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( initialDataSize == rhs.initialDataSize )
7176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pInitialData == rhs.pInitialData );
7177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineCacheCreateInfo const& rhs ) const
7180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCacheCreateFlags flags;
7190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    size_t initialDataSize;
7191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pInitialData;
7192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
7194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SamplerCreateInfo
7196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
7198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eSamplerCreateInfo )
7199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , magFilter( magFilter_ )
7202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , minFilter( minFilter_ )
7203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , mipmapMode( mipmapMode_ )
7204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , addressModeU( addressModeU_ )
7205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , addressModeV( addressModeV_ )
7206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , addressModeW( addressModeW_ )
7207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , mipLodBias( mipLodBias_ )
7208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , anisotropyEnable( anisotropyEnable_ )
7209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , maxAnisotropy( maxAnisotropy_ )
7210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , compareEnable( compareEnable_ )
7211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , compareOp( compareOp_ )
7212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , minLod( minLod_ )
7213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , maxLod( maxLod_ )
7214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , borderColor( borderColor_ )
7215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , unnormalizedCoordinates( unnormalizedCoordinates_ )
7216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
7220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
7225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setSType( StructureType sType_ )
7231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setPNext( const void* pNext_ )
7237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
7243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMagFilter( Filter magFilter_ )
7249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      magFilter = magFilter_;
7251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMinFilter( Filter minFilter_ )
7255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      minFilter = minFilter_;
7257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
7261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mipmapMode = mipmapMode_;
7263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
7267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      addressModeU = addressModeU_;
7269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
7273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      addressModeV = addressModeV_;
7275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
7279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      addressModeW = addressModeW_;
7281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
7285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mipLodBias = mipLodBias_;
7287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
7291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      anisotropyEnable = anisotropyEnable_;
7293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
7297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      maxAnisotropy = maxAnisotropy_;
7299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
7303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      compareEnable = compareEnable_;
7305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
7309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      compareOp = compareOp_;
7311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMinLod( float minLod_ )
7315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      minLod = minLod_;
7317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setMaxLod( float maxLod_ )
7321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      maxLod = maxLod_;
7323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
7327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      borderColor = borderColor_;
7329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
7333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      unnormalizedCoordinates = unnormalizedCoordinates_;
7335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSamplerCreateInfo&() const
7339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
7341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SamplerCreateInfo const& rhs ) const
7344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
7348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( magFilter == rhs.magFilter )
7349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minFilter == rhs.minFilter )
7350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mipmapMode == rhs.mipmapMode )
7351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( addressModeU == rhs.addressModeU )
7352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( addressModeV == rhs.addressModeV )
7353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( addressModeW == rhs.addressModeW )
7354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mipLodBias == rhs.mipLodBias )
7355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( anisotropyEnable == rhs.anisotropyEnable )
7356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxAnisotropy == rhs.maxAnisotropy )
7357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( compareEnable == rhs.compareEnable )
7358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( compareOp == rhs.compareOp )
7359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minLod == rhs.minLod )
7360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxLod == rhs.maxLod )
7361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( borderColor == rhs.borderColor )
7362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
7363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SamplerCreateInfo const& rhs ) const
7366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerCreateFlags flags;
7376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Filter magFilter;
7377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Filter minFilter;
7378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerMipmapMode mipmapMode;
7379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerAddressMode addressModeU;
7380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerAddressMode addressModeV;
7381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SamplerAddressMode addressModeW;
7382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float mipLodBias;
7383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 anisotropyEnable;
7384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxAnisotropy;
7385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 compareEnable;
7386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CompareOp compareOp;
7387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float minLod;
7388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxLod;
7389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BorderColor borderColor;
7390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 unnormalizedCoordinates;
7391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
7393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct CommandBufferAllocateInfo
7395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
7397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eCommandBufferAllocateInfo )
7398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , commandPool( commandPool_ )
7400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , level( level_ )
7401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , commandBufferCount( commandBufferCount_ )
7402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
7406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
7411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo& setSType( StructureType sType_ )
7417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo& setPNext( const void* pNext_ )
7423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
7429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      commandPool = commandPool_;
7431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
7435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      level = level_;
7437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
7441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      commandBufferCount = commandBufferCount_;
7443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkCommandBufferAllocateInfo&() const
7447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
7449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( CommandBufferAllocateInfo const& rhs ) const
7452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( commandPool == rhs.commandPool )
7456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( level == rhs.level )
7457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( commandBufferCount == rhs.commandBufferCount );
7458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( CommandBufferAllocateInfo const& rhs ) const
7461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPool commandPool;
7471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferLevel level;
7472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t commandBufferCount;
7473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
7475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct RenderPassBeginInfo
7477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
7479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eRenderPassBeginInfo )
7480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , renderPass( renderPass_ )
7482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , framebuffer( framebuffer_ )
7483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , renderArea( renderArea_ )
7484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , clearValueCount( clearValueCount_ )
7485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pClearValues( pClearValues_ )
7486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
7490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
7495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setSType( StructureType sType_ )
7501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setPNext( const void* pNext_ )
7507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
7513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      renderPass = renderPass_;
7515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
7519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      framebuffer = framebuffer_;
7521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
7525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      renderArea = renderArea_;
7527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
7531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      clearValueCount = clearValueCount_;
7533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
7537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pClearValues = pClearValues_;
7539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkRenderPassBeginInfo&() const
7543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
7545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( RenderPassBeginInfo const& rhs ) const
7548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( renderPass == rhs.renderPass )
7552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( framebuffer == rhs.framebuffer )
7553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( renderArea == rhs.renderArea )
7554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( clearValueCount == rhs.clearValueCount )
7555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pClearValues == rhs.pClearValues );
7556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( RenderPassBeginInfo const& rhs ) const
7559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass renderPass;
7569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Framebuffer framebuffer;
7570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D renderArea;
7571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t clearValueCount;
7572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const ClearValue* pClearValues;
7573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
7575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct EventCreateInfo
7577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
7579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eEventCreateInfo )
7580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateInfo( VkEventCreateInfo const & rhs )
7586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(EventCreateInfo) );
7588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
7591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(EventCreateInfo) );
7593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateInfo& setSType( StructureType sType_ )
7597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateInfo& setPNext( const void* pNext_ )
7603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateInfo& setFlags( EventCreateFlags flags_ )
7609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkEventCreateInfo&() const
7615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkEventCreateInfo*>(this);
7617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( EventCreateInfo const& rhs ) const
7620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
7624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( EventCreateInfo const& rhs ) const
7627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    EventCreateFlags flags;
7637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
7639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SemaphoreCreateInfo
7641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
7643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eSemaphoreCreateInfo )
7644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
7650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
7655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateInfo& setSType( StructureType sType_ )
7661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateInfo& setPNext( const void* pNext_ )
7667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
7673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSemaphoreCreateInfo&() const
7679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
7681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SemaphoreCreateInfo const& rhs ) const
7684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
7688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SemaphoreCreateInfo const& rhs ) const
7691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SemaphoreCreateFlags flags;
7701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
7703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct FramebufferCreateInfo
7705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
7707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eFramebufferCreateInfo )
7708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , renderPass( renderPass_ )
7711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , attachmentCount( attachmentCount_ )
7712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pAttachments( pAttachments_ )
7713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , width( width_ )
7714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , height( height_ )
7715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layers( layers_ )
7716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
7720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
7725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setSType( StructureType sType_ )
7731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setPNext( const void* pNext_ )
7737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
7743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
7749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      renderPass = renderPass_;
7751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
7755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      attachmentCount = attachmentCount_;
7757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
7761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pAttachments = pAttachments_;
7763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setWidth( uint32_t width_ )
7767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      width = width_;
7769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setHeight( uint32_t height_ )
7773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      height = height_;
7775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateInfo& setLayers( uint32_t layers_ )
7779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layers = layers_;
7781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkFramebufferCreateInfo&() const
7785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
7787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( FramebufferCreateInfo const& rhs ) const
7790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
7794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( renderPass == rhs.renderPass )
7795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( attachmentCount == rhs.attachmentCount )
7796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pAttachments == rhs.pAttachments )
7797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( width == rhs.width )
7798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( height == rhs.height )
7799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layers == rhs.layers );
7800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( FramebufferCreateInfo const& rhs ) const
7803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FramebufferCreateFlags flags;
7813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass renderPass;
7814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t attachmentCount;
7815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const ImageView* pAttachments;
7816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t width;
7817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t height;
7818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t layers;
7819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
7821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayModeCreateInfoKHR
7823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
7825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDisplayModeCreateInfoKHR )
7826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , parameters( parameters_ )
7829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
7833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
7838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR& setSType( StructureType sType_ )
7844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
7850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
7856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
7858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
7862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      parameters = parameters_;
7864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayModeCreateInfoKHR&() const
7868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
7870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
7873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
7877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( parameters == rhs.parameters );
7878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
7881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeCreateFlagsKHR flags;
7891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeParametersKHR parameters;
7892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
7894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayPresentInfoKHR
7896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
7898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDisplayPresentInfoKHR )
7899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcRect( srcRect_ )
7901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstRect( dstRect_ )
7902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , persistent( persistent_ )
7903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
7907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
7912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR& setSType( StructureType sType_ )
7918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
7920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR& setPNext( const void* pNext_ )
7924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
7926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
7930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcRect = srcRect_;
7932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
7936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstRect = dstRect_;
7938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
7942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      persistent = persistent_;
7944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayPresentInfoKHR&() const
7948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
7950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayPresentInfoKHR const& rhs ) const
7953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
7955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
7956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcRect == rhs.srcRect )
7957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstRect == rhs.dstRect )
7958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( persistent == rhs.persistent );
7959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayPresentInfoKHR const& rhs ) const
7962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
7964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
7967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
7968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
7970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
7971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D srcRect;
7972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Rect2D dstRect;
7973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 persistent;
7974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
7975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
7976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
7978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct AndroidSurfaceCreateInfoKHR
7979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
7980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
7981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eAndroidSurfaceCreateInfoKHR )
7982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
7983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
7984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , window( window_ )
7985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
7989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
7991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
7994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
7995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
7996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
7997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
7998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
7999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
8012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
8014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
8018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      window = window_;
8020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkAndroidSurfaceCreateInfoKHR&() const
8024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
8026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
8029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
8033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( window == rhs.window );
8034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
8037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AndroidSurfaceCreateFlagsKHR flags;
8047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ANativeWindow* window;
8048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
8051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
8053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MirSurfaceCreateInfoKHR
8054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
8056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eMirSurfaceCreateInfoKHR )
8057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
8059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , connection( connection_ )
8060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , mirSurface( mirSurface_ )
8061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
8065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
8070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
8088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
8090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
8094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      connection = connection_;
8096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
8100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mirSurface = mirSurface_;
8102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMirSurfaceCreateInfoKHR&() const
8106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
8108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
8111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
8115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( connection == rhs.connection )
8116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mirSurface == rhs.mirSurface );
8117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
8120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurfaceCreateFlagsKHR flags;
8130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirConnection* connection;
8131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MirSurface* mirSurface;
8132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
8135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
8137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct WaylandSurfaceCreateInfoKHR
8138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
8140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eWaylandSurfaceCreateInfoKHR )
8141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
8143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , display( display_ )
8144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , surface( surface_ )
8145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
8149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
8154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
8172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
8174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
8178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      display = display_;
8180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
8184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      surface = surface_;
8186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkWaylandSurfaceCreateInfoKHR&() const
8190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
8192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
8195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
8199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( display == rhs.display )
8200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( surface == rhs.surface );
8201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
8204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    WaylandSurfaceCreateFlagsKHR flags;
8214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    struct wl_display* display;
8215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    struct wl_surface* surface;
8216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
8219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
8221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct Win32SurfaceCreateInfoKHR
8222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
8224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eWin32SurfaceCreateInfoKHR )
8225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
8227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , hinstance( hinstance_ )
8228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , hwnd( hwnd_ )
8229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
8233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
8238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR& setSType( StructureType sType_ )
8244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
8256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
8258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
8262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      hinstance = hinstance_;
8264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
8268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      hwnd = hwnd_;
8270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkWin32SurfaceCreateInfoKHR&() const
8274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
8276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
8279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
8283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( hinstance == rhs.hinstance )
8284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( hwnd == rhs.hwnd );
8285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
8288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Win32SurfaceCreateFlagsKHR flags;
8298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    HINSTANCE hinstance;
8299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    HWND hwnd;
8300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
8305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct XlibSurfaceCreateInfoKHR
8306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
8308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eXlibSurfaceCreateInfoKHR )
8309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
8311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dpy( dpy_ )
8312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , window( window_ )
8313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
8317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
8322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
8340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
8342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
8346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dpy = dpy_;
8348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
8352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      window = window_;
8354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkXlibSurfaceCreateInfoKHR&() const
8358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
8360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
8363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
8367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dpy == rhs.dpy )
8368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( window == rhs.window );
8369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
8372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XlibSurfaceCreateFlagsKHR flags;
8382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Display* dpy;
8383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Window window;
8384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
8387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
8389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct XcbSurfaceCreateInfoKHR
8390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
8392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eXcbSurfaceCreateInfoKHR )
8393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
8395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , connection( connection_ )
8396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , window( window_ )
8397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
8401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
8406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
8424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
8426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
8430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      connection = connection_;
8432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
8436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      window = window_;
8438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkXcbSurfaceCreateInfoKHR&() const
8442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
8444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
8447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
8451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( connection == rhs.connection )
8452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( window == rhs.window );
8453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
8456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    XcbSurfaceCreateFlagsKHR flags;
8466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    xcb_connection_t* connection;
8467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    xcb_window_t window;
8468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
8471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DebugMarkerMarkerInfoEXT
8473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
8475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDebugMarkerMarkerInfoEXT )
8476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pMarkerName( pMarkerName_ )
8478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &color, color_.data(), 4 * sizeof( float ) );
8480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
8483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
8488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT& setSType( StructureType sType_ )
8494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
8500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
8506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pMarkerName = pMarkerName_;
8508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
8512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &color, color_.data(), 4 * sizeof( float ) );
8514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDebugMarkerMarkerInfoEXT&() const
8518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
8520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
8523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pMarkerName == rhs.pMarkerName )
8527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
8528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
8531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* pMarkerName;
8541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float color[4];
8542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
8544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DedicatedAllocationImageCreateInfoNV
8546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDedicatedAllocationImageCreateInfoNV )
8549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dedicatedAllocation( dedicatedAllocation_ )
8551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationImageCreateInfoNV& setSType( StructureType sType_ )
8566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
8572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dedicatedAllocation = dedicatedAllocation_;
8580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDedicatedAllocationImageCreateInfoNV&() const
8584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
8586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dedicatedAllocation == rhs.dedicatedAllocation );
8593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 dedicatedAllocation;
8606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
8608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DedicatedAllocationBufferCreateInfoNV
8610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDedicatedAllocationBufferCreateInfoNV )
8613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dedicatedAllocation( dedicatedAllocation_ )
8615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationBufferCreateInfoNV& setSType( StructureType sType_ )
8630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
8636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dedicatedAllocation = dedicatedAllocation_;
8644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDedicatedAllocationBufferCreateInfoNV&() const
8648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
8650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dedicatedAllocation == rhs.dedicatedAllocation );
8657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 dedicatedAllocation;
8670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
8672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DedicatedAllocationMemoryAllocateInfoNV
8674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
8676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDedicatedAllocationMemoryAllocateInfoNV )
8677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , image( image_ )
8679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , buffer( buffer_ )
8680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV& setSType( StructureType sType_ )
8695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
8701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
8707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      image = image_;
8709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
8713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      buffer = buffer_;
8715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
8719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
8721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
8726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
8727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( image == rhs.image )
8728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( buffer == rhs.buffer );
8729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
8734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
8737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
8738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
8740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
8741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image image;
8742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer buffer;
8743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
8744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
8745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8746af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifdef VK_USE_PLATFORM_WIN32_KHR
8747af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct ExportMemoryWin32HandleInfoNV
8748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
8749af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0 )
8750af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::eExportMemoryWin32HandleInfoNV )
8751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
8752af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pAttributes( pAttributes_ )
8753af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , dwAccess( dwAccess_ )
8754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8757af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs )
8758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8759af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8762af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV& operator=( VkExportMemoryWin32HandleInfoNV const & rhs )
8763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8764af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8768af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
8769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
8771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8774af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
8775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
8777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8780af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
8781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8782af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pAttributes = pAttributes_;
8783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8786af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryWin32HandleInfoNV& setDwAccess( DWORD dwAccess_ )
8787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8788af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      dwAccess = dwAccess_;
8789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
8790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8792af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkExportMemoryWin32HandleInfoNV&() const
8793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8794af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(this);
8795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
8796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
8797af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( ExportMemoryWin32HandleInfoNV const& rhs ) const
8798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
8799af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( sType == rhs.sType )
8800af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pNext == rhs.pNext )
8801af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pAttributes == rhs.pAttributes )
8802af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( dwAccess == rhs.dwAccess );
8803af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8804af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8805af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( ExportMemoryWin32HandleInfoNV const& rhs ) const
8806af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8807af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
8808af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8809af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8810af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  private:
8811af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    StructureType sType;
8812af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8813af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  public:
8814af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const void* pNext;
8815af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const SECURITY_ATTRIBUTES* pAttributes;
8816af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    DWORD dwAccess;
8817af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
8818af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
8819af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8820af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8821af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifdef VK_USE_PLATFORM_WIN32_KHR
8822af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct Win32KeyedMutexAcquireReleaseInfoNV
8823af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
8824af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    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 )
8825af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::eWin32KeyedMutexAcquireReleaseInfoNV )
8826af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pNext( nullptr )
8827af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , acquireCount( acquireCount_ )
8828af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pAcquireSyncs( pAcquireSyncs_ )
8829af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pAcquireKeys( pAcquireKeys_ )
8830af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ )
8831af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , releaseCount( releaseCount_ )
8832af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pReleaseSyncs( pReleaseSyncs_ )
8833af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pReleaseKeys( pReleaseKeys_ )
8834af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8835af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8836af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8837af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8838af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8839af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8840af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8841af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8842af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8843af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8844af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8845af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8846af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8847af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8848af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setSType( StructureType sType_ )
8849af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8850af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      sType = sType_;
8851af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8852af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8853af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8854af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setPNext( const void* pNext_ )
8855af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8856af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pNext = pNext_;
8857af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8858af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8859af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8860af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setAcquireCount( uint32_t acquireCount_ )
8861af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8862af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      acquireCount = acquireCount_;
8863af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8864af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8865af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8866af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
8867af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8868af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pAcquireSyncs = pAcquireSyncs_;
8869af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8870af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8871af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8872af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
8873af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8874af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pAcquireKeys = pAcquireKeys_;
8875af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8876af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8877af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8878af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireTimeoutMilliseconds( const uint32_t* pAcquireTimeoutMilliseconds_ )
8879af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8880af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
8881af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8882af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8883af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8884af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setReleaseCount( uint32_t releaseCount_ )
8885af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8886af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      releaseCount = releaseCount_;
8887af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8888af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8889af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8890af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
8891af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8892af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pReleaseSyncs = pReleaseSyncs_;
8893af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8894af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8895af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8896af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
8897af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8898af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pReleaseKeys = pReleaseKeys_;
8899af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
8900af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8901af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8902af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkWin32KeyedMutexAcquireReleaseInfoNV&() const
8903af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8904af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(this);
8905af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8906af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8907af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8908af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8909af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( sType == rhs.sType )
8910af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pNext == rhs.pNext )
8911af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( acquireCount == rhs.acquireCount )
8912af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pAcquireSyncs == rhs.pAcquireSyncs )
8913af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pAcquireKeys == rhs.pAcquireKeys )
8914af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds )
8915af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( releaseCount == rhs.releaseCount )
8916af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pReleaseSyncs == rhs.pReleaseSyncs )
8917af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pReleaseKeys == rhs.pReleaseKeys );
8918af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8919af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8920af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8921af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
8922af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
8923af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
8924af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8925af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  private:
8926af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    StructureType sType;
8927af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8928af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  public:
8929af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const void* pNext;
8930af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    uint32_t acquireCount;
8931af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const DeviceMemory* pAcquireSyncs;
8932af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const uint64_t* pAcquireKeys;
8933af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const uint32_t* pAcquireTimeoutMilliseconds;
8934af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    uint32_t releaseCount;
8935af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const DeviceMemory* pReleaseSyncs;
8936af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const uint64_t* pReleaseKeys;
8937af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
8938af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), "struct and wrapper have different size!" );
8939af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8940af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8941af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  enum class SubpassContents
8942af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
8943af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eInline = VK_SUBPASS_CONTENTS_INLINE,
8944af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
8945af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
8946af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
8947af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct PresentInfoKHR
8948af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
89492d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0 )
89502d7f1748089243275714910d1f2602898714ee5fMike Stroyan      : sType( StructureType::eExportMemoryWin32HandleInfoNV )
89512d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pNext( nullptr )
89522d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pAttributes( pAttributes_ )
89532d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , dwAccess( dwAccess_ )
89542d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89552d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89562d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89572d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs )
89582d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89592d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
89602d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89612d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89622d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV& operator=( VkExportMemoryWin32HandleInfoNV const & rhs )
89632d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89642d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
89652d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
89662d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89672d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89682d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
89692d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89702d7f1748089243275714910d1f2602898714ee5fMike Stroyan      sType = sType_;
89712d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
89722d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89732d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89742d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
89752d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89762d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pNext = pNext_;
89772d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
89782d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89792d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89802d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
89812d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89822d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pAttributes = pAttributes_;
89832d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
89842d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89852d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89862d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryWin32HandleInfoNV& setDwAccess( DWORD dwAccess_ )
89872d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89882d7f1748089243275714910d1f2602898714ee5fMike Stroyan      dwAccess = dwAccess_;
89892d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
89902d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89912d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89922d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkExportMemoryWin32HandleInfoNV&() const
89932d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89942d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(this);
89952d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
89962d7f1748089243275714910d1f2602898714ee5fMike Stroyan
89972d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( ExportMemoryWin32HandleInfoNV const& rhs ) const
89982d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
89992d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( sType == rhs.sType )
90002d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pNext == rhs.pNext )
90012d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pAttributes == rhs.pAttributes )
90022d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( dwAccess == rhs.dwAccess );
90032d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90042d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90052d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( ExportMemoryWin32HandleInfoNV const& rhs ) const
90062d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90072d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
90082d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90092d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90102d7f1748089243275714910d1f2602898714ee5fMike Stroyan  private:
90112d7f1748089243275714910d1f2602898714ee5fMike Stroyan    StructureType sType;
90122d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90132d7f1748089243275714910d1f2602898714ee5fMike Stroyan  public:
90142d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const void* pNext;
90152d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const SECURITY_ATTRIBUTES* pAttributes;
90162d7f1748089243275714910d1f2602898714ee5fMike Stroyan    DWORD dwAccess;
90172d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
90182d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
90192d7f1748089243275714910d1f2602898714ee5fMike Stroyan#endif /*VK_USE_PLATFORM_WIN32_KHR*/
90202d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90212d7f1748089243275714910d1f2602898714ee5fMike Stroyan#ifdef VK_USE_PLATFORM_WIN32_KHR
90222d7f1748089243275714910d1f2602898714ee5fMike Stroyan  struct Win32KeyedMutexAcquireReleaseInfoNV
90232d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
90242d7f1748089243275714910d1f2602898714ee5fMike Stroyan    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 )
90252d7f1748089243275714910d1f2602898714ee5fMike Stroyan      : sType( StructureType::eWin32KeyedMutexAcquireReleaseInfoNV )
90262d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pNext( nullptr )
90272d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , acquireCount( acquireCount_ )
90282d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pAcquireSyncs( pAcquireSyncs_ )
90292d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pAcquireKeys( pAcquireKeys_ )
90302d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ )
90312d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , releaseCount( releaseCount_ )
90322d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pReleaseSyncs( pReleaseSyncs_ )
90332d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pReleaseKeys( pReleaseKeys_ )
90342d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90352d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90362d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90372d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
90382d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90392d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
90402d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90412d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90422d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
90432d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90442d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
90452d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90462d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90472d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90482d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setSType( StructureType sType_ )
90492d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90502d7f1748089243275714910d1f2602898714ee5fMike Stroyan      sType = sType_;
90512d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90522d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90532d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90542d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setPNext( const void* pNext_ )
90552d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90562d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pNext = pNext_;
90572d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90582d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90592d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90602d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setAcquireCount( uint32_t acquireCount_ )
90612d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90622d7f1748089243275714910d1f2602898714ee5fMike Stroyan      acquireCount = acquireCount_;
90632d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90642d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90652d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90662d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
90672d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90682d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pAcquireSyncs = pAcquireSyncs_;
90692d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90702d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90712d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90722d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
90732d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90742d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pAcquireKeys = pAcquireKeys_;
90752d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90762d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90772d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90782d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireTimeoutMilliseconds( const uint32_t* pAcquireTimeoutMilliseconds_ )
90792d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90802d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
90812d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90822d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90832d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90842d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setReleaseCount( uint32_t releaseCount_ )
90852d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90862d7f1748089243275714910d1f2602898714ee5fMike Stroyan      releaseCount = releaseCount_;
90872d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90882d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90892d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90902d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
90912d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90922d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pReleaseSyncs = pReleaseSyncs_;
90932d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
90942d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
90952d7f1748089243275714910d1f2602898714ee5fMike Stroyan
90962d7f1748089243275714910d1f2602898714ee5fMike Stroyan    Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
90972d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
90982d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pReleaseKeys = pReleaseKeys_;
90992d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
91002d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
91012d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91022d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkWin32KeyedMutexAcquireReleaseInfoNV&() const
91032d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
91042d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(this);
91052d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
91062d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91072d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
91082d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
91092d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( sType == rhs.sType )
91102d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pNext == rhs.pNext )
91112d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( acquireCount == rhs.acquireCount )
91122d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pAcquireSyncs == rhs.pAcquireSyncs )
91132d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pAcquireKeys == rhs.pAcquireKeys )
91142d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds )
91152d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( releaseCount == rhs.releaseCount )
91162d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pReleaseSyncs == rhs.pReleaseSyncs )
91172d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pReleaseKeys == rhs.pReleaseKeys );
91182d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
91192d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91202d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
91212d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
91222d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
91232d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
91242d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91252d7f1748089243275714910d1f2602898714ee5fMike Stroyan  private:
91262d7f1748089243275714910d1f2602898714ee5fMike Stroyan    StructureType sType;
91272d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91282d7f1748089243275714910d1f2602898714ee5fMike Stroyan  public:
91292d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const void* pNext;
91302d7f1748089243275714910d1f2602898714ee5fMike Stroyan    uint32_t acquireCount;
91312d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const DeviceMemory* pAcquireSyncs;
91322d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const uint64_t* pAcquireKeys;
91332d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const uint32_t* pAcquireTimeoutMilliseconds;
91342d7f1748089243275714910d1f2602898714ee5fMike Stroyan    uint32_t releaseCount;
91352d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const DeviceMemory* pReleaseSyncs;
91362d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const uint64_t* pReleaseKeys;
91372d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
91382d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), "struct and wrapper have different size!" );
91392d7f1748089243275714910d1f2602898714ee5fMike Stroyan#endif /*VK_USE_PLATFORM_WIN32_KHR*/
91402d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91412d7f1748089243275714910d1f2602898714ee5fMike Stroyan  enum class SubpassContents
91422d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
91432d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eInline = VK_SUBPASS_CONTENTS_INLINE,
91442d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
91452d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
91462d7f1748089243275714910d1f2602898714ee5fMike Stroyan
91472d7f1748089243275714910d1f2602898714ee5fMike Stroyan  struct PresentInfoKHR
91482d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
9149af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    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 )
9150af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::ePresentInfoKHR )
9151af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pNext( nullptr )
9152af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , waitSemaphoreCount( waitSemaphoreCount_ )
9153af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pWaitSemaphores( pWaitSemaphores_ )
9154af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , swapchainCount( swapchainCount_ )
9155af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pSwapchains( pSwapchains_ )
9156af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pImageIndices( pImageIndices_ )
9157af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pResults( pResults_ )
9158af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9159af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9160af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9161af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR( VkPresentInfoKHR const & rhs )
9162af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9163af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(PresentInfoKHR) );
9164af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9165af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9166af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
9167af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9168af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(PresentInfoKHR) );
9169af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
9170af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9171af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9172af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& setSType( StructureType sType_ )
9173af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9174af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      sType = sType_;
9175af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
9176af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9177af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9178af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& setPNext( const void* pNext_ )
9179af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9180af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pNext = pNext_;
9181af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
9182af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9183af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9184af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
9185af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9186af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      waitSemaphoreCount = waitSemaphoreCount_;
9187af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
9188af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9189af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9190af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
9191af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9192af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pWaitSemaphores = pWaitSemaphores_;
9193af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
9194af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9195af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9196af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
9197af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9198af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      swapchainCount = swapchainCount_;
9199af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
9200af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
9201af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
9202af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
9203af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
9204af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pSwapchains = pSwapchains_;
9205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
9209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pImageIndices = pImageIndices_;
9211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PresentInfoKHR& setPResults( Result* pResults_ )
9215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pResults = pResults_;
9217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPresentInfoKHR&() const
9221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPresentInfoKHR*>(this);
9223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PresentInfoKHR const& rhs ) const
9226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
9228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
9229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
9230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pWaitSemaphores == rhs.pWaitSemaphores )
9231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( swapchainCount == rhs.swapchainCount )
9232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSwapchains == rhs.pSwapchains )
9233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pImageIndices == rhs.pImageIndices )
9234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pResults == rhs.pResults );
9235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PresentInfoKHR const& rhs ) const
9238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
9243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
9244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
9246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
9247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t waitSemaphoreCount;
9248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Semaphore* pWaitSemaphores;
9249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t swapchainCount;
9250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SwapchainKHR* pSwapchains;
9251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const uint32_t* pImageIndices;
9252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result* pResults;
9253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
9255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DynamicState
9257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eViewport = VK_DYNAMIC_STATE_VIEWPORT,
9259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eScissor = VK_DYNAMIC_STATE_SCISSOR,
9260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
9261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
9262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
9263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
9264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
9265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
9266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE
9267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineDynamicStateCreateInfo
9270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
9272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineDynamicStateCreateInfo )
9273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
9274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
9275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dynamicStateCount( dynamicStateCount_ )
9276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pDynamicStates( pDynamicStates_ )
9277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
9281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
9286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo& setSType( StructureType sType_ )
9292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
9294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
9298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
9300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
9304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
9306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
9310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dynamicStateCount = dynamicStateCount_;
9312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
9316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pDynamicStates = pDynamicStates_;
9318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineDynamicStateCreateInfo&() const
9322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
9324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
9327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
9329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
9330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
9331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dynamicStateCount == rhs.dynamicStateCount )
9332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pDynamicStates == rhs.pDynamicStates );
9333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
9336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
9341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
9342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
9344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
9345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineDynamicStateCreateFlags flags;
9346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dynamicStateCount;
9347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DynamicState* pDynamicStates;
9348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
9350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class QueueFlagBits
9352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGraphics = VK_QUEUE_GRAPHICS_BIT,
9354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCompute = VK_QUEUE_COMPUTE_BIT,
9355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransfer = VK_QUEUE_TRANSFER_BIT,
9356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
9357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
9360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
9362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return QueueFlags( bit0 ) | bit1;
9364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct QueueFamilyProperties
9367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkQueueFamilyProperties&() const
9369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
9371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( QueueFamilyProperties const& rhs ) const
9374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( queueFlags == rhs.queueFlags )
9376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueCount == rhs.queueCount )
9377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( timestampValidBits == rhs.timestampValidBits )
9378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
9379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( QueueFamilyProperties const& rhs ) const
9382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueueFlags queueFlags;
9387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueCount;
9388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t timestampValidBits;
9389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D minImageTransferGranularity;
9390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
9392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class MemoryPropertyFlagBits
9394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
9396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
9397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
9398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
9399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
9400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
9403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
9405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return MemoryPropertyFlags( bit0 ) | bit1;
9407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MemoryType
9410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMemoryType&() const
9412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMemoryType*>(this);
9414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MemoryType const& rhs ) const
9417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( propertyFlags == rhs.propertyFlags )
9419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( heapIndex == rhs.heapIndex );
9420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MemoryType const& rhs ) const
9423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryPropertyFlags propertyFlags;
9428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t heapIndex;
9429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
9431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class MemoryHeapFlagBits
9433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
9435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
9438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
9440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return MemoryHeapFlags( bit0 ) | bit1;
9442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MemoryHeap
9445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMemoryHeap&() const
9447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMemoryHeap*>(this);
9449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MemoryHeap const& rhs ) const
9452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( size == rhs.size )
9454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
9455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MemoryHeap const& rhs ) const
9458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
9463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryHeapFlags flags;
9464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
9466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PhysicalDeviceMemoryProperties
9468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPhysicalDeviceMemoryProperties&() const
9470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
9472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
9475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( memoryTypeCount == rhs.memoryTypeCount )
9477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
9478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memoryHeapCount == rhs.memoryHeapCount )
9479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
9480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
9483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t memoryTypeCount;
9488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
9489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t memoryHeapCount;
9490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
9491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
9493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class AccessFlagBits
9495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
9497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIndexRead = VK_ACCESS_INDEX_READ_BIT,
9498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
9499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
9500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
9501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eShaderRead = VK_ACCESS_SHADER_READ_BIT,
9502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
9503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
9504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
9505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
9506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
9507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
9508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
9509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHostRead = VK_ACCESS_HOST_READ_BIT,
9510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
9511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
9512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT
9513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
9516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
9518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return AccessFlags( bit0 ) | bit1;
9520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct MemoryBarrier
9523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
9525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eMemoryBarrier )
9526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
9527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcAccessMask( srcAccessMask_ )
9528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstAccessMask( dstAccessMask_ )
9529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier( VkMemoryBarrier const & rhs )
9533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MemoryBarrier) );
9535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
9538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(MemoryBarrier) );
9540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier& setSType( StructureType sType_ )
9544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
9546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier& setPNext( const void* pNext_ )
9550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
9552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcAccessMask = srcAccessMask_;
9558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstAccessMask = dstAccessMask_;
9564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkMemoryBarrier&() const
9568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkMemoryBarrier*>(this);
9570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( MemoryBarrier const& rhs ) const
9573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
9575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
9576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcAccessMask == rhs.srcAccessMask )
9577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstAccessMask == rhs.dstAccessMask );
9578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( MemoryBarrier const& rhs ) const
9581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
9586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
9587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
9589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
9590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags srcAccessMask;
9591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags dstAccessMask;
9592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
9594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct BufferMemoryBarrier
9596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
9598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eBufferMemoryBarrier )
9599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
9600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcAccessMask( srcAccessMask_ )
9601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstAccessMask( dstAccessMask_ )
9602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
9603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
9604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , buffer( buffer_ )
9605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
9606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
9607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
9611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
9616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setSType( StructureType sType_ )
9622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
9624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setPNext( const void* pNext_ )
9628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
9630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcAccessMask = srcAccessMask_;
9636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstAccessMask = dstAccessMask_;
9642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
9646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcQueueFamilyIndex = srcQueueFamilyIndex_;
9648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
9652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstQueueFamilyIndex = dstQueueFamilyIndex_;
9654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setBuffer( Buffer buffer_ )
9658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      buffer = buffer_;
9660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setOffset( DeviceSize offset_ )
9664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
9666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferMemoryBarrier& setSize( DeviceSize size_ )
9670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
9672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkBufferMemoryBarrier&() const
9676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
9678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( BufferMemoryBarrier const& rhs ) const
9681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
9683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
9684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcAccessMask == rhs.srcAccessMask )
9685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstAccessMask == rhs.dstAccessMask )
9686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
9687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
9688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( buffer == rhs.buffer )
9689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
9690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size );
9691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( BufferMemoryBarrier const& rhs ) const
9694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
9699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
9700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
9702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
9703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags srcAccessMask;
9704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags dstAccessMask;
9705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t srcQueueFamilyIndex;
9706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstQueueFamilyIndex;
9707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer buffer;
9708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize offset;
9709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
9710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
9712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class BufferUsageFlagBits
9714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
9716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
9717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
9718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
9719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
9720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
9721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
9722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
9723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
9724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
9727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
9729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return BufferUsageFlags( bit0 ) | bit1;
9731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class BufferCreateFlagBits
9734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
9736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
9737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
9738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
9741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
9743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return BufferCreateFlags( bit0 ) | bit1;
9745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct BufferCreateInfo
9748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
9750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eBufferCreateInfo )
9751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
9752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
9753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
9754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , usage( usage_ )
9755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sharingMode( sharingMode_ )
9756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueFamilyIndexCount( queueFamilyIndexCount_ )
9757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pQueueFamilyIndices( pQueueFamilyIndices_ )
9758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo( VkBufferCreateInfo const & rhs )
9762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
9767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setSType( StructureType sType_ )
9773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
9775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setPNext( const void* pNext_ )
9779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
9781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
9785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
9787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setSize( DeviceSize size_ )
9791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
9793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
9797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      usage = usage_;
9799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
9803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sharingMode = sharingMode_;
9805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
9809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueFamilyIndexCount = queueFamilyIndexCount_;
9811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
9815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pQueueFamilyIndices = pQueueFamilyIndices_;
9817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkBufferCreateInfo&() const
9821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkBufferCreateInfo*>(this);
9823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( BufferCreateInfo const& rhs ) const
9826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
9828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
9829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
9830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size )
9831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( usage == rhs.usage )
9832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sharingMode == rhs.sharingMode )
9833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
9834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
9835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( BufferCreateInfo const& rhs ) const
9838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
9843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
9844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
9846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
9847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferCreateFlags flags;
9848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
9849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferUsageFlags usage;
9850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SharingMode sharingMode;
9851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueFamilyIndexCount;
9852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const uint32_t* pQueueFamilyIndices;
9853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
9855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ShaderStageFlagBits
9857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertex = VK_SHADER_STAGE_VERTEX_BIT,
9859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
9860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
9861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
9862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
9863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
9864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
9865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAll = VK_SHADER_STAGE_ALL
9866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
9869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
9871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ShaderStageFlags( bit0 ) | bit1;
9873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
9874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorSetLayoutBinding
9876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
9878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : binding( binding_ )
9879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorType( descriptorType_ )
9880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , descriptorCount( descriptorCount_ )
9881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stageFlags( stageFlags_ )
9882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pImmutableSamplers( pImmutableSamplers_ )
9883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
9887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
9892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
9898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      binding = binding_;
9900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
9904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorType = descriptorType_;
9906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
9910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      descriptorCount = descriptorCount_;
9912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
9916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stageFlags = stageFlags_;
9918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
9922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pImmutableSamplers = pImmutableSamplers_;
9924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorSetLayoutBinding&() const
9928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
9930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorSetLayoutBinding const& rhs ) const
9933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( binding == rhs.binding )
9935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorType == rhs.descriptorType )
9936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( descriptorCount == rhs.descriptorCount )
9937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stageFlags == rhs.stageFlags )
9938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pImmutableSamplers == rhs.pImmutableSamplers );
9939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
9942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
9944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t binding;
9947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorType descriptorType;
9948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t descriptorCount;
9949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderStageFlags stageFlags;
9950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Sampler* pImmutableSamplers;
9951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
9952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
9953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorSetLayoutCreateInfo
9955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
9956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
9957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDescriptorSetLayoutCreateInfo )
9958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
9959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
9960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bindingCount( bindingCount_ )
9961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pBindings( pBindings_ )
9962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
9966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
9971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo& setSType( StructureType sType_ )
9977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
9979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
9983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
9985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
9989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
9991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
9994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
9995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
9996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bindingCount = bindingCount_;
9997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
9998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
9999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
10001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pBindings = pBindings_;
10003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorSetLayoutCreateInfo&() const
10007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
10009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
10012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
10016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bindingCount == rhs.bindingCount )
10017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pBindings == rhs.pBindings );
10018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
10021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorSetLayoutCreateFlags flags;
10031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bindingCount;
10032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DescriptorSetLayoutBinding* pBindings;
10033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
10035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineShaderStageCreateInfo
10037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
10039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineShaderStageCreateInfo )
10040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
10042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stage( stage_ )
10043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , module( module_ )
10044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pName( pName_ )
10045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSpecializationInfo( pSpecializationInfo_ )
10046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
10050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
10052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
10055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
10057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setSType( StructureType sType_ )
10061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
10067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
10069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
10073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
10075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
10079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stage = stage_;
10081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
10085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      module = module_;
10087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setPName( const char* pName_ )
10091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pName = pName_;
10093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
10097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSpecializationInfo = pSpecializationInfo_;
10099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineShaderStageCreateInfo&() const
10103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
10105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
10108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
10112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stage == rhs.stage )
10113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( module == rhs.module )
10114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pName == rhs.pName )
10115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSpecializationInfo == rhs.pSpecializationInfo );
10116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
10119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateFlags flags;
10129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderStageFlagBits stage;
10130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderModule module;
10131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* pName;
10132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SpecializationInfo* pSpecializationInfo;
10133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
10135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PushConstantRange
10137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
10139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : stageFlags( stageFlags_ )
10140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
10141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
10142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PushConstantRange( VkPushConstantRange const & rhs )
10146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PushConstantRange) );
10148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PushConstantRange& operator=( VkPushConstantRange const & rhs )
10151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PushConstantRange) );
10153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
10157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stageFlags = stageFlags_;
10159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PushConstantRange& setOffset( uint32_t offset_ )
10163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
10165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PushConstantRange& setSize( uint32_t size_ )
10169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
10171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPushConstantRange&() const
10175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPushConstantRange*>(this);
10177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PushConstantRange const& rhs ) const
10180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( stageFlags == rhs.stageFlags )
10182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
10183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size );
10184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PushConstantRange const& rhs ) const
10187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ShaderStageFlags stageFlags;
10192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t offset;
10193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t size;
10194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
10196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineLayoutCreateInfo
10198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
10200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineLayoutCreateInfo )
10201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
10203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , setLayoutCount( setLayoutCount_ )
10204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSetLayouts( pSetLayouts_ )
10205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pushConstantRangeCount( pushConstantRangeCount_ )
10206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pPushConstantRanges( pPushConstantRanges_ )
10207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
10211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
10216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setSType( StructureType sType_ )
10222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
10228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
10230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
10234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
10236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
10240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      setLayoutCount = setLayoutCount_;
10242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
10246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSetLayouts = pSetLayouts_;
10248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
10252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pushConstantRangeCount = pushConstantRangeCount_;
10254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
10258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pPushConstantRanges = pPushConstantRanges_;
10260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineLayoutCreateInfo&() const
10264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
10266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineLayoutCreateInfo const& rhs ) const
10269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
10273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( setLayoutCount == rhs.setLayoutCount )
10274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSetLayouts == rhs.pSetLayouts )
10275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
10276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pPushConstantRanges == rhs.pPushConstantRanges );
10277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
10280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayoutCreateFlags flags;
10290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t setLayoutCount;
10291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DescriptorSetLayout* pSetLayouts;
10292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t pushConstantRangeCount;
10293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PushConstantRange* pPushConstantRanges;
10294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
10296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageUsageFlagBits
10298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
10300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
10301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
10302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
10303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
10304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
10305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
10306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
10307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
10310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
10312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ImageUsageFlags( bit0 ) | bit1;
10314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageCreateFlagBits
10317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
10319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
10320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
10321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
10322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
10323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
10326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
10328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ImageCreateFlags( bit0 ) | bit1;
10330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineCreateFlagBits
10333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
10335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
10336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT
10337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
10340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
10342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineCreateFlags( bit0 ) | bit1;
10344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ComputePipelineCreateInfo
10347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
10349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eComputePipelineCreateInfo )
10350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
10352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stage( stage_ )
10353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layout( layout_ )
10354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , basePipelineHandle( basePipelineHandle_ )
10355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , basePipelineIndex( basePipelineIndex_ )
10356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
10360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
10365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setSType( StructureType sType_ )
10371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setPNext( const void* pNext_ )
10377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
10379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
10383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
10385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
10389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stage = stage_;
10391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
10395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layout = layout_;
10397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
10401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      basePipelineHandle = basePipelineHandle_;
10403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
10407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      basePipelineIndex = basePipelineIndex_;
10409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkComputePipelineCreateInfo&() const
10413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
10415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ComputePipelineCreateInfo const& rhs ) const
10418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
10422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stage == rhs.stage )
10423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layout == rhs.layout )
10424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( basePipelineHandle == rhs.basePipelineHandle )
10425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( basePipelineIndex == rhs.basePipelineIndex );
10426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ComputePipelineCreateInfo const& rhs ) const
10429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCreateFlags flags;
10439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineShaderStageCreateInfo stage;
10440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayout layout;
10441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Pipeline basePipelineHandle;
10442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t basePipelineIndex;
10443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
10445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ColorComponentFlagBits
10447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eR = VK_COLOR_COMPONENT_R_BIT,
10449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eG = VK_COLOR_COMPONENT_G_BIT,
10450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eB = VK_COLOR_COMPONENT_B_BIT,
10451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eA = VK_COLOR_COMPONENT_A_BIT
10452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
10455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
10457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ColorComponentFlags( bit0 ) | bit1;
10459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineColorBlendAttachmentState
10462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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() )
10464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : blendEnable( blendEnable_ )
10465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcColorBlendFactor( srcColorBlendFactor_ )
10466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstColorBlendFactor( dstColorBlendFactor_ )
10467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , colorBlendOp( colorBlendOp_ )
10468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
10469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
10470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , alphaBlendOp( alphaBlendOp_ )
10471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , colorWriteMask( colorWriteMask_ )
10472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
10476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
10481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
10487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      blendEnable = blendEnable_;
10489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
10493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcColorBlendFactor = srcColorBlendFactor_;
10495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
10499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstColorBlendFactor = dstColorBlendFactor_;
10501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
10505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      colorBlendOp = colorBlendOp_;
10507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
10511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcAlphaBlendFactor = srcAlphaBlendFactor_;
10513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
10517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstAlphaBlendFactor = dstAlphaBlendFactor_;
10519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
10523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      alphaBlendOp = alphaBlendOp_;
10525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
10529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      colorWriteMask = colorWriteMask_;
10531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineColorBlendAttachmentState&() const
10535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
10537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
10540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( blendEnable == rhs.blendEnable )
10542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
10543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
10544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( colorBlendOp == rhs.colorBlendOp )
10545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
10546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
10547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( alphaBlendOp == rhs.alphaBlendOp )
10548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( colorWriteMask == rhs.colorWriteMask );
10549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
10552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 blendEnable;
10557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BlendFactor srcColorBlendFactor;
10558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BlendFactor dstColorBlendFactor;
10559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BlendOp colorBlendOp;
10560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BlendFactor srcAlphaBlendFactor;
10561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BlendFactor dstAlphaBlendFactor;
10562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BlendOp alphaBlendOp;
10563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ColorComponentFlags colorWriteMask;
10564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
10566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineColorBlendStateCreateInfo
10568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 } } )
10570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineColorBlendStateCreateInfo )
10571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
10573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , logicOpEnable( logicOpEnable_ )
10574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , logicOp( logicOp_ )
10575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , attachmentCount( attachmentCount_ )
10576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pAttachments( pAttachments_ )
10577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
10582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
10587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setSType( StructureType sType_ )
10593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
10599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
10601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
10605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
10607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
10611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      logicOpEnable = logicOpEnable_;
10613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
10617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      logicOp = logicOp_;
10619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
10623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      attachmentCount = attachmentCount_;
10625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
10629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pAttachments = pAttachments_;
10631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
10635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineColorBlendStateCreateInfo&() const
10641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
10643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
10646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
10650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( logicOpEnable == rhs.logicOpEnable )
10651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( logicOp == rhs.logicOp )
10652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( attachmentCount == rhs.attachmentCount )
10653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pAttachments == rhs.pAttachments )
10654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
10655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
10658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineColorBlendStateCreateFlags flags;
10668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 logicOpEnable;
10669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    LogicOp logicOp;
10670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t attachmentCount;
10671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineColorBlendAttachmentState* pAttachments;
10672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float blendConstants[4];
10673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
10675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class FenceCreateFlagBits
10677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
10679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
10682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
10684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return FenceCreateFlags( bit0 ) | bit1;
10686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct FenceCreateInfo
10689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
10691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eFenceCreateInfo )
10692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
10694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateInfo( VkFenceCreateInfo const & rhs )
10698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
10703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateInfo& setSType( StructureType sType_ )
10709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateInfo& setPNext( const void* pNext_ )
10715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
10717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
10721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
10723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkFenceCreateInfo&() const
10727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkFenceCreateInfo*>(this);
10729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( FenceCreateInfo const& rhs ) const
10732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
10736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( FenceCreateInfo const& rhs ) const
10739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FenceCreateFlags flags;
10749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
10751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class FormatFeatureFlagBits
10753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
10755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
10756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
10757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
10758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
10759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
10760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
10761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
10762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
10763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
10764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
10765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
10766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
10767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
10768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
10771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
10773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return FormatFeatureFlags( bit0 ) | bit1;
10775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct FormatProperties
10778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkFormatProperties&() const
10780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkFormatProperties*>(this);
10782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( FormatProperties const& rhs ) const
10785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( linearTilingFeatures == rhs.linearTilingFeatures )
10787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
10788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bufferFeatures == rhs.bufferFeatures );
10789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( FormatProperties const& rhs ) const
10792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FormatFeatureFlags linearTilingFeatures;
10797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FormatFeatureFlags optimalTilingFeatures;
10798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FormatFeatureFlags bufferFeatures;
10799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
10801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class QueryControlFlagBits
10803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
10805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
10808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
10810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return QueryControlFlags( bit0 ) | bit1;
10812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class QueryResultFlagBits
10815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e64 = VK_QUERY_RESULT_64_BIT,
10817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eWait = VK_QUERY_RESULT_WAIT_BIT,
10818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
10819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePartial = VK_QUERY_RESULT_PARTIAL_BIT
10820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
10823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
10825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return QueryResultFlags( bit0 ) | bit1;
10827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CommandBufferUsageFlagBits
10830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
10832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
10833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
10834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
10837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
10839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return CommandBufferUsageFlags( bit0 ) | bit1;
10841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class QueryPipelineStatisticFlagBits
10844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
10846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
10847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
10848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
10849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
10850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
10851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
10852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
10853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
10854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
10855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
10856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
10859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
10861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return QueryPipelineStatisticFlags( bit0 ) | bit1;
10863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
10864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct CommandBufferInheritanceInfo
10866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eCommandBufferInheritanceInfo )
10869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , renderPass( renderPass_ )
10871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , subpass( subpass_ )
10872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , framebuffer( framebuffer_ )
10873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , occlusionQueryEnable( occlusionQueryEnable_ )
10874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queryFlags( queryFlags_ )
10875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pipelineStatistics( pipelineStatistics_ )
10876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
10880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
10885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setSType( StructureType sType_ )
10891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
10897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
10899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
10903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      renderPass = renderPass_;
10905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
10909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      subpass = subpass_;
10911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
10915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      framebuffer = framebuffer_;
10917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
10921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      occlusionQueryEnable = occlusionQueryEnable_;
10923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
10927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queryFlags = queryFlags_;
10929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pipelineStatistics = pipelineStatistics_;
10935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkCommandBufferInheritanceInfo&() const
10939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
10941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( CommandBufferInheritanceInfo const& rhs ) const
10944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
10946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
10947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( renderPass == rhs.renderPass )
10948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subpass == rhs.subpass )
10949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( framebuffer == rhs.framebuffer )
10950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
10951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queryFlags == rhs.queryFlags )
10952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pipelineStatistics == rhs.pipelineStatistics );
10953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
10956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
10958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
10961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
10962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
10964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
10965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass renderPass;
10966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t subpass;
10967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Framebuffer framebuffer;
10968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 occlusionQueryEnable;
10969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryControlFlags queryFlags;
10970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPipelineStatisticFlags pipelineStatistics;
10971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
10972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
10973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct CommandBufferBeginInfo
10975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
10976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
10977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eCommandBufferBeginInfo )
10978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
10979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
10980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pInheritanceInfo( pInheritanceInfo_ )
10981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
10985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
10990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
10994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
10995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo& setSType( StructureType sType_ )
10996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
10997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
10998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
10999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo& setPNext( const void* pNext_ )
11002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
11004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
11008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
11010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
11014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pInheritanceInfo = pInheritanceInfo_;
11016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkCommandBufferBeginInfo&() const
11020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
11022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( CommandBufferBeginInfo const& rhs ) const
11025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
11027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
11028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
11029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pInheritanceInfo == rhs.pInheritanceInfo );
11030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( CommandBufferBeginInfo const& rhs ) const
11033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
11038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
11039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
11041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
11042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBufferUsageFlags flags;
11043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const CommandBufferInheritanceInfo* pInheritanceInfo;
11044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
11046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct QueryPoolCreateInfo
11048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
11050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eQueryPoolCreateInfo )
11051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
11052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
11053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queryType( queryType_ )
11054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queryCount( queryCount_ )
11055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pipelineStatistics( pipelineStatistics_ )
11056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
11060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
11062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
11065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
11067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& setSType( StructureType sType_ )
11071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
11073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& setPNext( const void* pNext_ )
11077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
11079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
11083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
11085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
11089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queryType = queryType_;
11091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
11095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queryCount = queryCount_;
11097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
11101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pipelineStatistics = pipelineStatistics_;
11103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkQueryPoolCreateInfo&() const
11107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
11109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( QueryPoolCreateInfo const& rhs ) const
11112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
11114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
11115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
11116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queryType == rhs.queryType )
11117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queryCount == rhs.queryCount )
11118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pipelineStatistics == rhs.pipelineStatistics );
11119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( QueryPoolCreateInfo const& rhs ) const
11122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
11127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
11128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
11130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
11131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPoolCreateFlags flags;
11132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryType queryType;
11133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queryCount;
11134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    QueryPipelineStatisticFlags pipelineStatistics;
11135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
11137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ImageAspectFlagBits
11139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColor = VK_IMAGE_ASPECT_COLOR_BIT,
11141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
11142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
11143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMetadata = VK_IMAGE_ASPECT_METADATA_BIT
11144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
11147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
11149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return ImageAspectFlags( bit0 ) | bit1;
11151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
11152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageSubresource
11154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
11156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : aspectMask( aspectMask_ )
11157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , mipLevel( mipLevel_ )
11158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , arrayLayer( arrayLayer_ )
11159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource( VkImageSubresource const & rhs )
11163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageSubresource) );
11165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource& operator=( VkImageSubresource const & rhs )
11168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageSubresource) );
11170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
11174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      aspectMask = aspectMask_;
11176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource& setMipLevel( uint32_t mipLevel_ )
11180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mipLevel = mipLevel_;
11182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
11186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      arrayLayer = arrayLayer_;
11188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageSubresource&() const
11192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageSubresource*>(this);
11194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageSubresource const& rhs ) const
11197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( aspectMask == rhs.aspectMask )
11199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mipLevel == rhs.mipLevel )
11200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( arrayLayer == rhs.arrayLayer );
11201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageSubresource const& rhs ) const
11204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageAspectFlags aspectMask;
11209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t mipLevel;
11210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t arrayLayer;
11211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
11213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageSubresourceLayers
11215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : aspectMask( aspectMask_ )
11218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , mipLevel( mipLevel_ )
11219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , baseArrayLayer( baseArrayLayer_ )
11220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layerCount( layerCount_ )
11221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
11225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
11230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
11236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      aspectMask = aspectMask_;
11238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
11242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mipLevel = mipLevel_;
11244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      baseArrayLayer = baseArrayLayer_;
11250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
11254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layerCount = layerCount_;
11256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageSubresourceLayers&() const
11260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
11262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageSubresourceLayers const& rhs ) const
11265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( aspectMask == rhs.aspectMask )
11267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mipLevel == rhs.mipLevel )
11268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( baseArrayLayer == rhs.baseArrayLayer )
11269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layerCount == rhs.layerCount );
11270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageSubresourceLayers const& rhs ) const
11273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageAspectFlags aspectMask;
11278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t mipLevel;
11279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t baseArrayLayer;
11280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t layerCount;
11281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
11283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageSubresourceRange
11285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : aspectMask( aspectMask_ )
11288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , baseMipLevel( baseMipLevel_ )
11289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , levelCount( levelCount_ )
11290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , baseArrayLayer( baseArrayLayer_ )
11291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layerCount( layerCount_ )
11292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange( VkImageSubresourceRange const & rhs )
11296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
11301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
11307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      aspectMask = aspectMask_;
11309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
11313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      baseMipLevel = baseMipLevel_;
11315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
11319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      levelCount = levelCount_;
11321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      baseArrayLayer = baseArrayLayer_;
11327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
11331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layerCount = layerCount_;
11333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageSubresourceRange&() const
11337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageSubresourceRange*>(this);
11339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageSubresourceRange const& rhs ) const
11342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( aspectMask == rhs.aspectMask )
11344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( baseMipLevel == rhs.baseMipLevel )
11345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( levelCount == rhs.levelCount )
11346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( baseArrayLayer == rhs.baseArrayLayer )
11347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layerCount == rhs.layerCount );
11348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageSubresourceRange const& rhs ) const
11351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageAspectFlags aspectMask;
11356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t baseMipLevel;
11357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t levelCount;
11358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t baseArrayLayer;
11359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t layerCount;
11360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
11362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageMemoryBarrier
11364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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() )
11366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eImageMemoryBarrier )
11367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
11368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcAccessMask( srcAccessMask_ )
11369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstAccessMask( dstAccessMask_ )
11370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , oldLayout( oldLayout_ )
11371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , newLayout( newLayout_ )
11372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
11373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
11374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , image( image_ )
11375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , subresourceRange( subresourceRange_ )
11376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
11380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
11385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setSType( StructureType sType_ )
11391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
11393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setPNext( const void* pNext_ )
11397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
11399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
11403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcAccessMask = srcAccessMask_;
11405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
11409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstAccessMask = dstAccessMask_;
11411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
11415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      oldLayout = oldLayout_;
11417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
11421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      newLayout = newLayout_;
11423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
11427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcQueueFamilyIndex = srcQueueFamilyIndex_;
11429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
11433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstQueueFamilyIndex = dstQueueFamilyIndex_;
11435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setImage( Image image_ )
11439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      image = image_;
11441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      subresourceRange = subresourceRange_;
11447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageMemoryBarrier&() const
11451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
11453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageMemoryBarrier const& rhs ) const
11456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
11458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
11459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcAccessMask == rhs.srcAccessMask )
11460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstAccessMask == rhs.dstAccessMask )
11461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( oldLayout == rhs.oldLayout )
11462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( newLayout == rhs.newLayout )
11463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
11464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
11465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( image == rhs.image )
11466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subresourceRange == rhs.subresourceRange );
11467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageMemoryBarrier const& rhs ) const
11470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
11475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
11476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
11478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
11479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags srcAccessMask;
11480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags dstAccessMask;
11481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout oldLayout;
11482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout newLayout;
11483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t srcQueueFamilyIndex;
11484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstQueueFamilyIndex;
11485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image image;
11486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange subresourceRange;
11487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
11489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageViewCreateInfo
11491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
11493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eImageViewCreateInfo )
11494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
11495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
11496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , image( image_ )
11497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , viewType( viewType_ )
11498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , format( format_ )
11499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , components( components_ )
11500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , subresourceRange( subresourceRange_ )
11501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
11505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
11510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setSType( StructureType sType_ )
11516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
11518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setPNext( const void* pNext_ )
11522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
11524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
11528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
11530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setImage( Image image_ )
11534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      image = image_;
11536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
11540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      viewType = viewType_;
11542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setFormat( Format format_ )
11546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      format = format_;
11548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setComponents( ComponentMapping components_ )
11552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      components = components_;
11554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      subresourceRange = subresourceRange_;
11560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageViewCreateInfo&() const
11564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
11566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageViewCreateInfo const& rhs ) const
11569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
11571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
11572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
11573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( image == rhs.image )
11574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( viewType == rhs.viewType )
11575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( format == rhs.format )
11576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( components == rhs.components )
11577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subresourceRange == rhs.subresourceRange );
11578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageViewCreateInfo const& rhs ) const
11581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
11586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
11587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
11589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
11590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewCreateFlags flags;
11591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image image;
11592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageViewType viewType;
11593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format format;
11594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ComponentMapping components;
11595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceRange subresourceRange;
11596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
11598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageCopy
11600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : srcSubresource( srcSubresource_ )
11603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcOffset( srcOffset_ )
11604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstSubresource( dstSubresource_ )
11605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstOffset( dstOffset_ )
11606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , extent( extent_ )
11607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy( VkImageCopy const & rhs )
11611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageCopy) );
11613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy& operator=( VkImageCopy const & rhs )
11616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageCopy) );
11618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcSubresource = srcSubresource_;
11624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy& setSrcOffset( Offset3D srcOffset_ )
11628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcOffset = srcOffset_;
11630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstSubresource = dstSubresource_;
11636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy& setDstOffset( Offset3D dstOffset_ )
11640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstOffset = dstOffset_;
11642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCopy& setExtent( Extent3D extent_ )
11646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      extent = extent_;
11648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageCopy&() const
11652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageCopy*>(this);
11654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageCopy const& rhs ) const
11657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( srcSubresource == rhs.srcSubresource )
11659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcOffset == rhs.srcOffset )
11660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstSubresource == rhs.dstSubresource )
11661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstOffset == rhs.dstOffset )
11662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( extent == rhs.extent );
11663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageCopy const& rhs ) const
11666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers srcSubresource;
11671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D srcOffset;
11672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers dstSubresource;
11673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D dstOffset;
11674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D extent;
11675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
11677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageBlit
11679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
11681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : srcSubresource( srcSubresource_ )
11682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstSubresource( dstSubresource_ )
11683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit( VkImageBlit const & rhs )
11689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageBlit) );
11691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit& operator=( VkImageBlit const & rhs )
11694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageBlit) );
11696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcSubresource = srcSubresource_;
11702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
11706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstSubresource = dstSubresource_;
11714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
11718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageBlit&() const
11724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageBlit*>(this);
11726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageBlit const& rhs ) const
11729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( srcSubresource == rhs.srcSubresource )
11731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
11732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstSubresource == rhs.dstSubresource )
11733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
11734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageBlit const& rhs ) const
11737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers srcSubresource;
11742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D srcOffsets[2];
11743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers dstSubresource;
11744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D dstOffsets[2];
11745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
11747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct BufferImageCopy
11749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
11751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : bufferOffset( bufferOffset_ )
11752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bufferRowLength( bufferRowLength_ )
11753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bufferImageHeight( bufferImageHeight_ )
11754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageSubresource( imageSubresource_ )
11755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageOffset( imageOffset_ )
11756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageExtent( imageExtent_ )
11757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy( VkBufferImageCopy const & rhs )
11761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferImageCopy) );
11763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
11766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BufferImageCopy) );
11768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
11772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bufferOffset = bufferOffset_;
11774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
11778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bufferRowLength = bufferRowLength_;
11780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
11784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bufferImageHeight = bufferImageHeight_;
11786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
11790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageSubresource = imageSubresource_;
11792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
11796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageOffset = imageOffset_;
11798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
11802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageExtent = imageExtent_;
11804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkBufferImageCopy&() const
11808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkBufferImageCopy*>(this);
11810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( BufferImageCopy const& rhs ) const
11813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( bufferOffset == rhs.bufferOffset )
11815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bufferRowLength == rhs.bufferRowLength )
11816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bufferImageHeight == rhs.bufferImageHeight )
11817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageSubresource == rhs.imageSubresource )
11818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageOffset == rhs.imageOffset )
11819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageExtent == rhs.imageExtent );
11820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( BufferImageCopy const& rhs ) const
11823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize bufferOffset;
11828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bufferRowLength;
11829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bufferImageHeight;
11830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers imageSubresource;
11831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D imageOffset;
11832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D imageExtent;
11833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
11835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageResolve
11837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : srcSubresource( srcSubresource_ )
11840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcOffset( srcOffset_ )
11841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstSubresource( dstSubresource_ )
11842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstOffset( dstOffset_ )
11843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , extent( extent_ )
11844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve( VkImageResolve const & rhs )
11848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageResolve) );
11850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve& operator=( VkImageResolve const & rhs )
11853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageResolve) );
11855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcSubresource = srcSubresource_;
11861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve& setSrcOffset( Offset3D srcOffset_ )
11865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcOffset = srcOffset_;
11867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstSubresource = dstSubresource_;
11873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve& setDstOffset( Offset3D dstOffset_ )
11877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstOffset = dstOffset_;
11879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageResolve& setExtent( Extent3D extent_ )
11883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      extent = extent_;
11885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageResolve&() const
11889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageResolve*>(this);
11891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageResolve const& rhs ) const
11894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( srcSubresource == rhs.srcSubresource )
11896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcOffset == rhs.srcOffset )
11897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstSubresource == rhs.dstSubresource )
11898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstOffset == rhs.dstOffset )
11899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( extent == rhs.extent );
11900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageResolve const& rhs ) const
11903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers srcSubresource;
11908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D srcOffset;
11909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresourceLayers dstSubresource;
11910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D dstOffset;
11911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D extent;
11912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
11914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ClearAttachment
11916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
11918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : aspectMask( aspectMask_ )
11919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , colorAttachment( colorAttachment_ )
11920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , clearValue( clearValue_ )
11921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearAttachment( VkClearAttachment const & rhs )
11925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ClearAttachment) );
11927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearAttachment& operator=( VkClearAttachment const & rhs )
11930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ClearAttachment) );
11932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
11936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      aspectMask = aspectMask_;
11938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
11942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      colorAttachment = colorAttachment_;
11944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearAttachment& setClearValue( ClearValue clearValue_ )
11948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      clearValue = clearValue_;
11950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
11951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkClearAttachment&() const
11954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkClearAttachment*>(this);
11956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageAspectFlags aspectMask;
11959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t colorAttachment;
11960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ClearValue clearValue;
11961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
11963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SparseImageFormatFlagBits
11965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
11967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
11968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
11969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
11970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
11972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
11974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SparseImageFormatFlags( bit0 ) | bit1;
11976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
11977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseImageFormatProperties
11979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
11980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseImageFormatProperties&() const
11981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
11983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseImageFormatProperties const& rhs ) const
11986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( aspectMask == rhs.aspectMask )
11988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageGranularity == rhs.imageGranularity )
11989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
11990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseImageFormatProperties const& rhs ) const
11993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
11994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
11995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
11996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
11997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageAspectFlags aspectMask;
11998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D imageGranularity;
11999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageFormatFlags flags;
12000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
12002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseImageMemoryRequirements
12004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseImageMemoryRequirements&() const
12006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
12008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseImageMemoryRequirements const& rhs ) const
12011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( formatProperties == rhs.formatProperties )
12013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
12014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageMipTailSize == rhs.imageMipTailSize )
12015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageMipTailOffset == rhs.imageMipTailOffset )
12016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageMipTailStride == rhs.imageMipTailStride );
12017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseImageMemoryRequirements const& rhs ) const
12020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageFormatProperties formatProperties;
12025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t imageMipTailFirstLod;
12026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize imageMipTailSize;
12027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize imageMipTailOffset;
12028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize imageMipTailStride;
12029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
12031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SparseMemoryBindFlagBits
12033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
12035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
12038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
12040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SparseMemoryBindFlags( bit0 ) | bit1;
12042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
12043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseMemoryBind
12045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
12047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : resourceOffset( resourceOffset_ )
12048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , size( size_ )
12049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , memory( memory_ )
12050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , memoryOffset( memoryOffset_ )
12051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
12052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind( VkSparseMemoryBind const & rhs )
12056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseMemoryBind) );
12058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
12061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseMemoryBind) );
12063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
12067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      resourceOffset = resourceOffset_;
12069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind& setSize( DeviceSize size_ )
12073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size = size_;
12075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind& setMemory( DeviceMemory memory_ )
12079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memory = memory_;
12081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
12085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memoryOffset = memoryOffset_;
12087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
12091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
12093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseMemoryBind&() const
12097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseMemoryBind*>(this);
12099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseMemoryBind const& rhs ) const
12102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( resourceOffset == rhs.resourceOffset )
12104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( size == rhs.size )
12105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memory == rhs.memory )
12106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memoryOffset == rhs.memoryOffset )
12107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
12108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseMemoryBind const& rhs ) const
12111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize resourceOffset;
12116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize size;
12117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceMemory memory;
12118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize memoryOffset;
12119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBindFlags flags;
12120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
12122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseImageMemoryBind
12124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
12126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : subresource( subresource_ )
12127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , offset( offset_ )
12128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , extent( extent_ )
12129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , memory( memory_ )
12130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , memoryOffset( memoryOffset_ )
12131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
12132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
12136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
12138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
12141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
12143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
12147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      subresource = subresource_;
12149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& setOffset( Offset3D offset_ )
12153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      offset = offset_;
12155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& setExtent( Extent3D extent_ )
12159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      extent = extent_;
12161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
12165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memory = memory_;
12167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
12171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memoryOffset = memoryOffset_;
12173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
12177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
12179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseImageMemoryBind&() const
12183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
12185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseImageMemoryBind const& rhs ) const
12188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( subresource == rhs.subresource )
12190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( offset == rhs.offset )
12191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( extent == rhs.extent )
12192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memory == rhs.memory )
12193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memoryOffset == rhs.memoryOffset )
12194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags );
12195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseImageMemoryBind const& rhs ) const
12198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageSubresource subresource;
12203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset3D offset;
12204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D extent;
12205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceMemory memory;
12206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize memoryOffset;
12207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseMemoryBindFlags flags;
12208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
12210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseBufferMemoryBindInfo
12212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : buffer( buffer_ )
12215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bindCount( bindCount_ )
12216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pBinds( pBinds_ )
12217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
12221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
12226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
12232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      buffer = buffer_;
12234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bindCount = bindCount_;
12240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pBinds = pBinds_;
12246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseBufferMemoryBindInfo&() const
12250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
12252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
12255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( buffer == rhs.buffer )
12257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bindCount == rhs.bindCount )
12258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pBinds == rhs.pBinds );
12259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
12262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Buffer buffer;
12267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bindCount;
12268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SparseMemoryBind* pBinds;
12269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
12271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseImageOpaqueMemoryBindInfo
12273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : image( image_ )
12276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bindCount( bindCount_ )
12277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pBinds( pBinds_ )
12278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
12293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      image = image_;
12295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bindCount = bindCount_;
12301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pBinds = pBinds_;
12307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseImageOpaqueMemoryBindInfo&() const
12311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
12313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( image == rhs.image )
12318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bindCount == rhs.bindCount )
12319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pBinds == rhs.pBinds );
12320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image image;
12328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bindCount;
12329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SparseMemoryBind* pBinds;
12330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
12332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SparseImageMemoryBindInfo
12334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
12336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : image( image_ )
12337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bindCount( bindCount_ )
12338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pBinds( pBinds_ )
12339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
12343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
12348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBindInfo& setImage( Image image_ )
12354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      image = image_;
12356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bindCount = bindCount_;
12362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
12366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pBinds = pBinds_;
12368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSparseImageMemoryBindInfo&() const
12372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
12374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SparseImageMemoryBindInfo const& rhs ) const
12377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( image == rhs.image )
12379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bindCount == rhs.bindCount )
12380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pBinds == rhs.pBinds );
12381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
12384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Image image;
12389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bindCount;
12390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SparseImageMemoryBind* pBinds;
12391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
12393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct BindSparseInfo
12395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
12397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eBindSparseInfo )
12398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
12399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , waitSemaphoreCount( waitSemaphoreCount_ )
12400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pWaitSemaphores( pWaitSemaphores_ )
12401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , bufferBindCount( bufferBindCount_ )
12402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pBufferBinds( pBufferBinds_ )
12403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageOpaqueBindCount( imageOpaqueBindCount_ )
12404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pImageOpaqueBinds( pImageOpaqueBinds_ )
12405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageBindCount( imageBindCount_ )
12406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pImageBinds( pImageBinds_ )
12407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , signalSemaphoreCount( signalSemaphoreCount_ )
12408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSignalSemaphores( pSignalSemaphores_ )
12409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo( VkBindSparseInfo const & rhs )
12413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BindSparseInfo) );
12415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
12418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(BindSparseInfo) );
12420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setSType( StructureType sType_ )
12424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
12426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setPNext( const void* pNext_ )
12430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
12432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
12436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      waitSemaphoreCount = waitSemaphoreCount_;
12438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
12442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pWaitSemaphores = pWaitSemaphores_;
12444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
12448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      bufferBindCount = bufferBindCount_;
12450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
12454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pBufferBinds = pBufferBinds_;
12456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
12460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageOpaqueBindCount = imageOpaqueBindCount_;
12462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
12466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pImageOpaqueBinds = pImageOpaqueBinds_;
12468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
12472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageBindCount = imageBindCount_;
12474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
12478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pImageBinds = pImageBinds_;
12480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
12484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      signalSemaphoreCount = signalSemaphoreCount_;
12486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
12490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSignalSemaphores = pSignalSemaphores_;
12492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkBindSparseInfo&() const
12496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkBindSparseInfo*>(this);
12498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( BindSparseInfo const& rhs ) const
12501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
12503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
12504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
12505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pWaitSemaphores == rhs.pWaitSemaphores )
12506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bufferBindCount == rhs.bufferBindCount )
12507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pBufferBinds == rhs.pBufferBinds )
12508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
12509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
12510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageBindCount == rhs.imageBindCount )
12511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pImageBinds == rhs.pImageBinds )
12512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
12513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSignalSemaphores == rhs.pSignalSemaphores );
12514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( BindSparseInfo const& rhs ) const
12517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
12522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
12523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
12525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
12526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t waitSemaphoreCount;
12527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Semaphore* pWaitSemaphores;
12528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t bufferBindCount;
12529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SparseBufferMemoryBindInfo* pBufferBinds;
12530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t imageOpaqueBindCount;
12531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
12532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t imageBindCount;
12533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SparseImageMemoryBindInfo* pImageBinds;
12534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t signalSemaphoreCount;
12535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Semaphore* pSignalSemaphores;
12536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
12538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PipelineStageFlagBits
12540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
12542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
12543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
12544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
12545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
12546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
12547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
12548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
12549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
12550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
12551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
12552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
12553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
12554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
12555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHost = VK_PIPELINE_STAGE_HOST_BIT,
12556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
12557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
12558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
12561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
12563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return PipelineStageFlags( bit0 ) | bit1;
12565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
12566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CommandPoolCreateFlagBits
12568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
12570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
12571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
12574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
12576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return CommandPoolCreateFlags( bit0 ) | bit1;
12578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
12579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct CommandPoolCreateInfo
12581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
12583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eCommandPoolCreateInfo )
12584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
12585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
12586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueFamilyIndex( queueFamilyIndex_ )
12587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
12591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
12596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo& setSType( StructureType sType_ )
12602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
12604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo& setPNext( const void* pNext_ )
12608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
12610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
12614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
12616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
12620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueFamilyIndex = queueFamilyIndex_;
12622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkCommandPoolCreateInfo&() const
12626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
12628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( CommandPoolCreateInfo const& rhs ) const
12631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
12633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
12634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
12635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueFamilyIndex == rhs.queueFamilyIndex );
12636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( CommandPoolCreateInfo const& rhs ) const
12639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
12644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
12645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
12647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
12648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandPoolCreateFlags flags;
12649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueFamilyIndex;
12650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
12652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CommandPoolResetFlagBits
12654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
12656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
12659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
12661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return CommandPoolResetFlags( bit0 ) | bit1;
12663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
12664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CommandBufferResetFlagBits
12666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
12668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
12671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
12673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return CommandBufferResetFlags( bit0 ) | bit1;
12675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
12676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SampleCountFlagBits
12678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e1 = VK_SAMPLE_COUNT_1_BIT,
12680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e2 = VK_SAMPLE_COUNT_2_BIT,
12681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e4 = VK_SAMPLE_COUNT_4_BIT,
12682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e8 = VK_SAMPLE_COUNT_8_BIT,
12683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e16 = VK_SAMPLE_COUNT_16_BIT,
12684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e32 = VK_SAMPLE_COUNT_32_BIT,
12685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    e64 = VK_SAMPLE_COUNT_64_BIT
12686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
12689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
12691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SampleCountFlags( bit0 ) | bit1;
12693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
12694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageFormatProperties
12696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageFormatProperties&() const
12698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageFormatProperties*>(this);
12700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageFormatProperties const& rhs ) const
12703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( maxExtent == rhs.maxExtent )
12705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxMipLevels == rhs.maxMipLevels )
12706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxArrayLayers == rhs.maxArrayLayers )
12707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampleCounts == rhs.sampleCounts )
12708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxResourceSize == rhs.maxResourceSize );
12709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageFormatProperties const& rhs ) const
12712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D maxExtent;
12717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxMipLevels;
12718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxArrayLayers;
12719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags sampleCounts;
12720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize maxResourceSize;
12721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
12723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct ImageCreateInfo
12725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
12727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eImageCreateInfo )
12728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
12729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
12730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageType( imageType_ )
12731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , format( format_ )
12732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , extent( extent_ )
12733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , mipLevels( mipLevels_ )
12734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , arrayLayers( arrayLayers_ )
12735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , samples( samples_ )
12736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , tiling( tiling_ )
12737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , usage( usage_ )
12738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sharingMode( sharingMode_ )
12739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueFamilyIndexCount( queueFamilyIndexCount_ )
12740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pQueueFamilyIndices( pQueueFamilyIndices_ )
12741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , initialLayout( initialLayout_ )
12742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo( VkImageCreateInfo const & rhs )
12746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
12751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setSType( StructureType sType_ )
12757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
12759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setPNext( const void* pNext_ )
12763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
12765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
12769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
12771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setImageType( ImageType imageType_ )
12775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageType = imageType_;
12777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setFormat( Format format_ )
12781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      format = format_;
12783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setExtent( Extent3D extent_ )
12787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      extent = extent_;
12789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
12793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      mipLevels = mipLevels_;
12795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
12799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      arrayLayers = arrayLayers_;
12801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
12805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      samples = samples_;
12807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setTiling( ImageTiling tiling_ )
12811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      tiling = tiling_;
12813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
12817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      usage = usage_;
12819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
12823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sharingMode = sharingMode_;
12825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
12829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueFamilyIndexCount = queueFamilyIndexCount_;
12831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
12835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pQueueFamilyIndices = pQueueFamilyIndices_;
12837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
12841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      initialLayout = initialLayout_;
12843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkImageCreateInfo&() const
12847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkImageCreateInfo*>(this);
12849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( ImageCreateInfo const& rhs ) const
12852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
12854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
12855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
12856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageType == rhs.imageType )
12857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( format == rhs.format )
12858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( extent == rhs.extent )
12859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mipLevels == rhs.mipLevels )
12860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( arrayLayers == rhs.arrayLayers )
12861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( samples == rhs.samples )
12862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( tiling == rhs.tiling )
12863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( usage == rhs.usage )
12864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sharingMode == rhs.sharingMode )
12865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
12866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
12867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( initialLayout == rhs.initialLayout );
12868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( ImageCreateInfo const& rhs ) const
12871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
12876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
12877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
12879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
12880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageCreateFlags flags;
12881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageType imageType;
12882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format format;
12883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent3D extent;
12884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t mipLevels;
12885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t arrayLayers;
12886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlagBits samples;
12887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageTiling tiling;
12888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageUsageFlags usage;
12889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SharingMode sharingMode;
12890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueFamilyIndexCount;
12891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const uint32_t* pQueueFamilyIndices;
12892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout initialLayout;
12893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
12894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
12895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PipelineMultisampleStateCreateInfo
12897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
12898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
12899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::ePipelineMultisampleStateCreateInfo )
12900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
12901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
12902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , rasterizationSamples( rasterizationSamples_ )
12903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , sampleShadingEnable( sampleShadingEnable_ )
12904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , minSampleShading( minSampleShading_ )
12905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSampleMask( pSampleMask_ )
12906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , alphaToCoverageEnable( alphaToCoverageEnable_ )
12907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , alphaToOneEnable( alphaToOneEnable_ )
12908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
12912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
12917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setSType( StructureType sType_ )
12923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
12925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
12929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
12931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
12935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
12937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
12941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      rasterizationSamples = rasterizationSamples_;
12943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
12947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sampleShadingEnable = sampleShadingEnable_;
12949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
12953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      minSampleShading = minSampleShading_;
12955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
12959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSampleMask = pSampleMask_;
12961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
12965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      alphaToCoverageEnable = alphaToCoverageEnable_;
12967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
12971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      alphaToOneEnable = alphaToOneEnable_;
12973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
12974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPipelineMultisampleStateCreateInfo&() const
12977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
12979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
12982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
12984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
12985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
12986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( rasterizationSamples == rhs.rasterizationSamples )
12987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampleShadingEnable == rhs.sampleShadingEnable )
12988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minSampleShading == rhs.minSampleShading )
12989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSampleMask == rhs.pSampleMask )
12990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
12991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( alphaToOneEnable == rhs.alphaToOneEnable );
12992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
12995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
12996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
12997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
12998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
12999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
13000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
13001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
13003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
13004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineMultisampleStateCreateFlags flags;
13005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlagBits rasterizationSamples;
13006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 sampleShadingEnable;
13007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float minSampleShading;
13008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SampleMask* pSampleMask;
13009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 alphaToCoverageEnable;
13010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 alphaToOneEnable;
13011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
13013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct GraphicsPipelineCreateInfo
13015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
13017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eGraphicsPipelineCreateInfo )
13018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
13019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
13020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stageCount( stageCount_ )
13021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pStages( pStages_ )
13022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pVertexInputState( pVertexInputState_ )
13023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pInputAssemblyState( pInputAssemblyState_ )
13024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pTessellationState( pTessellationState_ )
13025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pViewportState( pViewportState_ )
13026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pRasterizationState( pRasterizationState_ )
13027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pMultisampleState( pMultisampleState_ )
13028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pDepthStencilState( pDepthStencilState_ )
13029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pColorBlendState( pColorBlendState_ )
13030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pDynamicState( pDynamicState_ )
13031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , layout( layout_ )
13032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , renderPass( renderPass_ )
13033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , subpass( subpass_ )
13034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , basePipelineHandle( basePipelineHandle_ )
13035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , basePipelineIndex( basePipelineIndex_ )
13036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
13040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
13042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
13045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
13047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setSType( StructureType sType_ )
13051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
13053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
13057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
13059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
13063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
13065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
13069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stageCount = stageCount_;
13071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
13075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pStages = pStages_;
13077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
13081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pVertexInputState = pVertexInputState_;
13083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
13087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pInputAssemblyState = pInputAssemblyState_;
13089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
13093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pTessellationState = pTessellationState_;
13095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
13099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pViewportState = pViewportState_;
13101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
13105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pRasterizationState = pRasterizationState_;
13107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
13111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pMultisampleState = pMultisampleState_;
13113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
13117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pDepthStencilState = pDepthStencilState_;
13119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
13123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pColorBlendState = pColorBlendState_;
13125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
13129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pDynamicState = pDynamicState_;
13131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
13135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      layout = layout_;
13137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
13141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      renderPass = renderPass_;
13143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
13147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      subpass = subpass_;
13149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
13153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      basePipelineHandle = basePipelineHandle_;
13155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
13159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      basePipelineIndex = basePipelineIndex_;
13161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkGraphicsPipelineCreateInfo&() const
13165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
13167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
13170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
13172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
13173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
13174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stageCount == rhs.stageCount )
13175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pStages == rhs.pStages )
13176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pVertexInputState == rhs.pVertexInputState )
13177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pInputAssemblyState == rhs.pInputAssemblyState )
13178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pTessellationState == rhs.pTessellationState )
13179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pViewportState == rhs.pViewportState )
13180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pRasterizationState == rhs.pRasterizationState )
13181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pMultisampleState == rhs.pMultisampleState )
13182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pDepthStencilState == rhs.pDepthStencilState )
13183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pColorBlendState == rhs.pColorBlendState )
13184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pDynamicState == rhs.pDynamicState )
13185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( layout == rhs.layout )
13186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( renderPass == rhs.renderPass )
13187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subpass == rhs.subpass )
13188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( basePipelineHandle == rhs.basePipelineHandle )
13189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( basePipelineIndex == rhs.basePipelineIndex );
13190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
13193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
13195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
13198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
13199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
13201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
13202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineCreateFlags flags;
13203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t stageCount;
13204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineShaderStageCreateInfo* pStages;
13205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineVertexInputStateCreateInfo* pVertexInputState;
13206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
13207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineTessellationStateCreateInfo* pTessellationState;
13208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineViewportStateCreateInfo* pViewportState;
13209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineRasterizationStateCreateInfo* pRasterizationState;
13210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineMultisampleStateCreateInfo* pMultisampleState;
13211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
13212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineColorBlendStateCreateInfo* pColorBlendState;
13213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineDynamicStateCreateInfo* pDynamicState;
13214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineLayout layout;
13215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPass renderPass;
13216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t subpass;
13217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Pipeline basePipelineHandle;
13218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t basePipelineIndex;
13219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
13221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PhysicalDeviceLimits
13223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPhysicalDeviceLimits&() const
13225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
13227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PhysicalDeviceLimits const& rhs ) const
13230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( maxImageDimension1D == rhs.maxImageDimension1D )
13232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageDimension2D == rhs.maxImageDimension2D )
13233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageDimension3D == rhs.maxImageDimension3D )
13234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
13235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
13236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
13237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
13238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
13239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
13240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
13241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
13242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( bufferImageGranularity == rhs.bufferImageGranularity )
13243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
13244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
13245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
13246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
13247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
13248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
13249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
13250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
13251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxPerStageResources == rhs.maxPerStageResources )
13252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
13253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
13254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
13255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
13256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
13257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
13258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
13259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
13260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
13261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
13262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
13263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
13264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
13265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
13266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
13267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
13268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
13269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
13270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
13271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
13272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
13273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
13274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
13275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
13276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
13277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
13278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
13279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
13280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
13281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
13282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
13283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
13284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
13285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
13286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
13287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
13288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
13289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
13290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
13291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
13292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
13293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxViewports == rhs.maxViewports )
13294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
13295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
13296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
13297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
13298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
13299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
13300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
13301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minTexelOffset == rhs.minTexelOffset )
13302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTexelOffset == rhs.maxTexelOffset )
13303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
13304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
13305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minInterpolationOffset == rhs.minInterpolationOffset )
13306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
13307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
13308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
13309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
13310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
13311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
13312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
13313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
13314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
13315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxColorAttachments == rhs.maxColorAttachments )
13316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
13317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
13318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
13319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
13320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
13321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
13322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
13323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( timestampPeriod == rhs.timestampPeriod )
13324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxClipDistances == rhs.maxClipDistances )
13325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxCullDistances == rhs.maxCullDistances )
13326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
13327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
13328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
13329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
13330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pointSizeGranularity == rhs.pointSizeGranularity )
13331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( lineWidthGranularity == rhs.lineWidthGranularity )
13332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( strictLines == rhs.strictLines )
13333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( standardSampleLocations == rhs.standardSampleLocations )
13334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
13335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
13336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
13337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PhysicalDeviceLimits const& rhs ) const
13340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
13342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageDimension1D;
13345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageDimension2D;
13346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageDimension3D;
13347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageDimensionCube;
13348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageArrayLayers;
13349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTexelBufferElements;
13350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxUniformBufferRange;
13351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxStorageBufferRange;
13352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPushConstantsSize;
13353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxMemoryAllocationCount;
13354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxSamplerAllocationCount;
13355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize bufferImageGranularity;
13356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize sparseAddressSpaceSize;
13357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxBoundDescriptorSets;
13358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageDescriptorSamplers;
13359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageDescriptorUniformBuffers;
13360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageDescriptorStorageBuffers;
13361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageDescriptorSampledImages;
13362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageDescriptorStorageImages;
13363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageDescriptorInputAttachments;
13364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxPerStageResources;
13365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetSamplers;
13366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetUniformBuffers;
13367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetUniformBuffersDynamic;
13368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetStorageBuffers;
13369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetStorageBuffersDynamic;
13370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetSampledImages;
13371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetStorageImages;
13372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDescriptorSetInputAttachments;
13373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxVertexInputAttributes;
13374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxVertexInputBindings;
13375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxVertexInputAttributeOffset;
13376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxVertexInputBindingStride;
13377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxVertexOutputComponents;
13378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationGenerationLevel;
13379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationPatchSize;
13380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationControlPerVertexInputComponents;
13381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationControlPerVertexOutputComponents;
13382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationControlPerPatchOutputComponents;
13383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationControlTotalOutputComponents;
13384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationEvaluationInputComponents;
13385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTessellationEvaluationOutputComponents;
13386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxGeometryShaderInvocations;
13387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxGeometryInputComponents;
13388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxGeometryOutputComponents;
13389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxGeometryOutputVertices;
13390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxGeometryTotalOutputComponents;
13391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFragmentInputComponents;
13392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFragmentOutputAttachments;
13393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFragmentDualSrcAttachments;
13394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFragmentCombinedOutputResources;
13395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxComputeSharedMemorySize;
13396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxComputeWorkGroupCount[3];
13397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxComputeWorkGroupInvocations;
13398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxComputeWorkGroupSize[3];
13399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t subPixelPrecisionBits;
13400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t subTexelPrecisionBits;
13401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t mipmapPrecisionBits;
13402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDrawIndexedIndexValue;
13403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxDrawIndirectCount;
13404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxSamplerLodBias;
13405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxSamplerAnisotropy;
13406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxViewports;
13407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxViewportDimensions[2];
13408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float viewportBoundsRange[2];
13409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t viewportSubPixelBits;
13410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    size_t minMemoryMapAlignment;
13411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize minTexelBufferOffsetAlignment;
13412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize minUniformBufferOffsetAlignment;
13413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize minStorageBufferOffsetAlignment;
13414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t minTexelOffset;
13415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTexelOffset;
13416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    int32_t minTexelGatherOffset;
13417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxTexelGatherOffset;
13418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float minInterpolationOffset;
13419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float maxInterpolationOffset;
13420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t subPixelInterpolationOffsetBits;
13421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFramebufferWidth;
13422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFramebufferHeight;
13423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxFramebufferLayers;
13424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags framebufferColorSampleCounts;
13425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags framebufferDepthSampleCounts;
13426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags framebufferStencilSampleCounts;
13427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags framebufferNoAttachmentsSampleCounts;
13428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxColorAttachments;
13429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags sampledImageColorSampleCounts;
13430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags sampledImageIntegerSampleCounts;
13431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags sampledImageDepthSampleCounts;
13432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags sampledImageStencilSampleCounts;
13433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlags storageImageSampleCounts;
13434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxSampleMaskWords;
13435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 timestampComputeAndGraphics;
13436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float timestampPeriod;
13437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxClipDistances;
13438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxCullDistances;
13439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxCombinedClipAndCullDistances;
13440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t discreteQueuePriorities;
13441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float pointSizeRange[2];
13442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float lineWidthRange[2];
13443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float pointSizeGranularity;
13444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float lineWidthGranularity;
13445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 strictLines;
13446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 standardSampleLocations;
13447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize optimalBufferCopyOffsetAlignment;
13448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize optimalBufferCopyRowPitchAlignment;
13449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize nonCoherentAtomSize;
13450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
13452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct PhysicalDeviceProperties
13454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkPhysicalDeviceProperties&() const
13456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
13458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( PhysicalDeviceProperties const& rhs ) const
13461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( apiVersion == rhs.apiVersion )
13463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( driverVersion == rhs.driverVersion )
13464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( vendorID == rhs.vendorID )
13465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( deviceID == rhs.deviceID )
13466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( deviceType == rhs.deviceType )
13467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
13468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
13469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( limits == rhs.limits )
13470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( sparseProperties == rhs.sparseProperties );
13471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( PhysicalDeviceProperties const& rhs ) const
13474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
13476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t apiVersion;
13479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t driverVersion;
13480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t vendorID;
13481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t deviceID;
13482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceType deviceType;
13483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
13484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint8_t pipelineCacheUUID[VK_UUID_SIZE];
13485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceLimits limits;
13486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceSparseProperties sparseProperties;
13487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
13489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class AttachmentDescriptionFlagBits
13491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
13493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
13496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
13498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return AttachmentDescriptionFlags( bit0 ) | bit1;
13500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
13501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct AttachmentDescription
13503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
13505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : flags( flags_ )
13506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , format( format_ )
13507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , samples( samples_ )
13508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , loadOp( loadOp_ )
13509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , storeOp( storeOp_ )
13510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stencilLoadOp( stencilLoadOp_ )
13511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , stencilStoreOp( stencilStoreOp_ )
13512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , initialLayout( initialLayout_ )
13513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , finalLayout( finalLayout_ )
13514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription( VkAttachmentDescription const & rhs )
13518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AttachmentDescription) );
13520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
13523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(AttachmentDescription) );
13525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
13529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
13531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setFormat( Format format_ )
13535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      format = format_;
13537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
13541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      samples = samples_;
13543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
13547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      loadOp = loadOp_;
13549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
13553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      storeOp = storeOp_;
13555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
13559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stencilLoadOp = stencilLoadOp_;
13561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
13565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      stencilStoreOp = stencilStoreOp_;
13567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
13571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      initialLayout = initialLayout_;
13573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
13577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      finalLayout = finalLayout_;
13579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkAttachmentDescription&() const
13583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkAttachmentDescription*>(this);
13585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( AttachmentDescription const& rhs ) const
13588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( flags == rhs.flags )
13590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( format == rhs.format )
13591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( samples == rhs.samples )
13592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( loadOp == rhs.loadOp )
13593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( storeOp == rhs.storeOp )
13594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stencilLoadOp == rhs.stencilLoadOp )
13595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( stencilStoreOp == rhs.stencilStoreOp )
13596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( initialLayout == rhs.initialLayout )
13597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( finalLayout == rhs.finalLayout );
13598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( AttachmentDescription const& rhs ) const
13601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
13603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentDescriptionFlags flags;
13606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format format;
13607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SampleCountFlagBits samples;
13608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentLoadOp loadOp;
13609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentStoreOp storeOp;
13610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentLoadOp stencilLoadOp;
13611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AttachmentStoreOp stencilStoreOp;
13612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout initialLayout;
13613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageLayout finalLayout;
13614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
13616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class StencilFaceFlagBits
13618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFront = VK_STENCIL_FACE_FRONT_BIT,
13620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBack = VK_STENCIL_FACE_BACK_BIT,
13621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
13622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
13625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
13627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return StencilFaceFlags( bit0 ) | bit1;
13629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
13630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DescriptorPoolCreateFlagBits
13632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
13634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
13637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
13639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DescriptorPoolCreateFlags( bit0 ) | bit1;
13641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
13642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DescriptorPoolCreateInfo
13644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
13646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDescriptorPoolCreateInfo )
13647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
13648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
13649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , maxSets( maxSets_ )
13650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , poolSizeCount( poolSizeCount_ )
13651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pPoolSizes( pPoolSizes_ )
13652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
13656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
13661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& setSType( StructureType sType_ )
13667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
13669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
13673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
13675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
13679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
13681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
13685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      maxSets = maxSets_;
13687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
13691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      poolSizeCount = poolSizeCount_;
13693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
13697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pPoolSizes = pPoolSizes_;
13699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDescriptorPoolCreateInfo&() const
13703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
13705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DescriptorPoolCreateInfo const& rhs ) const
13708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
13710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
13711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
13712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSets == rhs.maxSets )
13713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( poolSizeCount == rhs.poolSizeCount )
13714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pPoolSizes == rhs.pPoolSizes );
13715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
13718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
13720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
13723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
13724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
13726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
13727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DescriptorPoolCreateFlags flags;
13728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxSets;
13729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t poolSizeCount;
13730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const DescriptorPoolSize* pPoolSizes;
13731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
13733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DependencyFlagBits
13735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eByRegion = VK_DEPENDENCY_BY_REGION_BIT
13737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
13738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
13740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
13742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DependencyFlags( bit0 ) | bit1;
13744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
13745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class CommandBuffer
13747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
13748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
13749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBuffer()
13750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_commandBuffer(VK_NULL_HANDLE)
13751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
13752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBuffer(VkCommandBuffer commandBuffer)
13755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_commandBuffer(commandBuffer)
13756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
13757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CommandBuffer& operator=(VkCommandBuffer commandBuffer)
13759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_commandBuffer = commandBuffer;
13761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
13762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
13764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13765af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(CommandBuffer const &rhs) const
13766af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
13767af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_commandBuffer == rhs.m_commandBuffer;
13768af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
13769af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
13770af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(CommandBuffer const &rhs) const
13771af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
13772af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_commandBuffer != rhs.m_commandBuffer;
13773af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
13774af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
13775af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(CommandBuffer const &rhs) const
13776af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
13777af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_commandBuffer < rhs.m_commandBuffer;
13778af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
13779af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
13780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result begin( const CommandBufferBeginInfo* pBeginInfo ) const
13781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
13783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const
13787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
13789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::CommandBuffer::begin" );
13790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result end(  ) const
13795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type end() const
13802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::CommandBuffer::end" );
13805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result reset( CommandBufferResetFlags flags ) const
13810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const
13817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::CommandBuffer::reset" );
13820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
13838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
13840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
13844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
13846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
13850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
13852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
13856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
13858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setLineWidth( float lineWidth ) const
13863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setLineWidth( float lineWidth ) const
13870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setBlendConstants( const float blendConstants[4] ) const
13891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setBlendConstants( const float blendConstants[4] ) const
13898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
13960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
13962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
13966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
13968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
13986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
13988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
13989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
13990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
13992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
13993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_NO_EXCEPTIONS
13994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( buffers.size() == offsets.size() );
13995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#else
13996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      if ( buffers.size() != offsets.size() )
13997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
13998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
13999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      }
14000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif  // VULKAN_HPP_NO_EXCEPTIONS
14001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
14002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
14007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
14009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
14014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
14016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
14021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
14023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
14028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
14030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
14035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
14037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
14042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
14044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
14049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
14051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
14056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
14058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
14063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDispatch( m_commandBuffer, x, y, z );
14065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
14070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDispatch( m_commandBuffer, x, y, z );
14072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
14077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
14079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
14084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
14086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
14090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
14092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
14096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
14098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
14102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
14104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
14108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) );
14110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
14114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
14116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
14120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
14122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
14126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
14128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
14132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
14134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
14138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
14140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
14144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
14146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
14150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
14152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename T>
14156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
14157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
14159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
14164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
14166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
14171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
14173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
14177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
14179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
14183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
14185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
14189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
14191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
14195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
14197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
14201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
14203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
14207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
14209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
14213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
14215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
14219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) );
14221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setEvent( Event event, PipelineStageFlags stageMask ) const
14226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void setEvent( Event event, PipelineStageFlags stageMask ) const
14233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void resetEvent( Event event, PipelineStageFlags stageMask ) const
14240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void resetEvent( Event event, PipelineStageFlags stageMask ) const
14247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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
14253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
14255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) );
14261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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
14265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
14267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) );
14273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void endQuery( QueryPool queryPool, uint32_t query ) const
14292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void endQuery( QueryPool queryPool, uint32_t query ) const
14299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
14347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
14349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename T>
14353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
14354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
14356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
14360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
14366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void nextSubpass( SubpassContents contents ) const
14373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void nextSubpass( SubpassContents contents ) const
14380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void endRenderPass(  ) const
14387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdEndRenderPass( m_commandBuffer );
14389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void endRenderPass() const
14394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdEndRenderPass( m_commandBuffer );
14396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
14400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
14402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
14406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
14408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void debugMarkerBeginEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT debugMarkerBeginEXT() const
14418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DebugMarkerMarkerInfoEXT markerInfo;
14420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return markerInfo;
14422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void debugMarkerEndEXT(  ) const
14427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDebugMarkerEndEXT( m_commandBuffer );
14429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void debugMarkerEndEXT() const
14434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDebugMarkerEndEXT( m_commandBuffer );
14436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void debugMarkerInsertEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerMarkerInfoEXT debugMarkerInsertEXT() const
14446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DebugMarkerMarkerInfoEXT markerInfo;
14448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return markerInfo;
14450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14453af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14454af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14455af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14456af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14457af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14458af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14459af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14460af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14461af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14462af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14463af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14464af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14465af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14466af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14467af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14468af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14469af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14470af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14471af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14472af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14473af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14474af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14475af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14476af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14477af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14478af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14479af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14480af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
14483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
14484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkCommandBuffer() const
14485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_commandBuffer;
14487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
14490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_commandBuffer != VK_NULL_HANDLE;
14492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
14495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_commandBuffer == VK_NULL_HANDLE;
14497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
14500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkCommandBuffer m_commandBuffer;
14501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
14503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SubpassDependency
14505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
14507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : srcSubpass( srcSubpass_ )
14508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstSubpass( dstSubpass_ )
14509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcStageMask( srcStageMask_ )
14510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstStageMask( dstStageMask_ )
14511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , srcAccessMask( srcAccessMask_ )
14512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dstAccessMask( dstAccessMask_ )
14513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dependencyFlags( dependencyFlags_ )
14514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency( VkSubpassDependency const & rhs )
14518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SubpassDependency) );
14520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& operator=( VkSubpassDependency const & rhs )
14523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SubpassDependency) );
14525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
14529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcSubpass = srcSubpass_;
14531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
14535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstSubpass = dstSubpass_;
14537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
14541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcStageMask = srcStageMask_;
14543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
14547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstStageMask = dstStageMask_;
14549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
14553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      srcAccessMask = srcAccessMask_;
14555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
14559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dstAccessMask = dstAccessMask_;
14561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
14565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dependencyFlags = dependencyFlags_;
14567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSubpassDependency&() const
14571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSubpassDependency*>(this);
14573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SubpassDependency const& rhs ) const
14576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( srcSubpass == rhs.srcSubpass )
14578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstSubpass == rhs.dstSubpass )
14579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcStageMask == rhs.srcStageMask )
14580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstStageMask == rhs.dstStageMask )
14581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( srcAccessMask == rhs.srcAccessMask )
14582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dstAccessMask == rhs.dstAccessMask )
14583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dependencyFlags == rhs.dependencyFlags );
14584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SubpassDependency const& rhs ) const
14587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
14589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t srcSubpass;
14592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dstSubpass;
14593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineStageFlags srcStageMask;
14594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PipelineStageFlags dstStageMask;
14595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags srcAccessMask;
14596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    AccessFlags dstAccessMask;
14597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DependencyFlags dependencyFlags;
14598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
14600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct RenderPassCreateInfo
14602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
14604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eRenderPassCreateInfo )
14605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
14606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
14607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , attachmentCount( attachmentCount_ )
14608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pAttachments( pAttachments_ )
14609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , subpassCount( subpassCount_ )
14610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSubpasses( pSubpasses_ )
14611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , dependencyCount( dependencyCount_ )
14612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pDependencies( pDependencies_ )
14613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
14617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
14622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setSType( StructureType sType_ )
14628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
14630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setPNext( const void* pNext_ )
14634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
14636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
14640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
14642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
14646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      attachmentCount = attachmentCount_;
14648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
14652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pAttachments = pAttachments_;
14654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
14658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      subpassCount = subpassCount_;
14660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
14664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSubpasses = pSubpasses_;
14666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
14670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      dependencyCount = dependencyCount_;
14672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
14676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pDependencies = pDependencies_;
14678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkRenderPassCreateInfo&() const
14682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
14684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( RenderPassCreateInfo const& rhs ) const
14687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
14689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
14690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
14691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( attachmentCount == rhs.attachmentCount )
14692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pAttachments == rhs.pAttachments )
14693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( subpassCount == rhs.subpassCount )
14694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSubpasses == rhs.pSubpasses )
14695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( dependencyCount == rhs.dependencyCount )
14696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pDependencies == rhs.pDependencies );
14697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( RenderPassCreateInfo const& rhs ) const
14700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
14702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
14705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
14706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
14708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
14709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    RenderPassCreateFlags flags;
14710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t attachmentCount;
14711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const AttachmentDescription* pAttachments;
14712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t subpassCount;
14713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SubpassDescription* pSubpasses;
14714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t dependencyCount;
14715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const SubpassDependency* pDependencies;
14716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
14718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SubmitInfo
14720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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 )
14722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eSubmitInfo )
14723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
14724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , waitSemaphoreCount( waitSemaphoreCount_ )
14725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pWaitSemaphores( pWaitSemaphores_ )
14726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pWaitDstStageMask( pWaitDstStageMask_ )
14727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , commandBufferCount( commandBufferCount_ )
14728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pCommandBuffers( pCommandBuffers_ )
14729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , signalSemaphoreCount( signalSemaphoreCount_ )
14730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pSignalSemaphores( pSignalSemaphores_ )
14731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo( VkSubmitInfo const & rhs )
14735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SubmitInfo) );
14737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& operator=( VkSubmitInfo const & rhs )
14740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SubmitInfo) );
14742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setSType( StructureType sType_ )
14746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
14748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setPNext( const void* pNext_ )
14752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
14754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
14758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      waitSemaphoreCount = waitSemaphoreCount_;
14760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
14764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pWaitSemaphores = pWaitSemaphores_;
14766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
14770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pWaitDstStageMask = pWaitDstStageMask_;
14772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
14776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      commandBufferCount = commandBufferCount_;
14778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
14782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pCommandBuffers = pCommandBuffers_;
14784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
14788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      signalSemaphoreCount = signalSemaphoreCount_;
14790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
14794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pSignalSemaphores = pSignalSemaphores_;
14796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSubmitInfo&() const
14800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSubmitInfo*>(this);
14802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SubmitInfo const& rhs ) const
14805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
14807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
14808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
14809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pWaitSemaphores == rhs.pWaitSemaphores )
14810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
14811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( commandBufferCount == rhs.commandBufferCount )
14812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pCommandBuffers == rhs.pCommandBuffers )
14813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
14814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pSignalSemaphores == rhs.pSignalSemaphores );
14815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SubmitInfo const& rhs ) const
14818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
14820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
14823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
14824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
14826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
14827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t waitSemaphoreCount;
14828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Semaphore* pWaitSemaphores;
14829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const PipelineStageFlags* pWaitDstStageMask;
14830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t commandBufferCount;
14831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const CommandBuffer* pCommandBuffers;
14832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t signalSemaphoreCount;
14833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const Semaphore* pSignalSemaphores;
14834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
14836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Queue
14838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
14840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Queue()
14841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_queue(VK_NULL_HANDLE)
14842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
14843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Queue(VkQueue queue)
14846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_queue(queue)
14847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
14848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Queue& operator=(VkQueue queue)
14850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_queue = queue;
14852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
14853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
14855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14856af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Queue const &rhs) const
14857af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14858af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_queue == rhs.m_queue;
14859af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14860af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14861af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Queue const &rhs) const
14862af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14863af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_queue != rhs.m_queue;
14864af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14865af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14866af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Queue const &rhs) const
14867af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
14868af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_queue < rhs.m_queue;
14869af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
14870af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
14871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
14872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
14874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
14878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
14880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Queue::submit" );
14881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result waitIdle(  ) const
14886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type waitIdle() const
14893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Queue::waitIdle" );
14896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
14900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
14902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
14906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
14908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Queue::bindSparse" );
14909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result presentKHR( const PresentInfoKHR* pPresentInfo ) const
14913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
14915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result presentKHR( const PresentInfoKHR & presentInfo ) const
14919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
14921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
14922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
14927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
14928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkQueue() const
14929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_queue;
14931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
14934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_queue != VK_NULL_HANDLE;
14936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
14939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_queue == VK_NULL_HANDLE;
14941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
14944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkQueue m_queue;
14945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
14947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class PresentModeKHR
14949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
14951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
14952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFifo = VK_PRESENT_MODE_FIFO_KHR,
14953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR
14954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class ColorSpaceKHR
14957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
14959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SurfaceFormatKHR
14962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSurfaceFormatKHR&() const
14964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
14966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SurfaceFormatKHR const& rhs ) const
14969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( format == rhs.format )
14971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( colorSpace == rhs.colorSpace );
14972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SurfaceFormatKHR const& rhs ) const
14975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
14976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
14977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
14978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format format;
14980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ColorSpaceKHR colorSpace;
14981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
14983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DisplayPlaneAlphaFlagBitsKHR
14985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
14987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
14988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
14989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
14990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
14991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
14993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
14995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
14996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
14997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
14998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
14999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayPlaneCapabilitiesKHR
15000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayPlaneCapabilitiesKHR&() const
15002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
15004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
15007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( supportedAlpha == rhs.supportedAlpha )
15009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minSrcPosition == rhs.minSrcPosition )
15010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSrcPosition == rhs.maxSrcPosition )
15011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minSrcExtent == rhs.minSrcExtent )
15012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxSrcExtent == rhs.maxSrcExtent )
15013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minDstPosition == rhs.minDstPosition )
15014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDstPosition == rhs.maxDstPosition )
15015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minDstExtent == rhs.minDstExtent )
15016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxDstExtent == rhs.maxDstExtent );
15017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
15020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPlaneAlphaFlagsKHR supportedAlpha;
15025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D minSrcPosition;
15026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D maxSrcPosition;
15027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D minSrcExtent;
15028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D maxSrcExtent;
15029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D minDstPosition;
15030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Offset2D maxDstPosition;
15031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D minDstExtent;
15032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D maxDstExtent;
15033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
15035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class CompositeAlphaFlagBitsKHR
15037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
15039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
15040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
15041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
15042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
15045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
15047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return CompositeAlphaFlagsKHR( bit0 ) | bit1;
15049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
15050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class SurfaceTransformFlagBitsKHR
15052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
15054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
15055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
15056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
15057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
15058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
15059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
15060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
15061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
15062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
15065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
15067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return SurfaceTransformFlagsKHR( bit0 ) | bit1;
15069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
15070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplayPropertiesKHR
15072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplayPropertiesKHR&() const
15074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
15076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplayPropertiesKHR const& rhs ) const
15079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( display == rhs.display )
15081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( displayName == rhs.displayName )
15082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( physicalDimensions == rhs.physicalDimensions )
15083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( physicalResolution == rhs.physicalResolution )
15084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( supportedTransforms == rhs.supportedTransforms )
15085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( planeReorderPossible == rhs.planeReorderPossible )
15086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( persistentContent == rhs.persistentContent );
15087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplayPropertiesKHR const& rhs ) const
15090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayKHR display;
15095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* displayName;
15096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D physicalDimensions;
15097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D physicalResolution;
15098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceTransformFlagsKHR supportedTransforms;
15099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 planeReorderPossible;
15100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 persistentContent;
15101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
15103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DisplaySurfaceCreateInfoKHR
15105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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() )
15107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDisplaySurfaceCreateInfoKHR )
15108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
15109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
15110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , displayMode( displayMode_ )
15111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , planeIndex( planeIndex_ )
15112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , planeStackIndex( planeStackIndex_ )
15113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , transform( transform_ )
15114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , globalAlpha( globalAlpha_ )
15115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , alphaMode( alphaMode_ )
15116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageExtent( imageExtent_ )
15117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
15121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
15123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
15126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
15128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setSType( StructureType sType_ )
15132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
15134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
15138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
15140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
15144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
15146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
15150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      displayMode = displayMode_;
15152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
15156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      planeIndex = planeIndex_;
15158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
15162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      planeStackIndex = planeStackIndex_;
15164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
15168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      transform = transform_;
15170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
15174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      globalAlpha = globalAlpha_;
15176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
15180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      alphaMode = alphaMode_;
15182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageExtent = imageExtent_;
15188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDisplaySurfaceCreateInfoKHR&() const
15192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
15194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
15197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
15199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
15200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
15201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( displayMode == rhs.displayMode )
15202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( planeIndex == rhs.planeIndex )
15203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( planeStackIndex == rhs.planeStackIndex )
15204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( transform == rhs.transform )
15205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( globalAlpha == rhs.globalAlpha )
15206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( alphaMode == rhs.alphaMode )
15207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageExtent == rhs.imageExtent );
15208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
15211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
15216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
15217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
15219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
15220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplaySurfaceCreateFlagsKHR flags;
15221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayModeKHR displayMode;
15222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t planeIndex;
15223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t planeStackIndex;
15224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceTransformFlagBitsKHR transform;
15225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    float globalAlpha;
15226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DisplayPlaneAlphaFlagBitsKHR alphaMode;
15227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D imageExtent;
15228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
15230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SurfaceCapabilitiesKHR
15232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSurfaceCapabilitiesKHR&() const
15234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
15236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
15239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( minImageCount == rhs.minImageCount )
15241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageCount == rhs.maxImageCount )
15242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( currentExtent == rhs.currentExtent )
15243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minImageExtent == rhs.minImageExtent )
15244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageExtent == rhs.maxImageExtent )
15245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
15246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( supportedTransforms == rhs.supportedTransforms )
15247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( currentTransform == rhs.currentTransform )
15248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
15249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( supportedUsageFlags == rhs.supportedUsageFlags );
15250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
15253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t minImageCount;
15258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageCount;
15259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D currentExtent;
15260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D minImageExtent;
15261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D maxImageExtent;
15262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t maxImageArrayLayers;
15263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceTransformFlagsKHR supportedTransforms;
15264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceTransformFlagBitsKHR currentTransform;
15265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CompositeAlphaFlagsKHR supportedCompositeAlpha;
15266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageUsageFlags supportedUsageFlags;
15267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
15269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct SwapchainCreateInfoKHR
15271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    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() )
15273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eSwapchainCreateInfoKHR )
15274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
15275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
15276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , surface( surface_ )
15277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , minImageCount( minImageCount_ )
15278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageFormat( imageFormat_ )
15279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageColorSpace( imageColorSpace_ )
15280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageExtent( imageExtent_ )
15281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageArrayLayers( imageArrayLayers_ )
15282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageUsage( imageUsage_ )
15283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , imageSharingMode( imageSharingMode_ )
15284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , queueFamilyIndexCount( queueFamilyIndexCount_ )
15285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pQueueFamilyIndices( pQueueFamilyIndices_ )
15286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , preTransform( preTransform_ )
15287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , compositeAlpha( compositeAlpha_ )
15288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , presentMode( presentMode_ )
15289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , clipped( clipped_ )
15290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , oldSwapchain( oldSwapchain_ )
15291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
15295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
15300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setSType( StructureType sType_ )
15306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
15308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
15312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
15314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
15318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
15320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
15324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      surface = surface_;
15326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
15330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      minImageCount = minImageCount_;
15332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
15336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageFormat = imageFormat_;
15338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
15342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageColorSpace = imageColorSpace_;
15344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageExtent = imageExtent_;
15350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
15354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageArrayLayers = imageArrayLayers_;
15356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
15360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageUsage = imageUsage_;
15362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
15366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      imageSharingMode = imageSharingMode_;
15368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
15372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueFamilyIndexCount = queueFamilyIndexCount_;
15374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
15378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pQueueFamilyIndices = pQueueFamilyIndices_;
15380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
15384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      preTransform = preTransform_;
15386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
15390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      compositeAlpha = compositeAlpha_;
15392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
15396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      presentMode = presentMode_;
15398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
15402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      clipped = clipped_;
15404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
15408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      oldSwapchain = oldSwapchain_;
15410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkSwapchainCreateInfoKHR&() const
15414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
15416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( SwapchainCreateInfoKHR const& rhs ) const
15419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
15421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
15422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
15423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( surface == rhs.surface )
15424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( minImageCount == rhs.minImageCount )
15425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageFormat == rhs.imageFormat )
15426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageColorSpace == rhs.imageColorSpace )
15427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageExtent == rhs.imageExtent )
15428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageArrayLayers == rhs.imageArrayLayers )
15429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageUsage == rhs.imageUsage )
15430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( imageSharingMode == rhs.imageSharingMode )
15431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
15432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
15433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( preTransform == rhs.preTransform )
15434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( compositeAlpha == rhs.compositeAlpha )
15435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( presentMode == rhs.presentMode )
15436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( clipped == rhs.clipped )
15437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( oldSwapchain == rhs.oldSwapchain );
15438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
15441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
15446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
15447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
15449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
15450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainCreateFlagsKHR flags;
15451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceKHR surface;
15452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t minImageCount;
15453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Format imageFormat;
15454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ColorSpaceKHR imageColorSpace;
15455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D imageExtent;
15456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t imageArrayLayers;
15457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ImageUsageFlags imageUsage;
15458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SharingMode imageSharingMode;
15459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t queueFamilyIndexCount;
15460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const uint32_t* pQueueFamilyIndices;
15461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SurfaceTransformFlagBitsKHR preTransform;
15462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    CompositeAlphaFlagBitsKHR compositeAlpha;
15463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PresentModeKHR presentMode;
15464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 clipped;
15465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SwapchainKHR oldSwapchain;
15466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
15468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DebugReportFlagBitsEXT
15470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
15472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
15473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
15474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
15475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
15476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
15479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
15481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return DebugReportFlagsEXT( bit0 ) | bit1;
15483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
15484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DebugReportCallbackCreateInfoEXT
15486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
15488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDebugReportCallbackCreateInfoEXT )
15489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
15490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , flags( flags_ )
15491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pfnCallback( pfnCallback_ )
15492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pUserData( pUserData_ )
15493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
15497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
15502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT& setSType( StructureType sType_ )
15508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
15510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
15514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
15516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
15520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      flags = flags_;
15522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
15526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pfnCallback = pfnCallback_;
15528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
15532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pUserData = pUserData_;
15534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDebugReportCallbackCreateInfoEXT&() const
15538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
15540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
15543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
15545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
15546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( flags == rhs.flags )
15547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pfnCallback == rhs.pfnCallback )
15548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pUserData == rhs.pUserData );
15549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
15552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
15557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
15558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
15560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
15561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportFlagsEXT flags;
15562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkDebugReportCallbackEXT pfnCallback;
15563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void* pUserData;
15564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
15566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  enum class DebugReportObjectTypeEXT
15568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
15570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
15571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
15572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
15573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
15574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
15575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
15576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
15577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
15578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
15579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
15580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
15581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
15582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
15583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
15584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
15585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
15586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
15587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
15588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
15589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
15590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
15591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
15592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
15593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
15594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
15595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
15596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
15597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
15598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DebugMarkerObjectNameInfoEXT
15601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
15603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDebugMarkerObjectNameInfoEXT )
15604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
15605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , objectType( objectType_ )
15606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , object( object_ )
15607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pObjectName( pObjectName_ )
15608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
15612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
15617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT& setSType( StructureType sType_ )
15623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
15625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
15629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
15631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      objectType = objectType_;
15637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
15641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      object = object_;
15643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
15647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pObjectName = pObjectName_;
15649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDebugMarkerObjectNameInfoEXT&() const
15653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
15655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
15658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
15660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
15661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( objectType == rhs.objectType )
15662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( object == rhs.object )
15663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pObjectName == rhs.pObjectName );
15664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
15667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
15672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
15673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
15675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
15676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportObjectTypeEXT objectType;
15677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint64_t object;
15678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const char* pObjectName;
15679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
15681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  struct DebugMarkerObjectTagInfoEXT
15683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
15685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : sType( StructureType::eDebugMarkerObjectTagInfoEXT )
15686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pNext( nullptr )
15687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , objectType( objectType_ )
15688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , object( object_ )
15689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , tagName( tagName_ )
15690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , tagSize( tagSize_ )
15691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      , pTag( pTag_ )
15692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
15696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
15701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setSType( StructureType sType_ )
15707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sType = sType_;
15709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
15713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pNext = pNext_;
15715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      objectType = objectType_;
15721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
15725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      object = object_;
15727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
15731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      tagName = tagName_;
15733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
15737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      tagSize = tagSize_;
15739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
15743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      pTag = pTag_;
15745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator const VkDebugMarkerObjectTagInfoEXT&() const
15749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
15751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
15754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return ( sType == rhs.sType )
15756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pNext == rhs.pNext )
15757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( objectType == rhs.objectType )
15758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( object == rhs.object )
15759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( tagName == rhs.tagName )
15760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( tagSize == rhs.tagSize )
15761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          && ( pTag == rhs.pTag );
15762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
15765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return !operator==( rhs );
15767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
15770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    StructureType sType;
15771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
15773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pNext;
15774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DebugReportObjectTypeEXT objectType;
15775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint64_t object;
15776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint64_t tagName;
15777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    size_t tagSize;
15778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    const void* pTag;
15779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
15780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
15781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15782af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  enum class DebugReportErrorEXT
15783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
15784af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
15785af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
15786af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
15787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15788af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  enum class RasterizationOrderAMD
15789af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
15790af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
15791af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
15792af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
15793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15794af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct PipelineRasterizationStateRasterizationOrderAMD
15795af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
15796af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
15797af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
15798af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pNext( nullptr )
15799af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , rasterizationOrder( rasterizationOrder_ )
15800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15803af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15805af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15808af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15810af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15811af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
15812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15814af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
15815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15816af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      sType = sType_;
15817af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
15818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15820af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
15821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15822af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pNext = pNext_;
15823af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
15824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15826af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
15827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15828af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      rasterizationOrder = rasterizationOrder_;
15829af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
15830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15832af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
15833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15834af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
15835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15837af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15839af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( sType == rhs.sType )
15840af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pNext == rhs.pNext )
15841af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( rasterizationOrder == rhs.rasterizationOrder );
15842af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15843af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15844af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15845af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
15846af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
15847af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15848af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15849af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  private:
15850af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    StructureType sType;
15851af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15852af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  public:
15853af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const void* pNext;
15854af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    RasterizationOrderAMD rasterizationOrder;
15855af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
15856af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
15857af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15858af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  enum class ExternalMemoryHandleTypeFlagBitsNV
15859af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
15860af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,
15861af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,
15862af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,
15863af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
15864af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
15865af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15866af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  using ExternalMemoryHandleTypeFlagsNV = Flags<ExternalMemoryHandleTypeFlagBitsNV, VkExternalMemoryHandleTypeFlagsNV>;
15867af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15868af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  inline ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 )
15869af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
15870af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
15871af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  }
15872af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15873af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  class Device
15874af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
158752d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
158762d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
158772d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
15878af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
158792d7f1748089243275714910d1f2602898714ee5fMike Stroyan  enum class RasterizationOrderAMD
158802d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
158812d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
158822d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
158832d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
15884af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
158852d7f1748089243275714910d1f2602898714ee5fMike Stroyan  struct PipelineRasterizationStateRasterizationOrderAMD
158862d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
158872d7f1748089243275714910d1f2602898714ee5fMike Stroyan    PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
158882d7f1748089243275714910d1f2602898714ee5fMike Stroyan      : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
158892d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pNext( nullptr )
158902d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , rasterizationOrder( rasterizationOrder_ )
15891af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
15892af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15893af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15894af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Device const &rhs) const
15895af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
15896af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_device == rhs.m_device;
15897af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15898af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15899af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Device const &rhs) const
15900af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
15901af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_device != rhs.m_device;
15902af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15903af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15904af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Device const &rhs) const
15905af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
15906af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_device < rhs.m_device;
15907af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15908af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
15909af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    PFN_vkVoidFunction getProcAddr( const char* pName ) const
15910af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159112d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15912af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15913af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
159142d7f1748089243275714910d1f2602898714ee5fMike Stroyan    PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15915af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159162d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
159172d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
15918af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15919af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
159202d7f1748089243275714910d1f2602898714ee5fMike Stroyan    PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
15921af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159222d7f1748089243275714910d1f2602898714ee5fMike Stroyan      sType = sType_;
159232d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
15924af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15925af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
159262d7f1748089243275714910d1f2602898714ee5fMike Stroyan    PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
15927af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159282d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pNext = pNext_;
159292d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
15930af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15931af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
159322d7f1748089243275714910d1f2602898714ee5fMike Stroyan    PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
15933af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159342d7f1748089243275714910d1f2602898714ee5fMike Stroyan      rasterizationOrder = rasterizationOrder_;
159352d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
15936af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15937af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
159382d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
15939af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159402d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
15941af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
15942af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
159432d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15944af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
159452d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( sType == rhs.sType )
159462d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pNext == rhs.pNext )
159472d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( rasterizationOrder == rhs.rasterizationOrder );
15948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
159502d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
159522d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
15953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
159552d7f1748089243275714910d1f2602898714ee5fMike Stroyan  private:
159562d7f1748089243275714910d1f2602898714ee5fMike Stroyan    StructureType sType;
15957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
159582d7f1748089243275714910d1f2602898714ee5fMike Stroyan  public:
159592d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const void* pNext;
159602d7f1748089243275714910d1f2602898714ee5fMike Stroyan    RasterizationOrderAMD rasterizationOrder;
159612d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
159622d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
15963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
159642d7f1748089243275714910d1f2602898714ee5fMike Stroyan  enum class ExternalMemoryHandleTypeFlagBitsNV
159652d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
159662d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,
159672d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,
159682d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,
159692d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
159702d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
159712d7f1748089243275714910d1f2602898714ee5fMike Stroyan
159722d7f1748089243275714910d1f2602898714ee5fMike Stroyan  using ExternalMemoryHandleTypeFlagsNV = Flags<ExternalMemoryHandleTypeFlagBitsNV, VkExternalMemoryHandleTypeFlagsNV>;
159732d7f1748089243275714910d1f2602898714ee5fMike Stroyan
159742d7f1748089243275714910d1f2602898714ee5fMike Stroyan  inline ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 )
159752d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
159762d7f1748089243275714910d1f2602898714ee5fMike Stroyan    return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
159772d7f1748089243275714910d1f2602898714ee5fMike Stroyan  }
159782d7f1748089243275714910d1f2602898714ee5fMike Stroyan
159792d7f1748089243275714910d1f2602898714ee5fMike Stroyan  class Device
159802d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
15981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
15982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Device()
15983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_device(VK_NULL_HANDLE)
15984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
15985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
15987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Device(VkDevice device)
15988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_device(device)
15989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
15990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Device& operator=(VkDevice device)
15992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
15993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_device = device;
15994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
15995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
15996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
15997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
15998339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    bool operator==(Device const &rhs) const
15999339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    {
16000339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow      return m_device == rhs.m_device;
16001339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    }
16002339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow
16003339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    bool operator!=(Device const &rhs) const
16004339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    {
16005339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow      return m_device != rhs.m_device;
16006339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    }
16007339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow
16008339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    bool operator<(Device const &rhs) const
16009339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    {
16010339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow      return m_device < rhs.m_device;
16011339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    }
16012339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow
16013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkVoidFunction getProcAddr( const char* pName ) const
16014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetDeviceProcAddr( m_device, pName );
16016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkVoidFunction getProcAddr( const std::string & name ) const
16020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetDeviceProcAddr( m_device, name.c_str() );
16022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroy( const AllocationCallbacks* pAllocator ) const
16026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
16032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
16038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
16040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
16044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Queue queue;
16046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
16047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return queue;
16048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result waitIdle(  ) const
16053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
16055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type waitIdle() const
16060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
16062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::waitIdle" );
16063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
16067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
16069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DeviceMemory memory;
16075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, memory, "vk::Device::allocateMemory" );
16077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
16081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const
16087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
16094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
16096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const
16101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      void* pData;
16103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
16104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pData, "vk::Device::mapMemory" );
16105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void unmapMemory( DeviceMemory memory ) const
16110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
16112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void unmapMemory( DeviceMemory memory ) const
16117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
16119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
16123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
16125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
16129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
16131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::flushMappedMemoryRanges" );
16132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
16136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
16138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
16142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
16144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::invalidateMappedMemoryRanges" );
16145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
16149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
16151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    DeviceSize getMemoryCommitment( DeviceMemory memory ) const
16155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DeviceSize committedMemoryInBytes;
16157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
16158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return committedMemoryInBytes;
16159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
16163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
16165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const
16169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      MemoryRequirements memoryRequirements;
16171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
16172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return memoryRequirements;
16173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
16178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
16185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::bindBufferMemory" );
16188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
16192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
16194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    MemoryRequirements getImageMemoryRequirements( Image image ) const
16198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      MemoryRequirements memoryRequirements;
16200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
16201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return memoryRequirements;
16202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
16207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
16214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::bindImageMemory" );
16217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
16221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
16223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
16227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const
16228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
16230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t sparseMemoryRequirementCount;
16231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
16232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
16233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
16234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return sparseMemoryRequirements;
16235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
16239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
16241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Fence fence;
16247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, fence, "vk::Device::createFence" );
16249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
16253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const
16259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result resetFences( uint32_t fenceCount, const Fence* pFences ) const
16265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
16267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const
16271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
16273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::resetFences" );
16274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getFenceStatus( Fence fence ) const
16279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
16281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getFenceStatus( Fence fence ) const
16286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
16288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
16289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
16293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
16295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
16299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
16301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
16302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
16306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
16308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Semaphore semaphore;
16314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, semaphore, "vk::Device::createSemaphore" );
16316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
16320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const
16326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
16332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
16334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Event event;
16340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, event, "vk::Device::createEvent" );
16342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
16346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const
16352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getEventStatus( Event event ) const
16359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getEventStatus( Event event ) const
16366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
16369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result setEvent( Event event ) const
16374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type setEvent( Event event ) const
16381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::setEvent" );
16384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result resetEvent( Event event ) const
16389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type resetEvent( Event event ) const
16396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::resetEvent" );
16399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
16403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
16405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      QueryPool queryPool;
16411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, queryPool, "vk::Device::createQueryPool" );
16413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
16417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
16429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
16431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename T>
16435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
16436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
16439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
16443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
16445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Buffer buffer;
16451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, buffer, "vk::Device::createBuffer" );
16453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
16457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
16469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
16471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      BufferView view;
16477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, view, "vk::Device::createBufferView" );
16479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
16483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
16495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
16497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Image image;
16503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, image, "vk::Device::createImage" );
16505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
16509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const
16515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
16521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
16523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
16527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SubresourceLayout layout;
16529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
16530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return layout;
16531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
16535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
16537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ImageView view;
16543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, view, "vk::Device::createImageView" );
16545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
16549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
16561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
16563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ShaderModule shaderModule;
16569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, shaderModule, "vk::Device::createShaderModule" );
16571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
16575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const
16581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
16587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
16589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      PipelineCache pipelineCache;
16595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pipelineCache, "vk::Device::createPipelineCache" );
16597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
16601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const
16607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
16613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
16615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<uint8_t>>
16619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const
16620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<uint8_t,Allocator> data;
16622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      size_t dataSize;
16623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
16624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
16625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
16626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
16627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && dataSize )
16628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
16629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          data.resize( dataSize );
16630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
16631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
16632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
16633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( dataSize <= data.size() );
16634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      data.resize( dataSize );
16635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, data, "vk::Device::getPipelineCacheData" );
16636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
16640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
16642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
16646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
16648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::mergePipelineCaches" );
16649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<Pipeline>>
16659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) ) );
16663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pipelines, "vk::Device::createGraphicsPipelines" );
16664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Pipeline pipeline;
16669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pipeline, "vk::Device::createGraphicsPipeline" );
16671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<Pipeline>>
16681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) ) );
16685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pipelines, "vk::Device::createComputePipelines" );
16686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Pipeline pipeline;
16691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pipeline, "vk::Device::createComputePipeline" );
16693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
16697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const
16703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
16709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
16711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      PipelineLayout pipelineLayout;
16717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, pipelineLayout, "vk::Device::createPipelineLayout" );
16719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
16723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
16735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
16737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Sampler sampler;
16743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, sampler, "vk::Device::createSampler" );
16745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
16749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const
16755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
16761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
16763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DescriptorSetLayout setLayout;
16769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, setLayout, "vk::Device::createDescriptorSetLayout" );
16771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
16775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
16787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
16789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DescriptorPool descriptorPool;
16795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, descriptorPool, "vk::Device::createDescriptorPool" );
16797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
16801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
16814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const
16821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::resetDescriptorPool" );
16824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
16828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
16830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<DescriptorSet>>
16834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
16835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
16837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
16838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, descriptorSets, "vk::Device::allocateDescriptorSets" );
16839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
16843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
16845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
16849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
16851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::freeDescriptorSets" );
16852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
16856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
16858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
16862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
16864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
16868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
16870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Framebuffer framebuffer;
16876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, framebuffer, "vk::Device::createFramebuffer" );
16878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
16882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
16894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
16896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      RenderPass renderPass;
16902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, renderPass, "vk::Device::createRenderPass" );
16904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
16908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const
16914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
16920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
16922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Extent2D getRenderAreaGranularity( RenderPass renderPass ) const
16926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Extent2D granularity;
16928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
16929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return granularity;
16930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
16934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
16936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      CommandPool commandPool;
16942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
16943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, commandPool, "vk::Device::createCommandPool" );
16944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
16948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, "vk::Device::resetCommandPool" );
16971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
16975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
16977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<CommandBuffer>>
16981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
16982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
16984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
16985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, commandBuffers, "vk::Device::allocateCommandBuffers" );
16986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
16990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
16992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
16994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
16996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
16997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
16998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
16999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
17002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
17004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<SwapchainKHR>>
17008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
17009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
17011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) ) );
17012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, swapchains, "vk::Device::createSharedSwapchainsKHR" );
17013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SwapchainKHR swapchain;
17018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
17019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, swapchain, "vk::Device::createSharedSwapchainKHR" );
17020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
17024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
17026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SwapchainKHR swapchain;
17032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
17033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, swapchain, "vk::Device::createSwapchainKHR" );
17034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
17038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const
17044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
17050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
17052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<Image>>
17056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const
17057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<Image,Allocator> swapchainImages;
17059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t swapchainImageCount;
17060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
17061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
17062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
17063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
17064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && swapchainImageCount )
17065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
17066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          swapchainImages.resize( swapchainImageCount );
17067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
17068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
17069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
17070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( swapchainImageCount <= swapchainImages.size() );
17071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      swapchainImages.resize( swapchainImageCount );
17072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, swapchainImages, "vk::Device::getSwapchainImagesKHR" );
17073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
17077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
17079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
17083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t imageIndex;
17085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
17086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, imageIndex, "vk::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
17087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result debugMarkerSetObjectNameEXT( DebugMarkerObjectNameInfoEXT* pNameInfo ) const
17091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
17093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DebugMarkerObjectNameInfoEXT>::type debugMarkerSetObjectNameEXT() const
17097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DebugMarkerObjectNameInfoEXT nameInfo;
17099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
17100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, nameInfo, "vk::Device::debugMarkerSetObjectNameEXT" );
17101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result debugMarkerSetObjectTagEXT( DebugMarkerObjectTagInfoEXT* pTagInfo ) const
17105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
17107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DebugMarkerObjectTagInfoEXT>::type debugMarkerSetObjectTagEXT() const
17111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DebugMarkerObjectTagInfoEXT tagInfo;
17113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
17114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, tagInfo, "vk::Device::debugMarkerSetObjectTagEXT" );
17115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
171189696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
171199696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    Result getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) const
171209696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    {
171219696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      return static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), pHandle ) );
171229696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    }
171239696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
171249696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow
171259696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
171269696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
171279696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    ResultValueType<HANDLE>::type getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType ) const
171289696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    {
171299696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      HANDLE handle;
171309696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      Result result = static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), &handle ) );
171319696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      return createResultValue( result, handle, "vk::Device::getMemoryWin32HandleNV" );
171329696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    }
171339696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
171349696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
171359696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow
17136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
17138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
17139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkDevice() const
17140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_device;
17142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
17145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_device != VK_NULL_HANDLE;
17147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
17150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_device == VK_NULL_HANDLE;
17152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
17155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkDevice m_device;
17156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
17157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
17158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
171599696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow  struct ExternalMemoryImageCreateInfoNV
17160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
171619696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    ExternalMemoryImageCreateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
171629696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      : sType( StructureType::eExternalMemoryImageCreateInfoNV )
171639696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      , pNext( nullptr )
171649696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      , handleTypes( handleTypes_ )
17165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
171689696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs )
17169339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    {
171709696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow      memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17171339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow    }
17172339ffcd8c81b8df33a98bd674789fe588761ec4aLenny Komow
171739696299c6135ceb92285b4692d3f01e2de7fa983Lenny Komow    ExternalMemoryImageCreateInfoNV& operator=( VkExternalMemoryImageCreateInfoNV const & rhs )
171742d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
171752d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
171762d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
171772d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
171782d7f1748089243275714910d1f2602898714ee5fMike Stroyan
171792d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryImageCreateInfoNV& setSType( StructureType sType_ )
171802d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
171812d7f1748089243275714910d1f2602898714ee5fMike Stroyan      sType = sType_;
171822d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
171832d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
171842d7f1748089243275714910d1f2602898714ee5fMike Stroyan
171852d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryImageCreateInfoNV& setPNext( const void* pNext_ )
171862d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
171872d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pNext = pNext_;
171882d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
171892d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
171902d7f1748089243275714910d1f2602898714ee5fMike Stroyan
171912d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryImageCreateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
171922d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
171932d7f1748089243275714910d1f2602898714ee5fMike Stroyan      handleTypes = handleTypes_;
171942d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
171952d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
171962d7f1748089243275714910d1f2602898714ee5fMike Stroyan
171972d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkExternalMemoryImageCreateInfoNV&() const
171982d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
171992d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(this);
172002d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172012d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172022d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( ExternalMemoryImageCreateInfoNV const& rhs ) const
172032d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172042d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( sType == rhs.sType )
172052d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pNext == rhs.pNext )
172062d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( handleTypes == rhs.handleTypes );
172072d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172082d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172092d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( ExternalMemoryImageCreateInfoNV const& rhs ) const
172102d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172112d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
172122d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172132d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172142d7f1748089243275714910d1f2602898714ee5fMike Stroyan  private:
172152d7f1748089243275714910d1f2602898714ee5fMike Stroyan    StructureType sType;
172162d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172172d7f1748089243275714910d1f2602898714ee5fMike Stroyan  public:
172182d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const void* pNext;
172192d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryHandleTypeFlagsNV handleTypes;
172202d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
172212d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), "struct and wrapper have different size!" );
172222d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172232d7f1748089243275714910d1f2602898714ee5fMike Stroyan  struct ExportMemoryAllocateInfoNV
172242d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
172252d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryAllocateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
172262d7f1748089243275714910d1f2602898714ee5fMike Stroyan      : sType( StructureType::eExportMemoryAllocateInfoNV )
172272d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pNext( nullptr )
172282d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , handleTypes( handleTypes_ )
172292d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172302d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172312d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172322d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs )
172332d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172342d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
172352d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172362d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172372d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryAllocateInfoNV& operator=( VkExportMemoryAllocateInfoNV const & rhs )
172382d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172392d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
172402d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
172412d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172422d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172432d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryAllocateInfoNV& setSType( StructureType sType_ )
172442d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172452d7f1748089243275714910d1f2602898714ee5fMike Stroyan      sType = sType_;
172462d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
172472d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172482d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172492d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryAllocateInfoNV& setPNext( const void* pNext_ )
172502d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172512d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pNext = pNext_;
172522d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
172532d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172542d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172552d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExportMemoryAllocateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
172562d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172572d7f1748089243275714910d1f2602898714ee5fMike Stroyan      handleTypes = handleTypes_;
172582d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
172592d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172602d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172612d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkExportMemoryAllocateInfoNV&() const
172622d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172632d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(this);
172642d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172652d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172662d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( ExportMemoryAllocateInfoNV const& rhs ) const
172672d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172682d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( sType == rhs.sType )
172692d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pNext == rhs.pNext )
172702d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( handleTypes == rhs.handleTypes );
172712d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172722d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172732d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( ExportMemoryAllocateInfoNV const& rhs ) const
172742d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
172752d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
172762d7f1748089243275714910d1f2602898714ee5fMike Stroyan    }
172772d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172782d7f1748089243275714910d1f2602898714ee5fMike Stroyan  private:
172792d7f1748089243275714910d1f2602898714ee5fMike Stroyan    StructureType sType;
172802d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172812d7f1748089243275714910d1f2602898714ee5fMike Stroyan  public:
172822d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const void* pNext;
172832d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryHandleTypeFlagsNV handleTypes;
172842d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
172852d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
172862d7f1748089243275714910d1f2602898714ee5fMike Stroyan
172872d7f1748089243275714910d1f2602898714ee5fMike Stroyan#ifdef VK_USE_PLATFORM_WIN32_KHR
172882d7f1748089243275714910d1f2602898714ee5fMike Stroyan  struct ImportMemoryWin32HandleInfoNV
172892d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
172902d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV( ExternalMemoryHandleTypeFlagsNV handleType_ = ExternalMemoryHandleTypeFlagsNV(), HANDLE handle_ = 0 )
172912d7f1748089243275714910d1f2602898714ee5fMike Stroyan      : sType( StructureType::eImportMemoryWin32HandleInfoNV )
172922d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , pNext( nullptr )
172932d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , handleType( handleType_ )
172942d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , handle( handle_ )
172952d7f1748089243275714910d1f2602898714ee5fMike Stroyan    {
17296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
172982d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs )
17299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173002d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173032d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV& operator=( VkImportMemoryWin32HandleInfoNV const & rhs )
17304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173052d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
173062d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173092d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
17310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173112d7f1748089243275714910d1f2602898714ee5fMike Stroyan      sType = sType_;
173122d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173152d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
17316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173172d7f1748089243275714910d1f2602898714ee5fMike Stroyan      pNext = pNext_;
173182d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173212d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV& setHandleType( ExternalMemoryHandleTypeFlagsNV handleType_ )
17322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173232d7f1748089243275714910d1f2602898714ee5fMike Stroyan      handleType = handleType_;
173242d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173272d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImportMemoryWin32HandleInfoNV& setHandle( HANDLE handle_ )
17328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173292d7f1748089243275714910d1f2602898714ee5fMike Stroyan      handle = handle_;
173302d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173332d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkImportMemoryWin32HandleInfoNV&() const
17334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173352d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(this);
17336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173382d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( ImportMemoryWin32HandleInfoNV const& rhs ) const
17339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173402d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( sType == rhs.sType )
173412d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( pNext == rhs.pNext )
173422d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( handleType == rhs.handleType )
173432d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( handle == rhs.handle );
17344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173462d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( ImportMemoryWin32HandleInfoNV const& rhs ) const
17347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173482d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
17349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173512d7f1748089243275714910d1f2602898714ee5fMike Stroyan  private:
173522d7f1748089243275714910d1f2602898714ee5fMike Stroyan    StructureType sType;
17353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173542d7f1748089243275714910d1f2602898714ee5fMike Stroyan  public:
173552d7f1748089243275714910d1f2602898714ee5fMike Stroyan    const void* pNext;
173562d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryHandleTypeFlagsNV handleType;
173572d7f1748089243275714910d1f2602898714ee5fMike Stroyan    HANDLE handle;
173582d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
173592d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
173602d7f1748089243275714910d1f2602898714ee5fMike Stroyan#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173622d7f1748089243275714910d1f2602898714ee5fMike Stroyan  enum class ExternalMemoryFeatureFlagBitsNV
173632d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
173642d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,
173652d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,
173662d7f1748089243275714910d1f2602898714ee5fMike Stroyan    eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
173672d7f1748089243275714910d1f2602898714ee5fMike Stroyan  };
173682d7f1748089243275714910d1f2602898714ee5fMike Stroyan
173692d7f1748089243275714910d1f2602898714ee5fMike Stroyan  using ExternalMemoryFeatureFlagsNV = Flags<ExternalMemoryFeatureFlagBitsNV, VkExternalMemoryFeatureFlagsNV>;
173702d7f1748089243275714910d1f2602898714ee5fMike Stroyan
173712d7f1748089243275714910d1f2602898714ee5fMike Stroyan  inline ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 )
173722d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
173732d7f1748089243275714910d1f2602898714ee5fMike Stroyan    return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
173742d7f1748089243275714910d1f2602898714ee5fMike Stroyan  }
173752d7f1748089243275714910d1f2602898714ee5fMike Stroyan
173762d7f1748089243275714910d1f2602898714ee5fMike Stroyan  struct ExternalImageFormatPropertiesNV
173772d7f1748089243275714910d1f2602898714ee5fMike Stroyan  {
173782d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV( ImageFormatProperties imageFormatProperties_ = ImageFormatProperties(), ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = ExternalMemoryFeatureFlagsNV(), ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = ExternalMemoryHandleTypeFlagsNV(), ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
173792d7f1748089243275714910d1f2602898714ee5fMike Stroyan      : imageFormatProperties( imageFormatProperties_ )
173802d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , externalMemoryFeatures( externalMemoryFeatures_ )
173812d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ )
173822d7f1748089243275714910d1f2602898714ee5fMike Stroyan      , compatibleHandleTypes( compatibleHandleTypes_ )
17383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173862d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs )
17387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173882d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173912d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV& operator=( VkExternalImageFormatPropertiesNV const & rhs )
17392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173932d7f1748089243275714910d1f2602898714ee5fMike Stroyan      memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
173942d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
173972d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV& setImageFormatProperties( ImageFormatProperties imageFormatProperties_ )
17398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
173992d7f1748089243275714910d1f2602898714ee5fMike Stroyan      imageFormatProperties = imageFormatProperties_;
174002d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
174032d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV& setExternalMemoryFeatures( ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ )
17404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
174052d7f1748089243275714910d1f2602898714ee5fMike Stroyan      externalMemoryFeatures = externalMemoryFeatures_;
174062d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
174092d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV& setExportFromImportedHandleTypes( ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ )
17410af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
174112d7f1748089243275714910d1f2602898714ee5fMike Stroyan      exportFromImportedHandleTypes = exportFromImportedHandleTypes_;
174122d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17413af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17414af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
174152d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalImageFormatPropertiesNV& setCompatibleHandleTypes( ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ )
17416af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
174172d7f1748089243275714910d1f2602898714ee5fMike Stroyan      compatibleHandleTypes = compatibleHandleTypes_;
174182d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *this;
17419af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17420af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
174212d7f1748089243275714910d1f2602898714ee5fMike Stroyan    operator const VkExternalImageFormatPropertiesNV&() const
17422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
174232d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return *reinterpret_cast<const VkExternalImageFormatPropertiesNV*>(this);
17424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
174262d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator==( ExternalImageFormatPropertiesNV const& rhs ) const
17427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
174282d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return ( imageFormatProperties == rhs.imageFormatProperties )
174292d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( externalMemoryFeatures == rhs.externalMemoryFeatures )
174302d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
174312d7f1748089243275714910d1f2602898714ee5fMike Stroyan          && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
17432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
174342d7f1748089243275714910d1f2602898714ee5fMike Stroyan    bool operator!=( ExternalImageFormatPropertiesNV const& rhs ) const
17435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
174362d7f1748089243275714910d1f2602898714ee5fMike Stroyan      return !operator==( rhs );
17437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
174392d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ImageFormatProperties imageFormatProperties;
174402d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryFeatureFlagsNV externalMemoryFeatures;
174412d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
174422d7f1748089243275714910d1f2602898714ee5fMike Stroyan    ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
17443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
174442d7f1748089243275714910d1f2602898714ee5fMike Stroyan  static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), "struct and wrapper have different size!" );
17445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17446af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct ExternalMemoryImageCreateInfoNV
17447af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
17448af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryImageCreateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17449af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::eExternalMemoryImageCreateInfoNV )
17450af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pNext( nullptr )
17451af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , handleTypes( handleTypes_ )
17452af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17453af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17454af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17455af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs )
17456af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17457af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17458af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17459af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17460af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryImageCreateInfoNV& operator=( VkExternalMemoryImageCreateInfoNV const & rhs )
17461af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17462af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17463af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17464af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17465af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17466af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryImageCreateInfoNV& setSType( StructureType sType_ )
17467af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17468af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      sType = sType_;
17469af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17470af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17471af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17472af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryImageCreateInfoNV& setPNext( const void* pNext_ )
17473af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17474af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pNext = pNext_;
17475af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17476af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17477af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17478af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryImageCreateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
17479af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17480af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      handleTypes = handleTypes_;
17481af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17482af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17483af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17484af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkExternalMemoryImageCreateInfoNV&() const
17485af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17486af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(this);
17487af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17488af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17489af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( ExternalMemoryImageCreateInfoNV const& rhs ) const
17490af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17491af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( sType == rhs.sType )
17492af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pNext == rhs.pNext )
17493af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( handleTypes == rhs.handleTypes );
17494af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17495af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17496af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( ExternalMemoryImageCreateInfoNV const& rhs ) const
17497af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17498af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
17499af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17500af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17501af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  private:
17502af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    StructureType sType;
17503af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17504af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  public:
17505af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const void* pNext;
17506af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryHandleTypeFlagsNV handleTypes;
17507af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
17508af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), "struct and wrapper have different size!" );
17509af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17510af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct ExportMemoryAllocateInfoNV
17511af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
17512af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryAllocateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17513af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::eExportMemoryAllocateInfoNV )
17514af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pNext( nullptr )
17515af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , handleTypes( handleTypes_ )
17516af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17517af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17518af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17519af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs )
17520af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17521af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
17522af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17523af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17524af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryAllocateInfoNV& operator=( VkExportMemoryAllocateInfoNV const & rhs )
17525af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17526af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
17527af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17528af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17529af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17530af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryAllocateInfoNV& setSType( StructureType sType_ )
17531af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17532af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      sType = sType_;
17533af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17534af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17535af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17536af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryAllocateInfoNV& setPNext( const void* pNext_ )
17537af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17538af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pNext = pNext_;
17539af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17540af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17541af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17542af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExportMemoryAllocateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
17543af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17544af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      handleTypes = handleTypes_;
17545af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17546af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17547af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17548af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkExportMemoryAllocateInfoNV&() const
17549af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17550af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(this);
17551af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17552af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17553af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( ExportMemoryAllocateInfoNV const& rhs ) const
17554af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17555af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( sType == rhs.sType )
17556af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pNext == rhs.pNext )
17557af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( handleTypes == rhs.handleTypes );
17558af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17559af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17560af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( ExportMemoryAllocateInfoNV const& rhs ) const
17561af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17562af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
17563af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17564af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17565af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  private:
17566af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    StructureType sType;
17567af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17568af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  public:
17569af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const void* pNext;
17570af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryHandleTypeFlagsNV handleTypes;
17571af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
17572af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
17573af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17574af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifdef VK_USE_PLATFORM_WIN32_KHR
17575af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct ImportMemoryWin32HandleInfoNV
17576af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
17577af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV( ExternalMemoryHandleTypeFlagsNV handleType_ = ExternalMemoryHandleTypeFlagsNV(), HANDLE handle_ = 0 )
17578af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : sType( StructureType::eImportMemoryWin32HandleInfoNV )
17579af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , pNext( nullptr )
17580af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , handleType( handleType_ )
17581af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , handle( handle_ )
17582af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17583af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17584af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17585af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs )
17586af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17587af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17588af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17589af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17590af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV& operator=( VkImportMemoryWin32HandleInfoNV const & rhs )
17591af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17592af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17593af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17594af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17595af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17596af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
17597af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17598af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      sType = sType_;
17599af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17600af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17601af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17602af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
17603af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17604af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      pNext = pNext_;
17605af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17606af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17607af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17608af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV& setHandleType( ExternalMemoryHandleTypeFlagsNV handleType_ )
17609af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17610af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      handleType = handleType_;
17611af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17612af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17613af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17614af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImportMemoryWin32HandleInfoNV& setHandle( HANDLE handle_ )
17615af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17616af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      handle = handle_;
17617af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17618af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17619af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17620af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkImportMemoryWin32HandleInfoNV&() const
17621af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17622af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(this);
17623af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17624af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17625af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( ImportMemoryWin32HandleInfoNV const& rhs ) const
17626af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17627af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( sType == rhs.sType )
17628af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( pNext == rhs.pNext )
17629af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( handleType == rhs.handleType )
17630af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( handle == rhs.handle );
17631af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17632af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17633af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( ImportMemoryWin32HandleInfoNV const& rhs ) const
17634af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17635af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
17636af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17637af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17638af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  private:
17639af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    StructureType sType;
17640af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17641af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  public:
17642af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    const void* pNext;
17643af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryHandleTypeFlagsNV handleType;
17644af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    HANDLE handle;
17645af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
17646af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
17647af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17648af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17649af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  enum class ExternalMemoryFeatureFlagBitsNV
17650af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
17651af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,
17652af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,
17653af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
17654af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
17655af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17656af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  using ExternalMemoryFeatureFlagsNV = Flags<ExternalMemoryFeatureFlagBitsNV, VkExternalMemoryFeatureFlagsNV>;
17657af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17658af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  inline ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 )
17659af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
17660af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
17661af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  }
17662af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17663af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  struct ExternalImageFormatPropertiesNV
17664af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
17665af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV( ImageFormatProperties imageFormatProperties_ = ImageFormatProperties(), ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = ExternalMemoryFeatureFlagsNV(), ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = ExternalMemoryHandleTypeFlagsNV(), ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17666af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      : imageFormatProperties( imageFormatProperties_ )
17667af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , externalMemoryFeatures( externalMemoryFeatures_ )
17668af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ )
17669af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      , compatibleHandleTypes( compatibleHandleTypes_ )
17670af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17671af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17672af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17673af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs )
17674af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17675af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17676af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17677af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17678af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV& operator=( VkExternalImageFormatPropertiesNV const & rhs )
17679af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17680af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17681af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17682af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17683af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17684af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV& setImageFormatProperties( ImageFormatProperties imageFormatProperties_ )
17685af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17686af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      imageFormatProperties = imageFormatProperties_;
17687af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17688af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17689af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17690af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV& setExternalMemoryFeatures( ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ )
17691af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17692af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      externalMemoryFeatures = externalMemoryFeatures_;
17693af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17694af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17695af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17696af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV& setExportFromImportedHandleTypes( ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ )
17697af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17698af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      exportFromImportedHandleTypes = exportFromImportedHandleTypes_;
17699af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17700af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17701af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17702af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalImageFormatPropertiesNV& setCompatibleHandleTypes( ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ )
17703af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17704af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      compatibleHandleTypes = compatibleHandleTypes_;
17705af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *this;
17706af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17707af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17708af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    operator const VkExternalImageFormatPropertiesNV&() const
17709af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17710af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return *reinterpret_cast<const VkExternalImageFormatPropertiesNV*>(this);
17711af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17712af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17713af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==( ExternalImageFormatPropertiesNV const& rhs ) const
17714af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17715af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return ( imageFormatProperties == rhs.imageFormatProperties )
17716af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( externalMemoryFeatures == rhs.externalMemoryFeatures )
17717af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
17718af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter          && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
17719af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17720af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17721af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=( ExternalImageFormatPropertiesNV const& rhs ) const
17722af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17723af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return !operator==( rhs );
17724af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17725af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17726af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ImageFormatProperties imageFormatProperties;
17727af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryFeatureFlagsNV externalMemoryFeatures;
17728af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
17729af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
17730af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  };
17731af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), "struct and wrapper have different size!" );
17732af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class PhysicalDevice
17734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
17735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
17736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDevice()
17737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_physicalDevice(VK_NULL_HANDLE)
17738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
17739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDevice(VkPhysicalDevice physicalDevice)
17742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_physicalDevice(physicalDevice)
17743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
17744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDevice& operator=(VkPhysicalDevice physicalDevice)
17746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_physicalDevice = physicalDevice;
17748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
17749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
17751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17752af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(PhysicalDevice const &rhs) const
17753af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17754af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_physicalDevice == rhs.m_physicalDevice;
17755af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17756af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17757af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(PhysicalDevice const &rhs) const
17758af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17759af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_physicalDevice != rhs.m_physicalDevice;
17760af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17761af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17762af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(PhysicalDevice const &rhs) const
17763af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
17764af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_physicalDevice < rhs.m_physicalDevice;
17765af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
17766af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
17767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getProperties( PhysicalDeviceProperties* pProperties ) const
17768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
17770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceProperties getProperties() const
17774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      PhysicalDeviceProperties properties;
17776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
17777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return properties;
17778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
17782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
17784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<QueueFamilyProperties>>
17788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const
17789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
17791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t queueFamilyPropertyCount;
17792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
17793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      queueFamilyProperties.resize( queueFamilyPropertyCount );
17794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
17795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return queueFamilyProperties;
17796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
17800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
17802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceMemoryProperties getMemoryProperties() const
17806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      PhysicalDeviceMemoryProperties memoryProperties;
17808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
17809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return memoryProperties;
17810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getFeatures( PhysicalDeviceFeatures* pFeatures ) const
17814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
17816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PhysicalDeviceFeatures getFeatures() const
17820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      PhysicalDeviceFeatures features;
17822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
17823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return features;
17824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
17828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
17830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    FormatProperties getFormatProperties( Format format ) const
17834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      FormatProperties formatProperties;
17836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
17837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return formatProperties;
17838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
17842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
17844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
17848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      ImageFormatProperties imageFormatProperties;
17850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
17851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, imageFormatProperties, "vk::PhysicalDevice::getImageFormatProperties" );
17852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
17856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
17858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Device device;
17864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
17865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, device, "vk::PhysicalDevice::createDevice" );
17866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
17870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
17872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<LayerProperties>>
17876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const
17877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<LayerProperties,Allocator> properties;
17879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t propertyCount;
17880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
17881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
17882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
17883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
17884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && propertyCount )
17885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
17886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          properties.resize( propertyCount );
17887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
17888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
17889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
17890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( propertyCount <= properties.size() );
17891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      properties.resize( propertyCount );
17892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceLayerProperties" );
17893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
17897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
17899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<ExtensionProperties>>
17903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const
17904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<ExtensionProperties,Allocator> properties;
17906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t propertyCount;
17907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
17908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
17909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
17910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && propertyCount )
17912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
17913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          properties.resize( propertyCount );
17914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
17916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
17917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( propertyCount <= properties.size() );
17918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      properties.resize( propertyCount );
17919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceExtensionProperties" );
17920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
17924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) );
17926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<SparseImageFormatProperties>>
17930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
17931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<SparseImageFormatProperties,Allocator> properties;
17933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t propertyCount;
17934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 );
17935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      properties.resize( propertyCount );
17936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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() ) );
17937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return properties;
17938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
17942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
17944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
17948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const
17949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<DisplayPropertiesKHR,Allocator> properties;
17951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t propertyCount;
17952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
17953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
17954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
17955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && propertyCount )
17957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
17958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          properties.resize( propertyCount );
17959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
17960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
17961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
17962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( propertyCount <= properties.size() );
17963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      properties.resize( propertyCount );
17964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPropertiesKHR" );
17965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
17969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
17971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
17975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const
17976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
17978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t propertyCount;
17979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
17980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
17981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
17982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && propertyCount )
17984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
17985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          properties.resize( propertyCount );
17986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
17987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
17988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
17989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( propertyCount <= properties.size() );
17990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      properties.resize( propertyCount );
17991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPlanePropertiesKHR" );
17992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
17995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
17996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
17997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
17998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
17999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<DisplayKHR>>
18002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
18003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<DisplayKHR,Allocator> displays;
18005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t displayCount;
18006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
18007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
18008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
18010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && displayCount )
18011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
18012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          displays.resize( displayCount );
18013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
18014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
18015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
18016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( displayCount <= displays.size() );
18017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      displays.resize( displayCount );
18018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, displays, "vk::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
18019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
18023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
18025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
18029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const
18030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<DisplayModePropertiesKHR,Allocator> properties;
18032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t propertyCount;
18033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
18034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
18035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
18037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && propertyCount )
18038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
18039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          properties.resize( propertyCount );
18040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
18041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
18042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
18043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( propertyCount <= properties.size() );
18044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      properties.resize( propertyCount );
18045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayModePropertiesKHR" );
18046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
18050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DisplayModeKHR mode;
18058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, mode, "vk::PhysicalDevice::createDisplayModeKHR" );
18060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
18064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
18066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
18070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DisplayPlaneCapabilitiesKHR capabilities;
18072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
18073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, capabilities, "vk::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
18074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
18078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
18079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
18081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
18083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
18086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
18087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
18089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
18091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
18094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
18096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
18100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Bool32 supported;
18102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
18103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, supported, "vk::PhysicalDevice::getSurfaceSupportKHR" );
18104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
18108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
18110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
18114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceCapabilitiesKHR surfaceCapabilities;
18116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
18117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surfaceCapabilities, "vk::PhysicalDevice::getSurfaceCapabilitiesKHR" );
18118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
18122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
18124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<SurfaceFormatKHR>>
18128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const
18129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
18131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t surfaceFormatCount;
18132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
18133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
18134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
18136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && surfaceFormatCount )
18137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
18138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          surfaceFormats.resize( surfaceFormatCount );
18139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
18140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
18141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
18142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( surfaceFormatCount <= surfaceFormats.size() );
18143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      surfaceFormats.resize( surfaceFormatCount );
18144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surfaceFormats, "vk::PhysicalDevice::getSurfaceFormatsKHR" );
18145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
18149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
18151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<PresentModeKHR>>
18155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const
18156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<PresentModeKHR,Allocator> presentModes;
18158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t presentModeCount;
18159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
18160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
18161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
18163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && presentModeCount )
18164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
18165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          presentModes.resize( presentModeCount );
18166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
18167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
18168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
18169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( presentModeCount <= presentModes.size() );
18170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      presentModes.resize( presentModeCount );
18171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, presentModes, "vk::PhysicalDevice::getSurfacePresentModesKHR" );
18172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
18177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
18179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
18185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
18187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
18192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
18193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
18194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
18196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
18202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
18203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
18205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
18210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
18211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
18213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
18218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
18219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
18221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
18226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
18227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
18229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
18231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
18234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
18235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
18237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
18239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18241af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    Result getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType, ExternalImageFormatPropertiesNV* pExternalImageFormatProperties ) const
18242af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
18243af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      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 ) ) );
18244af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
18245af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
18246af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18247af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    ResultValueType<ExternalImageFormatPropertiesNV>::type getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType ) const
18248af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
18249af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      ExternalImageFormatPropertiesNV externalImageFormatProperties;
18250af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      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 ) ) );
18251af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return createResultValue( result, externalImageFormatProperties, "vk::PhysicalDevice::getExternalImageFormatPropertiesNV" );
18252af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
18253af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18254af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
18255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
18257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
18258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkPhysicalDevice() const
18259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_physicalDevice;
18261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
18264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_physicalDevice != VK_NULL_HANDLE;
18266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
18269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_physicalDevice == VK_NULL_HANDLE;
18271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
18274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkPhysicalDevice m_physicalDevice;
18275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
18276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
18277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  class Instance
18279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  public:
18281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Instance()
18282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      : m_instance(VK_NULL_HANDLE)
18283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
18284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Instance(VkInstance instance)
18287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow       : m_instance(instance)
18288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {}
18289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Instance& operator=(VkInstance instance)
18291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      m_instance = instance;
18293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return *this;
18294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
18296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18297af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator==(Instance const &rhs) const
18298af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
18299af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_instance == rhs.m_instance;
18300af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
18301af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
18302af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator!=(Instance const &rhs) const
18303af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
18304af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_instance != rhs.m_instance;
18305af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
18306af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
18307af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    bool operator<(Instance const &rhs) const
18308af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
18309af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter      return m_instance < rhs.m_instance;
18310af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
18311af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
18312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroy( const AllocationCallbacks* pAllocator ) const
18313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
18319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
18325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
18327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    template <typename Allocator = std::allocator<PhysicalDevice>>
18331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const
18332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      std::vector<PhysicalDevice,Allocator> physicalDevices;
18334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      uint32_t physicalDeviceCount;
18335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      Result result;
18336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      do
18337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
18339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        if ( ( result == Result::eSuccess ) && physicalDeviceCount )
18340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        {
18341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          physicalDevices.resize( physicalDeviceCount );
18342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow          result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
18343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        }
18344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      } while ( result == Result::eIncomplete );
18345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      assert( physicalDeviceCount <= physicalDevices.size() );
18346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      physicalDevices.resize( physicalDeviceCount );
18347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, physicalDevices, "vk::Instance::enumeratePhysicalDevices" );
18348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkVoidFunction getProcAddr( const char* pName ) const
18352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetInstanceProcAddr( m_instance, pName );
18354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    PFN_vkVoidFunction getProcAddr( const std::string & name ) const
18358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return vkGetInstanceProcAddr( m_instance, name.c_str() );
18360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
18364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
18372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createAndroidSurfaceKHR" );
18377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createDisplayPlaneSurfaceKHR" );
18392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
18396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
18401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
18404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createMirSurfaceKHR" );
18409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
18411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
18414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const
18420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createWaylandSurfaceKHR" );
18439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
18444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
18452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createWin32SurfaceKHR" );
18457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
18462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
18470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createXlibSurfaceKHR" );
18475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
18480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
18485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
18488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      SurfaceKHR surface;
18491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, surface, "vk::Instance::createXcbSurfaceKHR" );
18493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
18495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
18498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
18500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      DebugReportCallbackEXT callback;
18506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      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 ) ) );
18507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return createResultValue( result, callback, "vk::Instance::createDebugReportCallbackEXT" );
18508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
18512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const
18518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
18524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
18526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
18530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
18532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit
18537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
18538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    operator VkInstance() const
18539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_instance;
18541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    explicit operator bool() const
18544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_instance != VK_NULL_HANDLE;
18546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    bool operator!() const
18549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      return m_instance == VK_NULL_HANDLE;
18551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
18552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  private:
18554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    VkInstance m_instance;
18555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  };
18556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
18557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
185585b8df846785da667163755e11aa07599c02fd28dLenny Komow  enum class ValidationCheckEXT
185595b8df846785da667163755e11aa07599c02fd28dLenny Komow  {
185605b8df846785da667163755e11aa07599c02fd28dLenny Komow    eAll = VK_VALIDATION_CHECK_ALL_EXT
185615b8df846785da667163755e11aa07599c02fd28dLenny Komow  };
185625b8df846785da667163755e11aa07599c02fd28dLenny Komow
185635b8df846785da667163755e11aa07599c02fd28dLenny Komow  struct ValidationFlagsEXT
185645b8df846785da667163755e11aa07599c02fd28dLenny Komow  {
185655b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT( uint32_t disabledValidationCheckCount_ = 0, ValidationCheckEXT* pDisabledValidationChecks_ = nullptr )
185665b8df846785da667163755e11aa07599c02fd28dLenny Komow      : sType( StructureType::eValidationFlagsEXT )
185675b8df846785da667163755e11aa07599c02fd28dLenny Komow      , pNext( nullptr )
185685b8df846785da667163755e11aa07599c02fd28dLenny Komow      , disabledValidationCheckCount( disabledValidationCheckCount_ )
185695b8df846785da667163755e11aa07599c02fd28dLenny Komow      , pDisabledValidationChecks( pDisabledValidationChecks_ )
185705b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
185715b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
185725b8df846785da667163755e11aa07599c02fd28dLenny Komow
185735b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT( VkValidationFlagsEXT const & rhs )
185745b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
185755b8df846785da667163755e11aa07599c02fd28dLenny Komow      memcpy( this, &rhs, sizeof(ValidationFlagsEXT) );
185765b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
185775b8df846785da667163755e11aa07599c02fd28dLenny Komow
185785b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT& operator=( VkValidationFlagsEXT const & rhs )
185795b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
185805b8df846785da667163755e11aa07599c02fd28dLenny Komow      memcpy( this, &rhs, sizeof(ValidationFlagsEXT) );
185815b8df846785da667163755e11aa07599c02fd28dLenny Komow      return *this;
185825b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
185835b8df846785da667163755e11aa07599c02fd28dLenny Komow
185845b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT& setSType( StructureType sType_ )
185855b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
185865b8df846785da667163755e11aa07599c02fd28dLenny Komow      sType = sType_;
185875b8df846785da667163755e11aa07599c02fd28dLenny Komow      return *this;
185885b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
185895b8df846785da667163755e11aa07599c02fd28dLenny Komow
185905b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT& setPNext( const void* pNext_ )
185915b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
185925b8df846785da667163755e11aa07599c02fd28dLenny Komow      pNext = pNext_;
185935b8df846785da667163755e11aa07599c02fd28dLenny Komow      return *this;
185945b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
185955b8df846785da667163755e11aa07599c02fd28dLenny Komow
185965b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT& setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ )
185975b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
185985b8df846785da667163755e11aa07599c02fd28dLenny Komow      disabledValidationCheckCount = disabledValidationCheckCount_;
185995b8df846785da667163755e11aa07599c02fd28dLenny Komow      return *this;
186005b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
186015b8df846785da667163755e11aa07599c02fd28dLenny Komow
186025b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationFlagsEXT& setPDisabledValidationChecks( ValidationCheckEXT* pDisabledValidationChecks_ )
186035b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
186045b8df846785da667163755e11aa07599c02fd28dLenny Komow      pDisabledValidationChecks = pDisabledValidationChecks_;
186055b8df846785da667163755e11aa07599c02fd28dLenny Komow      return *this;
186065b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
186075b8df846785da667163755e11aa07599c02fd28dLenny Komow
186085b8df846785da667163755e11aa07599c02fd28dLenny Komow    operator const VkValidationFlagsEXT&() const
186095b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
186105b8df846785da667163755e11aa07599c02fd28dLenny Komow      return *reinterpret_cast<const VkValidationFlagsEXT*>(this);
186115b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
186125b8df846785da667163755e11aa07599c02fd28dLenny Komow
186135b8df846785da667163755e11aa07599c02fd28dLenny Komow    bool operator==( ValidationFlagsEXT const& rhs ) const
186145b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
186155b8df846785da667163755e11aa07599c02fd28dLenny Komow      return ( sType == rhs.sType )
186165b8df846785da667163755e11aa07599c02fd28dLenny Komow          && ( pNext == rhs.pNext )
186175b8df846785da667163755e11aa07599c02fd28dLenny Komow          && ( disabledValidationCheckCount == rhs.disabledValidationCheckCount )
186185b8df846785da667163755e11aa07599c02fd28dLenny Komow          && ( pDisabledValidationChecks == rhs.pDisabledValidationChecks );
186195b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
186205b8df846785da667163755e11aa07599c02fd28dLenny Komow
186215b8df846785da667163755e11aa07599c02fd28dLenny Komow    bool operator!=( ValidationFlagsEXT const& rhs ) const
186225b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
186235b8df846785da667163755e11aa07599c02fd28dLenny Komow      return !operator==( rhs );
186245b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
186255b8df846785da667163755e11aa07599c02fd28dLenny Komow
186265b8df846785da667163755e11aa07599c02fd28dLenny Komow  private:
186275b8df846785da667163755e11aa07599c02fd28dLenny Komow    StructureType sType;
186285b8df846785da667163755e11aa07599c02fd28dLenny Komow
186295b8df846785da667163755e11aa07599c02fd28dLenny Komow  public:
186305b8df846785da667163755e11aa07599c02fd28dLenny Komow    const void* pNext;
186315b8df846785da667163755e11aa07599c02fd28dLenny Komow    uint32_t disabledValidationCheckCount;
186325b8df846785da667163755e11aa07599c02fd28dLenny Komow    ValidationCheckEXT* pDisabledValidationChecks;
186335b8df846785da667163755e11aa07599c02fd28dLenny Komow  };
186345b8df846785da667163755e11aa07599c02fd28dLenny Komow  static_assert( sizeof( ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ), "struct and wrapper have different size!" );
186355b8df846785da667163755e11aa07599c02fd28dLenny Komow
18636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
18637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
18639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr )
18643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Instance instance;
18645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkInstance*>( &instance ) ) );
18646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return createResultValue( result, instance, "vk::createInstance" );
18647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
18651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
18653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename Allocator = std::allocator<LayerProperties>>
18657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
18658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::vector<LayerProperties,Allocator> properties;
18660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t propertyCount;
18661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result result;
18662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    do
18663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
18665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      if ( ( result == Result::eSuccess ) && propertyCount )
18666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        properties.resize( propertyCount );
18668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
18669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      }
18670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    } while ( result == Result::eIncomplete );
18671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    assert( propertyCount <= properties.size() );
18672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    properties.resize( propertyCount );
18673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return createResultValue( result, properties, "vk::enumerateInstanceLayerProperties" );
18674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
18678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
18680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  template <typename Allocator = std::allocator<ExtensionProperties>>
18684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr )
18685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::vector<ExtensionProperties,Allocator> properties;
18687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    uint32_t propertyCount;
18688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    Result result;
18689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    do
18690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
18691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
18692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      if ( ( result == Result::eSuccess ) && propertyCount )
18693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      {
18694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        properties.resize( propertyCount );
18695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow        result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
18696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow      }
18697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    } while ( result == Result::eIncomplete );
18698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    assert( propertyCount <= properties.size() );
18699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    properties.resize( propertyCount );
18700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return createResultValue( result, properties, "vk::enumerateInstanceExtensionProperties" );
18701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FramebufferCreateFlagBits)
18705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FramebufferCreateFlags)
18710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryPoolCreateFlagBits)
18715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryPoolCreateFlags)
18720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(RenderPassCreateFlagBits)
18725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(RenderPassCreateFlags)
18730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SamplerCreateFlagBits)
18735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SamplerCreateFlags)
18740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineLayoutCreateFlagBits)
18745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineLayoutCreateFlags)
18750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineCacheCreateFlagBits)
18755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineCacheCreateFlags)
18760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineDepthStencilStateCreateFlagBits)
18765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineDepthStencilStateCreateFlags)
18770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineDynamicStateCreateFlagBits)
18775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineDynamicStateCreateFlags)
18780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineColorBlendStateCreateFlagBits)
18785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineColorBlendStateCreateFlags)
18790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18792b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18793b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18794b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineMultisampleStateCreateFlagBits)
18795b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18796b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18797b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineMultisampleStateCreateFlags)
18800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineRasterizationStateCreateFlagBits)
18805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineRasterizationStateCreateFlags)
18810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineViewportStateCreateFlagBits)
18815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineViewportStateCreateFlags)
18820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineTessellationStateCreateFlagBits)
18825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineTessellationStateCreateFlags)
18830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
18835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineInputAssemblyStateCreateFlags)
18840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineVertexInputStateCreateFlagBits)
18845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineVertexInputStateCreateFlags)
18850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineShaderStageCreateFlagBits)
18855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineShaderStageCreateFlags)
18860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorSetLayoutCreateFlagBits)
18865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorSetLayoutCreateFlags)
18870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BufferViewCreateFlagBits)
18875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BufferViewCreateFlags)
18880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(InstanceCreateFlagBits)
18885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(InstanceCreateFlags)
18890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DeviceCreateFlagBits)
18895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DeviceCreateFlags)
18900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DeviceQueueCreateFlagBits)
18905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DeviceQueueCreateFlags)
18910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageViewCreateFlagBits)
18915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageViewCreateFlags)
18920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SemaphoreCreateFlagBits)
18925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SemaphoreCreateFlags)
18930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ShaderModuleCreateFlagBits)
18935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ShaderModuleCreateFlags)
18940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(EventCreateFlagBits)
18945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(EventCreateFlags)
18950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MemoryMapFlagBits)
18955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MemoryMapFlags)
18960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SubpassDescriptionFlagBits)
18965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SubpassDescriptionFlags)
18970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorPoolResetFlagBits)
18975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorPoolResetFlags)
18980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SwapchainCreateFlagBitsKHR)
18985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SwapchainCreateFlagsKHR)
18990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
18992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DisplayModeCreateFlagBitsKHR)
18995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
18996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
18997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
18998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
18999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DisplayModeCreateFlagsKHR)
19000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
19005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DisplaySurfaceCreateFlagsKHR)
19010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
19015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
19016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
19020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_ANDROID_KHR
19022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AndroidSurfaceCreateFlagsKHR)
19023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
19027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
19029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MirSurfaceCreateFlagBitsKHR)
19030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
19034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_MIR_KHR
19036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MirSurfaceCreateFlagsKHR)
19037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_MIR_KHR*/
19041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
19043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
19044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
19048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WAYLAND_KHR
19050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(WaylandSurfaceCreateFlagsKHR)
19051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
19055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
19057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(Win32SurfaceCreateFlagBitsKHR)
19058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
19062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_WIN32_KHR
19064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(Win32SurfaceCreateFlagsKHR)
19065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_WIN32_KHR*/
19069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
19071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(XlibSurfaceCreateFlagBitsKHR)
19072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
19076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XLIB_KHR
19078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(XlibSurfaceCreateFlagsKHR)
19079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XLIB_KHR*/
19083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
19085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(XcbSurfaceCreateFlagBitsKHR)
19086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "(void)";
19088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
19090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#ifdef VK_USE_PLATFORM_XCB_KHR
19092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(XcbSurfaceCreateFlagsKHR)
19093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{}";
19095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif /*VK_USE_PLATFORM_XCB_KHR*/
19097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageLayout value)
19099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eUndefined: return "Undefined";
19103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eGeneral: return "General";
19104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
19105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
19106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
19107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
19108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
19109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
19110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::ePreinitialized: return "Preinitialized";
19111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
19112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AttachmentLoadOp value)
19117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AttachmentLoadOp::eLoad: return "Load";
19121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AttachmentLoadOp::eClear: return "Clear";
19122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AttachmentLoadOp::eDontCare: return "DontCare";
19123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AttachmentStoreOp value)
19128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AttachmentStoreOp::eStore: return "Store";
19132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AttachmentStoreOp::eDontCare: return "DontCare";
19133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageType value)
19138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageType::e1D: return "1D";
19142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageType::e2D: return "2D";
19143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageType::e3D: return "3D";
19144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageTiling value)
19149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageTiling::eOptimal: return "Optimal";
19153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageTiling::eLinear: return "Linear";
19154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageViewType value)
19159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::e1D: return "1D";
19163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::e2D: return "2D";
19164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::e3D: return "3D";
19165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::eCube: return "Cube";
19166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::e1DArray: return "1DArray";
19167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::e2DArray: return "2DArray";
19168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageViewType::eCubeArray: return "CubeArray";
19169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandBufferLevel value)
19174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandBufferLevel::ePrimary: return "Primary";
19178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandBufferLevel::eSecondary: return "Secondary";
19179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ComponentSwizzle value)
19184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eIdentity: return "Identity";
19188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eZero: return "Zero";
19189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eOne: return "One";
19190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eR: return "R";
19191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eG: return "G";
19192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eB: return "B";
19193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ComponentSwizzle::eA: return "A";
19194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorType value)
19199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eSampler: return "Sampler";
19203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
19204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eSampledImage: return "SampledImage";
19205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eStorageImage: return "StorageImage";
19206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
19207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
19208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eUniformBuffer: return "UniformBuffer";
19209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eStorageBuffer: return "StorageBuffer";
19210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
19211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
19212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorType::eInputAttachment: return "InputAttachment";
19213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryType value)
19218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryType::eOcclusion: return "Occlusion";
19222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryType::ePipelineStatistics: return "PipelineStatistics";
19223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryType::eTimestamp: return "Timestamp";
19224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BorderColor value)
19229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
19233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
19234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
19235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
19236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
19237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
19238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineBindPoint value)
19243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineBindPoint::eGraphics: return "Graphics";
19247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineBindPoint::eCompute: return "Compute";
19248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineCacheHeaderVersion value)
19253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineCacheHeaderVersion::eOne: return "One";
19257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PrimitiveTopology value)
19262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::ePointList: return "PointList";
19266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eLineList: return "LineList";
19267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eLineStrip: return "LineStrip";
19268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eTriangleList: return "TriangleList";
19269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
19270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eTriangleFan: return "TriangleFan";
19271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
19272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
19273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
19274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
19275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PrimitiveTopology::ePatchList: return "PatchList";
19276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SharingMode value)
19281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SharingMode::eExclusive: return "Exclusive";
19285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SharingMode::eConcurrent: return "Concurrent";
19286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(IndexType value)
19291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case IndexType::eUint16: return "Uint16";
19295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case IndexType::eUint32: return "Uint32";
19296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(Filter value)
19301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Filter::eNearest: return "Nearest";
19305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Filter::eLinear: return "Linear";
19306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Filter::eCubicIMG: return "CubicIMG";
19307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SamplerMipmapMode value)
19312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerMipmapMode::eNearest: return "Nearest";
19316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerMipmapMode::eLinear: return "Linear";
19317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SamplerAddressMode value)
19322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerAddressMode::eRepeat: return "Repeat";
19326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
19327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
19328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
19329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
19330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CompareOp value)
19335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eNever: return "Never";
19339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eLess: return "Less";
19340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eEqual: return "Equal";
19341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eLessOrEqual: return "LessOrEqual";
19342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eGreater: return "Greater";
19343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eNotEqual: return "NotEqual";
19344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
19345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompareOp::eAlways: return "Always";
19346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PolygonMode value)
19351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PolygonMode::eFill: return "Fill";
19355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PolygonMode::eLine: return "Line";
19356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PolygonMode::ePoint: return "Point";
19357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CullModeFlagBits value)
19362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CullModeFlagBits::eNone: return "None";
19366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CullModeFlagBits::eFront: return "Front";
19367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CullModeFlagBits::eBack: return "Back";
19368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
19369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CullModeFlags value)
19374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CullModeFlagBits::eNone) result += "None | ";
19378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CullModeFlagBits::eFront) result += "Front | ";
19379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CullModeFlagBits::eBack) result += "Back | ";
19380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
19381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FrontFace value)
19385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FrontFace::eCounterClockwise: return "CounterClockwise";
19389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FrontFace::eClockwise: return "Clockwise";
19390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BlendFactor value)
19395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eZero: return "Zero";
19399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOne: return "One";
19400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eSrcColor: return "SrcColor";
19401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
19402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eDstColor: return "DstColor";
19403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
19404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eSrcAlpha: return "SrcAlpha";
19405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
19406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eDstAlpha: return "DstAlpha";
19407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
19408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eConstantColor: return "ConstantColor";
19409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
19410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eConstantAlpha: return "ConstantAlpha";
19411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
19412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
19413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eSrc1Color: return "Src1Color";
19414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
19415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eSrc1Alpha: return "Src1Alpha";
19416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
19417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BlendOp value)
19422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendOp::eAdd: return "Add";
19426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendOp::eSubtract: return "Subtract";
19427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendOp::eReverseSubtract: return "ReverseSubtract";
19428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendOp::eMin: return "Min";
19429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BlendOp::eMax: return "Max";
19430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(StencilOp value)
19435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eKeep: return "Keep";
19439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eZero: return "Zero";
19440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eReplace: return "Replace";
19441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
19442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
19443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eInvert: return "Invert";
19444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
19445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
19446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(LogicOp value)
19451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eClear: return "Clear";
19455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eAnd: return "And";
19456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eAndReverse: return "AndReverse";
19457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eCopy: return "Copy";
19458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eAndInverted: return "AndInverted";
19459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eNoOp: return "NoOp";
19460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eXor: return "Xor";
19461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eOr: return "Or";
19462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eNor: return "Nor";
19463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eEquivalent: return "Equivalent";
19464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eInvert: return "Invert";
19465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eOrReverse: return "OrReverse";
19466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eCopyInverted: return "CopyInverted";
19467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eOrInverted: return "OrInverted";
19468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eNand: return "Nand";
19469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case LogicOp::eSet: return "Set";
19470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(InternalAllocationType value)
19475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case InternalAllocationType::eExecutable: return "Executable";
19479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SystemAllocationScope value)
19484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SystemAllocationScope::eCommand: return "Command";
19488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SystemAllocationScope::eObject: return "Object";
19489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SystemAllocationScope::eCache: return "Cache";
19490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SystemAllocationScope::eDevice: return "Device";
19491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SystemAllocationScope::eInstance: return "Instance";
19492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PhysicalDeviceType value)
19497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PhysicalDeviceType::eOther: return "Other";
19501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
19502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
19503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
19504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PhysicalDeviceType::eCpu: return "Cpu";
19505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(VertexInputRate value)
19510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case VertexInputRate::eVertex: return "Vertex";
19514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case VertexInputRate::eInstance: return "Instance";
19515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(Format value)
19520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eUndefined: return "Undefined";
19524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
19525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
19526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
19527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
19528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
19529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
19530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
19531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
19532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Unorm: return "R8Unorm";
19533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Snorm: return "R8Snorm";
19534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Uscaled: return "R8Uscaled";
19535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Sscaled: return "R8Sscaled";
19536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Uint: return "R8Uint";
19537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Sint: return "R8Sint";
19538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8Srgb: return "R8Srgb";
19539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Unorm: return "R8G8Unorm";
19540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Snorm: return "R8G8Snorm";
19541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Uscaled: return "R8G8Uscaled";
19542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Sscaled: return "R8G8Sscaled";
19543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Uint: return "R8G8Uint";
19544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Sint: return "R8G8Sint";
19545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8Srgb: return "R8G8Srgb";
19546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
19547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
19548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
19549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
19550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Uint: return "R8G8B8Uint";
19551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Sint: return "R8G8B8Sint";
19552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
19553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
19554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
19555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
19556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
19557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Uint: return "B8G8R8Uint";
19558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Sint: return "B8G8R8Sint";
19559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
19560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
19561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
19562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
19563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
19564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
19565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
19566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
19567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
19568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
19569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
19570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
19571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
19572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
19573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
19574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
19575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
19576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
19577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
19578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
19579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
19580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
19581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
19582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
19583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
19584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
19585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
19586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
19587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
19588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
19589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
19590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
19591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
19592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
19593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Unorm: return "R16Unorm";
19594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Snorm: return "R16Snorm";
19595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Uscaled: return "R16Uscaled";
19596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Sscaled: return "R16Sscaled";
19597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Uint: return "R16Uint";
19598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Sint: return "R16Sint";
19599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16Sfloat: return "R16Sfloat";
19600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Unorm: return "R16G16Unorm";
19601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Snorm: return "R16G16Snorm";
19602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Uscaled: return "R16G16Uscaled";
19603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Sscaled: return "R16G16Sscaled";
19604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Uint: return "R16G16Uint";
19605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Sint: return "R16G16Sint";
19606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16Sfloat: return "R16G16Sfloat";
19607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
19608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
19609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
19610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
19611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Uint: return "R16G16B16Uint";
19612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Sint: return "R16G16B16Sint";
19613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
19614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
19615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
19616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
19617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
19618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
19619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
19620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
19621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32Uint: return "R32Uint";
19622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32Sint: return "R32Sint";
19623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32Sfloat: return "R32Sfloat";
19624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32Uint: return "R32G32Uint";
19625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32Sint: return "R32G32Sint";
19626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32Sfloat: return "R32G32Sfloat";
19627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32B32Uint: return "R32G32B32Uint";
19628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32B32Sint: return "R32G32B32Sint";
19629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
19630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
19631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
19632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
19633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64Uint: return "R64Uint";
19634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64Sint: return "R64Sint";
19635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64Sfloat: return "R64Sfloat";
19636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64Uint: return "R64G64Uint";
19637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64Sint: return "R64G64Sint";
19638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64Sfloat: return "R64G64Sfloat";
19639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64B64Uint: return "R64G64B64Uint";
19640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64B64Sint: return "R64G64B64Sint";
19641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
19642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
19643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
19644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
19645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
19646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
19647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eD16Unorm: return "D16Unorm";
19648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
19649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eD32Sfloat: return "D32Sfloat";
19650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eS8Uint: return "S8Uint";
19651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
19652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
19653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
19654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
19655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
19656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
19657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
19658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc2UnormBlock: return "Bc2UnormBlock";
19659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
19660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc3UnormBlock: return "Bc3UnormBlock";
19661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
19662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc4UnormBlock: return "Bc4UnormBlock";
19663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc4SnormBlock: return "Bc4SnormBlock";
19664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc5UnormBlock: return "Bc5UnormBlock";
19665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc5SnormBlock: return "Bc5SnormBlock";
19666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
19667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
19668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc7UnormBlock: return "Bc7UnormBlock";
19669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
19670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
19671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
19672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
19673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
19674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
19675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
19676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
19677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
19678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
19679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
19680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
19681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
19682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
19683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
19684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
19685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
19686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
19687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
19688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
19689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
19690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
19691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
19692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
19693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
19694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
19695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
19696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
19697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
19698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
19699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
19700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
19701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
19702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
19703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
19704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
19705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
19706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
19707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
19708af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
19709af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
19710af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
19711af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG";
19712af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG";
19713af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
19714af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
19715af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
19716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(StructureType value)
19721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eApplicationInfo: return "ApplicationInfo";
19725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
19726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
19727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
19728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eSubmitInfo: return "SubmitInfo";
19729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
19730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
19731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eBindSparseInfo: return "BindSparseInfo";
19732b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
19733b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
19734b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eEventCreateInfo: return "EventCreateInfo";
19735b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
19736b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
19737b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
19738b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eImageCreateInfo: return "ImageCreateInfo";
19739b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
19740b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
19741b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
19742b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
19743b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
19744b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
19745b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
19746b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
19747b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
19748b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
19749b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
19750b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
19751b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
19752b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
19753b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
19754b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
19755b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
19756b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
19757b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
19758b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
19759b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
19760b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
19761b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
19762b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
19763b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
19764b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
19765b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
19766b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
19767b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
19768b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
19769b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
19770b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eMemoryBarrier: return "MemoryBarrier";
19771b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
19772b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
19773b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
19774b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
19775b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
19776b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
19777b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
19778b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
19779b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
19780b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
19781b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
19782b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
19783b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
19784b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
19785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
19786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
19787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
19788b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
19789b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
19790b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
19791b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
19792af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case StructureType::eExternalMemoryImageCreateInfoNV: return "ExternalMemoryImageCreateInfoNV";
19793af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case StructureType::eExportMemoryAllocateInfoNV: return "ExportMemoryAllocateInfoNV";
19794af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case StructureType::eImportMemoryWin32HandleInfoNV: return "ImportMemoryWin32HandleInfoNV";
19795af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case StructureType::eExportMemoryWin32HandleInfoNV: return "ExportMemoryWin32HandleInfoNV";
19796af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV";
197975b8df846785da667163755e11aa07599c02fd28dLenny Komow    case StructureType::eValidationFlagsEXT: return "ValidationFlagsEXT";
19798b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19799b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19800b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19801b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19802b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SubpassContents value)
19803b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19804b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19805b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19806b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SubpassContents::eInline: return "Inline";
19807b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
19808b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19809b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19810b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19811b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19812b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DynamicState value)
19813b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19814b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19815b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19816b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eViewport: return "Viewport";
19817b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eScissor: return "Scissor";
19818b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eLineWidth: return "LineWidth";
19819b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eDepthBias: return "DepthBias";
19820b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eBlendConstants: return "BlendConstants";
19821b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eDepthBounds: return "DepthBounds";
19822b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eStencilCompareMask: return "StencilCompareMask";
19823b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eStencilWriteMask: return "StencilWriteMask";
19824b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DynamicState::eStencilReference: return "StencilReference";
19825b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19826b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19827b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19828b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19829b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueueFlagBits value)
19830b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19831b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19832b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19833b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueueFlagBits::eGraphics: return "Graphics";
19834b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueueFlagBits::eCompute: return "Compute";
19835b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueueFlagBits::eTransfer: return "Transfer";
19836b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueueFlagBits::eSparseBinding: return "SparseBinding";
19837b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19838b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19839b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19840b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19841b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueueFlags value)
19842b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19843b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19844b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19845b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
19846b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueueFlagBits::eCompute) result += "Compute | ";
19847b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
19848b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
19849b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19850b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19851b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19852b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MemoryPropertyFlagBits value)
19853b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19854b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19855b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19856b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
19857b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
19858b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
19859b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case MemoryPropertyFlagBits::eHostCached: return "HostCached";
19860b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
19861b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19862b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19863b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19864b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19865b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MemoryPropertyFlags value)
19866b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19867b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19868b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19869b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19870b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
19871b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
19872b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
19873b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
19874b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19875b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19876b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19877b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MemoryHeapFlagBits value)
19878b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19879b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19880b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19881b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
19882b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19883b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19884b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19885b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19886b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(MemoryHeapFlags value)
19887b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19888b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19889b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19890b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19891b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19892b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19893b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19894b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AccessFlagBits value)
19895b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19896b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19897b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19898b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
19899b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eIndexRead: return "IndexRead";
19900b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
19901b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eUniformRead: return "UniformRead";
19902b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
19903b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eShaderRead: return "ShaderRead";
19904b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eShaderWrite: return "ShaderWrite";
19905b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
19906b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
19907b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
19908b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
19909b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eTransferRead: return "TransferRead";
19910b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eTransferWrite: return "TransferWrite";
19911b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eHostRead: return "HostRead";
19912b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eHostWrite: return "HostWrite";
19913b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eMemoryRead: return "MemoryRead";
19914b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
19915b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19916b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19917b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19918b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19919b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AccessFlags value)
19920b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19921b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19922b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19923b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
19924b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
19925b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
19926b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
19927b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
19928b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
19929b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
19930b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
19931b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
19932b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
19933b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
19934b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
19935b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
19936b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
19937b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
19938b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
19939b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
19940b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19941b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19942b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19943b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BufferUsageFlagBits value)
19944b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19945b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19946b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19947b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
19948b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eTransferDst: return "TransferDst";
19949b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19950b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19951b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
19952b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
19953b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
19954b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
19955b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
19956b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19957b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19958b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19959b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19960b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BufferUsageFlags value)
19961b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19962b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19963b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19964b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19965b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
19966b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19967b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19968b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
19969b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
19970b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
19971b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19972b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
19973b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19974b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19975b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19976b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BufferCreateFlagBits value)
19977b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19978b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
19979b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
19980b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
19981b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
19982b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
19983b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
19984b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
19985b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19986b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19987b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(BufferCreateFlags value)
19988b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19989b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
19990b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
19991b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19992b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19993b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19994b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
19995b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
19996b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
19997b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ShaderStageFlagBits value)
19998b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
19999b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20000b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20001b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eVertex: return "Vertex";
20002b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
20003b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
20004b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eGeometry: return "Geometry";
20005b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eFragment: return "Fragment";
20006b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eCompute: return "Compute";
20007b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
20008b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ShaderStageFlagBits::eAll: return "All";
20009b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20010b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20011b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20012b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20013b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ShaderStageFlags value)
20014b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20015b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20016b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20017b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
20018b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
20019b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
20020b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
20021b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
20022b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
20023b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
20024b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ShaderStageFlagBits::eAll) result += "All | ";
20025b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20026b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20027b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20028b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageUsageFlagBits value)
20029b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20030b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20031b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20032b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
20033b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eTransferDst: return "TransferDst";
20034b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eSampled: return "Sampled";
20035b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eStorage: return "Storage";
20036b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
20037b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
20038b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
20039b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
20040b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20041b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20042b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20043b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20044b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageUsageFlags value)
20045b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20046b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20047b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20048b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
20049b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
20050b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
20051b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
20052b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
20053b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
20054b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
20055b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
20056b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20057b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20058b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20059b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageCreateFlagBits value)
20060b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20061b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20062b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20063b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
20064b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
20065b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
20066b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
20067b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
20068b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20069b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20070b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20071b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20072b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageCreateFlags value)
20073b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20074b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20075b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20076b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
20077b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
20078b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
20079b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
20080b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
20081b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20082b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20083b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20084b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineCreateFlagBits value)
20085b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20086b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20087b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20088b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
20089b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
20090b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineCreateFlagBits::eDerivative: return "Derivative";
20091b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20092b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20093b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20094b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20095b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineCreateFlags value)
20096b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20097b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20098b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20099b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
20100b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
20101b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
20102b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20103b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20104b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20105b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ColorComponentFlagBits value)
20106b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20107b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20108b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20109b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ColorComponentFlagBits::eR: return "R";
20110b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ColorComponentFlagBits::eG: return "G";
20111b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ColorComponentFlagBits::eB: return "B";
20112b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ColorComponentFlagBits::eA: return "A";
20113b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20114b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20115b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20116b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20117b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ColorComponentFlags value)
20118b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20119b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20120b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20121b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ColorComponentFlagBits::eR) result += "R | ";
20122b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ColorComponentFlagBits::eG) result += "G | ";
20123b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ColorComponentFlagBits::eB) result += "B | ";
20124b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ColorComponentFlagBits::eA) result += "A | ";
20125b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20126b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20127b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20128b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FenceCreateFlagBits value)
20129b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20130b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20131b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20132b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FenceCreateFlagBits::eSignaled: return "Signaled";
20133b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20134b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20135b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20136b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20137b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FenceCreateFlags value)
20138b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20139b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20140b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20141b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
20142b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20143b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20144b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20145b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FormatFeatureFlagBits value)
20146b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20147b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20148b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20149b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
20150b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
20151b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
20152b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
20153b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
20154b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
20155b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
20156b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
20157b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
20158b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
20159b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
20160b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
20161b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
20162b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
20163b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20164b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20165b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20166b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20167b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(FormatFeatureFlags value)
20168b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20169b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20170b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20171b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
20172b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
20173b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
20174b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
20175b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
20176b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
20177b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
20178b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
20179b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
20180b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
20181b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
20182b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
20183b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
20184b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
20185b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20186b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20187b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20188b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryControlFlagBits value)
20189b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20190b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20191b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20192b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryControlFlagBits::ePrecise: return "Precise";
20193b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20194b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20195b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20196b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20197b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryControlFlags value)
20198b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20199b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20200b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20201b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
20202b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20203b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20204b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20205b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryResultFlagBits value)
20206b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20207b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20208b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20209b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryResultFlagBits::e64: return "64";
20210b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryResultFlagBits::eWait: return "Wait";
20211b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
20212b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryResultFlagBits::ePartial: return "Partial";
20213b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20214b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20215b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20216b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20217b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryResultFlags value)
20218b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20219b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20220b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20221b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryResultFlagBits::e64) result += "64 | ";
20222b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryResultFlagBits::eWait) result += "Wait | ";
20223b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
20224b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
20225b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20226b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20227b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20228b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandBufferUsageFlagBits value)
20229b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20230b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20231b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20232b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
20233b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
20234b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
20235b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20236b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20237b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20238b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20239b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandBufferUsageFlags value)
20240b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20241b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20242b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20243b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
20244b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
20245b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
20246b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20247b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20248b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20249b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryPipelineStatisticFlagBits value)
20250b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20251b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20252b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20253b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
20254b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
20255b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
20256b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
20257b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
20258b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
20259b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
20260b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
20261b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
20262b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
20263b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
20264b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20265b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20266b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20267b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20268b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(QueryPipelineStatisticFlags value)
20269b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20270b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20271b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20272b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
20273b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
20274b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
20275b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
20276b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
20277b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
20278b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
20279b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
20280b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
20281b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
20282b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
20283b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20284b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20285b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20286b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageAspectFlagBits value)
20287b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20288b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20289b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20290b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageAspectFlagBits::eColor: return "Color";
20291b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageAspectFlagBits::eDepth: return "Depth";
20292b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageAspectFlagBits::eStencil: return "Stencil";
20293b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ImageAspectFlagBits::eMetadata: return "Metadata";
20294b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20295b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20296b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20297b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20298b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ImageAspectFlags value)
20299b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20300b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20301b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20302b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageAspectFlagBits::eColor) result += "Color | ";
20303b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
20304b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
20305b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
20306b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20307b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20308b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20309b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SparseImageFormatFlagBits value)
20310b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20311b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20312b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20313b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
20314b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
20315b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
20316b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20317b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20318b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20319b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20320b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SparseImageFormatFlags value)
20321b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20322b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20323b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20324b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
20325b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
20326b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
20327b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20328b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20329b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20330b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SparseMemoryBindFlagBits value)
20331b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20332b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20333b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20334b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
20335b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20336b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20337b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20338b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20339b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SparseMemoryBindFlags value)
20340b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20341b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20342b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20343b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
20344b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20345b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20346b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20347b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineStageFlagBits value)
20348b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20349b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20350b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20351b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
20352b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
20353b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eVertexInput: return "VertexInput";
20354b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eVertexShader: return "VertexShader";
20355b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
20356b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
20357b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
20358b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
20359b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
20360b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
20361b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
20362b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
20363b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eTransfer: return "Transfer";
20364b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
20365b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eHost: return "Host";
20366b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
20367b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PipelineStageFlagBits::eAllCommands: return "AllCommands";
20368b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20369b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20370b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20371b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20372b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PipelineStageFlags value)
20373b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20374b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20375b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20376b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
20377b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
20378b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
20379b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
20380b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
20381b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
20382b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
20383b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
20384b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
20385b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
20386b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
20387b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
20388b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
20389b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
20390b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eHost) result += "Host | ";
20391b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
20392b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
20393b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20394b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20395b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20396b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandPoolCreateFlagBits value)
20397b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20398b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20399b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20400b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandPoolCreateFlagBits::eTransient: return "Transient";
20401b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
20402b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20403b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20404b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20405b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20406b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandPoolCreateFlags value)
20407b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20408b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20409b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20410b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
20411b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
20412b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20413b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20414b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20415b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandPoolResetFlagBits value)
20416b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20417b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20418b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20419b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
20420b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20421b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20422b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20423b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20424b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandPoolResetFlags value)
20425b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20426b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20427b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20428b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
20429b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20430b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20431b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20432b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandBufferResetFlagBits value)
20433b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20434b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20435b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20436b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
20437b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20438b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20439b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20440b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20441b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CommandBufferResetFlags value)
20442b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20443b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20444b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20445b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
20446b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20447b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20448b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20449b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SampleCountFlagBits value)
20450b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20451b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20452b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20453b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e1: return "1";
20454b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e2: return "2";
20455b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e4: return "4";
20456b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e8: return "8";
20457b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e16: return "16";
20458b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e32: return "32";
20459b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SampleCountFlagBits::e64: return "64";
20460b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20461b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20462b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20463b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20464b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SampleCountFlags value)
20465b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20466b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20467b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20468b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e1) result += "1 | ";
20469b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e2) result += "2 | ";
20470b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e4) result += "4 | ";
20471b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e8) result += "8 | ";
20472b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e16) result += "16 | ";
20473b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e32) result += "32 | ";
20474b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SampleCountFlagBits::e64) result += "64 | ";
20475b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20476b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20477b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20478b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AttachmentDescriptionFlagBits value)
20479b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20480b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20481b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20482b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
20483b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20484b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20485b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20486b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20487b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(AttachmentDescriptionFlags value)
20488b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20489b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20490b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20491b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
20492b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20493b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20494b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20495b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(StencilFaceFlagBits value)
20496b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20497b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20498b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20499b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilFaceFlagBits::eFront: return "Front";
20500b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilFaceFlagBits::eBack: return "Back";
20501b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
20502b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20503b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20504b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20505b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20506b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(StencilFaceFlags value)
20507b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20508b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20509b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20510b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & StencilFaceFlagBits::eFront) result += "Front | ";
20511b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & StencilFaceFlagBits::eBack) result += "Back | ";
20512b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
20513b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20514b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20515b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20516b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorPoolCreateFlagBits value)
20517b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20518b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20519b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20520b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
20521b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20522b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20523b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20524b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20525b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DescriptorPoolCreateFlags value)
20526b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20527b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20528b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20529b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
20530b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20531b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20532b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20533b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DependencyFlagBits value)
20534b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20535b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20536b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20537b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DependencyFlagBits::eByRegion: return "ByRegion";
20538b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20539b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20540b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20541b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20542b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DependencyFlags value)
20543b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20544b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20545b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20546b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
20547b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20548b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20549b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20550b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(PresentModeKHR value)
20551b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20552b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20553b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20554b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PresentModeKHR::eImmediate: return "Immediate";
20555b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PresentModeKHR::eMailbox: return "Mailbox";
20556b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PresentModeKHR::eFifo: return "Fifo";
20557b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
20558b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20559b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20560b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20561b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20562b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(ColorSpaceKHR value)
20563b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20564b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20565b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20566b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
20567b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20568b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20569b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20570b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20571b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
20572b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20573b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20574b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20575b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
20576b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
20577b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
20578b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
20579b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20580b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20581b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20582b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20583b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DisplayPlaneAlphaFlagsKHR value)
20584b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20585b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20586b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20587b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20588b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
20589b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
20590b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
20591b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20592b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20593b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20594b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CompositeAlphaFlagBitsKHR value)
20595b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20596b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20597b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20598b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
20599b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
20600b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
20601b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
20602b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20603b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20604b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20605b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20606b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(CompositeAlphaFlagsKHR value)
20607b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20608b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20609b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20610b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20611b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
20612b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
20613b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
20614b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20615b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20616b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20617b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SurfaceTransformFlagBitsKHR value)
20618b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20619b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20620b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20621b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
20622b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
20623b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
20624b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
20625b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
20626b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
20627b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
20628b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
20629b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
20630b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20631b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20632b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20633b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20634b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(SurfaceTransformFlagsKHR value)
20635b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20636b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20637b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20638b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
20639b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
20640b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
20641b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
20642b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
20643b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
20644b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
20645b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
20646b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
20647b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20648b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20649b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20650b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DebugReportFlagBitsEXT value)
20651b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20652b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20653b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20654b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportFlagBitsEXT::eInformation: return "Information";
20655b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportFlagBitsEXT::eWarning: return "Warning";
20656b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
20657b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportFlagBitsEXT::eError: return "Error";
20658b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportFlagBitsEXT::eDebug: return "Debug";
20659b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20660b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20661b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20662b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20663b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DebugReportFlagsEXT value)
20664b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20665b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (!value) return "{}";
20666b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    std::string result;
20667b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
20668b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
20669b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
20670b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
20671b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
20672b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    return "{" + result.substr(0, result.size() - 3) + "}";
20673b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20674b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20675b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DebugReportObjectTypeEXT value)
20676b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20677b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20678b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20679b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
20680b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eInstance: return "Instance";
20681b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
20682b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eDevice: return "Device";
20683b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eQueue: return "Queue";
20684b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
20685b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
20686b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eFence: return "Fence";
20687b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
20688b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
20689b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eImage: return "Image";
20690b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eEvent: return "Event";
20691b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
20692b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
20693b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eImageView: return "ImageView";
20694b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
20695b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
20696b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
20697b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
20698b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
20699b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
20700b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eSampler: return "Sampler";
20701b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
20702b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
20703b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
20704b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
20705b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
20706b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
20707b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportObjectTypeEXT::eDebugReport: return "DebugReport";
20708b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20709b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20710b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20711b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20712b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(DebugReportErrorEXT value)
20713b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20714b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20715b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20716b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportErrorEXT::eNone: return "None";
20717b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case DebugReportErrorEXT::eCallbackRef: return "CallbackRef";
20718b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20719b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20720b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20721b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20722b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  inline std::string to_string(RasterizationOrderAMD value)
20723b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  {
20724b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    switch (value)
20725b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    {
20726b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case RasterizationOrderAMD::eStrict: return "Strict";
20727b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    case RasterizationOrderAMD::eRelaxed: return "Relaxed";
20728b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    default: return "invalid";
20729b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow    }
20730b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow  }
20731b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20732af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  inline std::string to_string(ExternalMemoryHandleTypeFlagBitsNV value)
20733af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
20734af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    switch (value)
20735af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
20736af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32: return "OpaqueWin32";
20737af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
20738af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image: return "D3D11Image";
20739af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt: return "D3D11ImageKmt";
20740af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    default: return "invalid";
20741af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
20742af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  }
20743af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
20744af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  inline std::string to_string(ExternalMemoryHandleTypeFlagsNV value)
20745af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
20746af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (!value) return "{}";
20747af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    std::string result;
20748af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32) result += "OpaqueWin32 | ";
20749af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
20750af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image) result += "D3D11Image | ";
20751af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt) result += "D3D11ImageKmt | ";
20752af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    return "{" + result.substr(0, result.size() - 3) + "}";
20753af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  }
20754af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
20755af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  inline std::string to_string(ExternalMemoryFeatureFlagBitsNV value)
20756af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
20757af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    switch (value)
20758af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    {
20759af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly";
20760af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryFeatureFlagBitsNV::eExportable: return "Exportable";
20761af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    case ExternalMemoryFeatureFlagBitsNV::eImportable: return "Importable";
20762af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    default: return "invalid";
20763af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    }
20764af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  }
20765af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
20766af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  inline std::string to_string(ExternalMemoryFeatureFlagsNV value)
20767af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  {
20768af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (!value) return "{}";
20769af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    std::string result;
20770af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly) result += "DedicatedOnly | ";
20771af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryFeatureFlagBitsNV::eExportable) result += "Exportable | ";
20772af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    if (value & ExternalMemoryFeatureFlagBitsNV::eImportable) result += "Importable | ";
20773af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter    return "{" + result.substr(0, result.size() - 3) + "}";
20774af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter  }
20775af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter
207765b8df846785da667163755e11aa07599c02fd28dLenny Komow  inline std::string to_string(ValidationCheckEXT value)
207775b8df846785da667163755e11aa07599c02fd28dLenny Komow  {
207785b8df846785da667163755e11aa07599c02fd28dLenny Komow    switch (value)
207795b8df846785da667163755e11aa07599c02fd28dLenny Komow    {
207805b8df846785da667163755e11aa07599c02fd28dLenny Komow    case ValidationCheckEXT::eAll: return "All";
207815b8df846785da667163755e11aa07599c02fd28dLenny Komow    default: return "invalid";
207825b8df846785da667163755e11aa07599c02fd28dLenny Komow    }
207835b8df846785da667163755e11aa07599c02fd28dLenny Komow  }
207845b8df846785da667163755e11aa07599c02fd28dLenny Komow
20785b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow} // namespace vk
20786b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow
20787b0a17f2ff9e0f5466fa7f9142db8128144175cafLenny Komow#endif
20788