xref: /aosp_15_r20/external/swiftshader/include/vulkan/vulkan_shared.hpp (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2015-2024 The Khronos Group Inc.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 OR MIT
4*03ce13f7SAndroid Build Coastguard Worker //
5*03ce13f7SAndroid Build Coastguard Worker 
6*03ce13f7SAndroid Build Coastguard Worker // This header is generated from the Khronos Vulkan XML API Registry.
7*03ce13f7SAndroid Build Coastguard Worker 
8*03ce13f7SAndroid Build Coastguard Worker #ifndef VULKAN_SHARED_HPP
9*03ce13f7SAndroid Build Coastguard Worker #define VULKAN_SHARED_HPP
10*03ce13f7SAndroid Build Coastguard Worker 
11*03ce13f7SAndroid Build Coastguard Worker #include <atomic>  // std::atomic_size_t
12*03ce13f7SAndroid Build Coastguard Worker #include <vulkan/vulkan.hpp>
13*03ce13f7SAndroid Build Coastguard Worker 
14*03ce13f7SAndroid Build Coastguard Worker namespace VULKAN_HPP_NAMESPACE
15*03ce13f7SAndroid Build Coastguard Worker {
16*03ce13f7SAndroid Build Coastguard Worker #if !defined( VULKAN_HPP_NO_SMART_HANDLE )
17*03ce13f7SAndroid Build Coastguard Worker 
18*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
19*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits;
20*03ce13f7SAndroid Build Coastguard Worker 
21*03ce13f7SAndroid Build Coastguard Worker   class NoDestructor
22*03ce13f7SAndroid Build Coastguard Worker   {
23*03ce13f7SAndroid Build Coastguard Worker   };
24*03ce13f7SAndroid Build Coastguard Worker 
25*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType, typename = void>
26*03ce13f7SAndroid Build Coastguard Worker   struct HasDestructorType : std::false_type
27*03ce13f7SAndroid Build Coastguard Worker   {
28*03ce13f7SAndroid Build Coastguard Worker   };
29*03ce13f7SAndroid Build Coastguard Worker 
30*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
31*03ce13f7SAndroid Build Coastguard Worker   struct HasDestructorType<HandleType, decltype( (void)typename SharedHandleTraits<HandleType>::DestructorType() )> : std::true_type
32*03ce13f7SAndroid Build Coastguard Worker   {
33*03ce13f7SAndroid Build Coastguard Worker   };
34*03ce13f7SAndroid Build Coastguard Worker 
35*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType, typename Enable = void>
36*03ce13f7SAndroid Build Coastguard Worker   struct GetDestructorType
37*03ce13f7SAndroid Build Coastguard Worker   {
38*03ce13f7SAndroid Build Coastguard Worker     using type = NoDestructor;
39*03ce13f7SAndroid Build Coastguard Worker   };
40*03ce13f7SAndroid Build Coastguard Worker 
41*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
42*03ce13f7SAndroid Build Coastguard Worker   struct GetDestructorType<HandleType, typename std::enable_if<HasDestructorType<HandleType>::value>::type>
43*03ce13f7SAndroid Build Coastguard Worker   {
44*03ce13f7SAndroid Build Coastguard Worker     using type = typename SharedHandleTraits<HandleType>::DestructorType;
45*03ce13f7SAndroid Build Coastguard Worker   };
46*03ce13f7SAndroid Build Coastguard Worker 
47*03ce13f7SAndroid Build Coastguard Worker   template <class HandleType>
48*03ce13f7SAndroid Build Coastguard Worker   using DestructorTypeOf = typename GetDestructorType<HandleType>::type;
49*03ce13f7SAndroid Build Coastguard Worker 
50*03ce13f7SAndroid Build Coastguard Worker   template <class HandleType>
51*03ce13f7SAndroid Build Coastguard Worker   struct HasDestructor : std::integral_constant<bool, !std::is_same<DestructorTypeOf<HandleType>, NoDestructor>::value>
52*03ce13f7SAndroid Build Coastguard Worker   {
53*03ce13f7SAndroid Build Coastguard Worker   };
54*03ce13f7SAndroid Build Coastguard Worker 
55*03ce13f7SAndroid Build Coastguard Worker   //=====================================================================================================================
56*03ce13f7SAndroid Build Coastguard Worker 
57*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
58*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle;
59*03ce13f7SAndroid Build Coastguard Worker 
60*03ce13f7SAndroid Build Coastguard Worker   template <typename DestructorType, typename Deleter>
61*03ce13f7SAndroid Build Coastguard Worker   struct SharedHeader
62*03ce13f7SAndroid Build Coastguard Worker   {
SharedHeaderVULKAN_HPP_NAMESPACE::SharedHeader63*03ce13f7SAndroid Build Coastguard Worker     SharedHeader( SharedHandle<DestructorType> parent, Deleter deleter = Deleter() ) VULKAN_HPP_NOEXCEPT
64*03ce13f7SAndroid Build Coastguard Worker       : parent( std::move( parent ) )
65*03ce13f7SAndroid Build Coastguard Worker       , deleter( std::move( deleter ) )
66*03ce13f7SAndroid Build Coastguard Worker     {
67*03ce13f7SAndroid Build Coastguard Worker     }
68*03ce13f7SAndroid Build Coastguard Worker 
69*03ce13f7SAndroid Build Coastguard Worker     SharedHandle<DestructorType> parent;
70*03ce13f7SAndroid Build Coastguard Worker     Deleter                      deleter;
71*03ce13f7SAndroid Build Coastguard Worker   };
72*03ce13f7SAndroid Build Coastguard Worker 
73*03ce13f7SAndroid Build Coastguard Worker   template <typename Deleter>
74*03ce13f7SAndroid Build Coastguard Worker   struct SharedHeader<NoDestructor, Deleter>
75*03ce13f7SAndroid Build Coastguard Worker   {
SharedHeaderVULKAN_HPP_NAMESPACE::SharedHeader76*03ce13f7SAndroid Build Coastguard Worker     SharedHeader( Deleter deleter = Deleter() ) VULKAN_HPP_NOEXCEPT : deleter( std::move( deleter ) ) {}
77*03ce13f7SAndroid Build Coastguard Worker 
78*03ce13f7SAndroid Build Coastguard Worker     Deleter deleter;
79*03ce13f7SAndroid Build Coastguard Worker   };
80*03ce13f7SAndroid Build Coastguard Worker 
81*03ce13f7SAndroid Build Coastguard Worker   //=====================================================================================================================
82*03ce13f7SAndroid Build Coastguard Worker 
83*03ce13f7SAndroid Build Coastguard Worker   template <typename HeaderType>
84*03ce13f7SAndroid Build Coastguard Worker   class ReferenceCounter
85*03ce13f7SAndroid Build Coastguard Worker   {
86*03ce13f7SAndroid Build Coastguard Worker   public:
87*03ce13f7SAndroid Build Coastguard Worker     template <typename... Args>
ReferenceCounter(Args &&...control_args)88*03ce13f7SAndroid Build Coastguard Worker     ReferenceCounter( Args &&... control_args ) : m_header( std::forward<Args>( control_args )... )
89*03ce13f7SAndroid Build Coastguard Worker     {
90*03ce13f7SAndroid Build Coastguard Worker     }
91*03ce13f7SAndroid Build Coastguard Worker 
92*03ce13f7SAndroid Build Coastguard Worker     ReferenceCounter( const ReferenceCounter & )             = delete;
93*03ce13f7SAndroid Build Coastguard Worker     ReferenceCounter & operator=( const ReferenceCounter & ) = delete;
94*03ce13f7SAndroid Build Coastguard Worker 
95*03ce13f7SAndroid Build Coastguard Worker   public:
addRef()96*03ce13f7SAndroid Build Coastguard Worker     size_t addRef() VULKAN_HPP_NOEXCEPT
97*03ce13f7SAndroid Build Coastguard Worker     {
98*03ce13f7SAndroid Build Coastguard Worker       // Relaxed memory order is sufficient since this does not impose any ordering on other operations
99*03ce13f7SAndroid Build Coastguard Worker       return m_ref_cnt.fetch_add( 1, std::memory_order_relaxed );
100*03ce13f7SAndroid Build Coastguard Worker     }
101*03ce13f7SAndroid Build Coastguard Worker 
release()102*03ce13f7SAndroid Build Coastguard Worker     size_t release() VULKAN_HPP_NOEXCEPT
103*03ce13f7SAndroid Build Coastguard Worker     {
104*03ce13f7SAndroid Build Coastguard Worker       // A release memory order to ensure that all releases are ordered
105*03ce13f7SAndroid Build Coastguard Worker       return m_ref_cnt.fetch_sub( 1, std::memory_order_release );
106*03ce13f7SAndroid Build Coastguard Worker     }
107*03ce13f7SAndroid Build Coastguard Worker 
108*03ce13f7SAndroid Build Coastguard Worker   public:
109*03ce13f7SAndroid Build Coastguard Worker     std::atomic_size_t m_ref_cnt{ 1 };
110*03ce13f7SAndroid Build Coastguard Worker     HeaderType         m_header{};
111*03ce13f7SAndroid Build Coastguard Worker   };
112*03ce13f7SAndroid Build Coastguard Worker 
113*03ce13f7SAndroid Build Coastguard Worker   //=====================================================================================================================
114*03ce13f7SAndroid Build Coastguard Worker 
115*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType, typename HeaderType, typename ForwardType = SharedHandle<HandleType>>
116*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleBase
117*03ce13f7SAndroid Build Coastguard Worker   {
118*03ce13f7SAndroid Build Coastguard Worker   public:
119*03ce13f7SAndroid Build Coastguard Worker     SharedHandleBase() = default;
120*03ce13f7SAndroid Build Coastguard Worker 
121*03ce13f7SAndroid Build Coastguard Worker     template <typename... Args>
SharedHandleBase(HandleType handle,Args &&...control_args)122*03ce13f7SAndroid Build Coastguard Worker     SharedHandleBase( HandleType handle, Args &&... control_args )
123*03ce13f7SAndroid Build Coastguard Worker       : m_control( new ReferenceCounter<HeaderType>( std::forward<Args>( control_args )... ) ), m_handle( handle )
124*03ce13f7SAndroid Build Coastguard Worker     {
125*03ce13f7SAndroid Build Coastguard Worker     }
126*03ce13f7SAndroid Build Coastguard Worker 
SharedHandleBase(const SharedHandleBase & o)127*03ce13f7SAndroid Build Coastguard Worker     SharedHandleBase( const SharedHandleBase & o ) VULKAN_HPP_NOEXCEPT
128*03ce13f7SAndroid Build Coastguard Worker     {
129*03ce13f7SAndroid Build Coastguard Worker       o.addRef();
130*03ce13f7SAndroid Build Coastguard Worker       m_handle  = o.m_handle;
131*03ce13f7SAndroid Build Coastguard Worker       m_control = o.m_control;
132*03ce13f7SAndroid Build Coastguard Worker     }
133*03ce13f7SAndroid Build Coastguard Worker 
SharedHandleBase(SharedHandleBase && o)134*03ce13f7SAndroid Build Coastguard Worker     SharedHandleBase( SharedHandleBase && o ) VULKAN_HPP_NOEXCEPT
135*03ce13f7SAndroid Build Coastguard Worker       : m_control( o.m_control )
136*03ce13f7SAndroid Build Coastguard Worker       , m_handle( o.m_handle )
137*03ce13f7SAndroid Build Coastguard Worker     {
138*03ce13f7SAndroid Build Coastguard Worker       o.m_handle  = nullptr;
139*03ce13f7SAndroid Build Coastguard Worker       o.m_control = nullptr;
140*03ce13f7SAndroid Build Coastguard Worker     }
141*03ce13f7SAndroid Build Coastguard Worker 
operator =(const SharedHandleBase & o)142*03ce13f7SAndroid Build Coastguard Worker     SharedHandleBase & operator=( const SharedHandleBase & o ) VULKAN_HPP_NOEXCEPT
143*03ce13f7SAndroid Build Coastguard Worker     {
144*03ce13f7SAndroid Build Coastguard Worker       SharedHandleBase( o ).swap( *this );
145*03ce13f7SAndroid Build Coastguard Worker       return *this;
146*03ce13f7SAndroid Build Coastguard Worker     }
147*03ce13f7SAndroid Build Coastguard Worker 
operator =(SharedHandleBase && o)148*03ce13f7SAndroid Build Coastguard Worker     SharedHandleBase & operator=( SharedHandleBase && o ) VULKAN_HPP_NOEXCEPT
149*03ce13f7SAndroid Build Coastguard Worker     {
150*03ce13f7SAndroid Build Coastguard Worker       SharedHandleBase( std::move( o ) ).swap( *this );
151*03ce13f7SAndroid Build Coastguard Worker       return *this;
152*03ce13f7SAndroid Build Coastguard Worker     }
153*03ce13f7SAndroid Build Coastguard Worker 
~SharedHandleBase()154*03ce13f7SAndroid Build Coastguard Worker     ~SharedHandleBase()
155*03ce13f7SAndroid Build Coastguard Worker     {
156*03ce13f7SAndroid Build Coastguard Worker       // only this function owns the last reference to the control block
157*03ce13f7SAndroid Build Coastguard Worker       // the same principle is used in the default deleter of std::shared_ptr
158*03ce13f7SAndroid Build Coastguard Worker       if ( m_control && ( m_control->release() == 1 ) )
159*03ce13f7SAndroid Build Coastguard Worker       {
160*03ce13f7SAndroid Build Coastguard Worker         // noop in x86, but does thread synchronization in ARM
161*03ce13f7SAndroid Build Coastguard Worker         // it is required to ensure that last thread is getting to destroy the control block
162*03ce13f7SAndroid Build Coastguard Worker         // by ordering all atomic operations before this fence
163*03ce13f7SAndroid Build Coastguard Worker         std::atomic_thread_fence( std::memory_order_acquire );
164*03ce13f7SAndroid Build Coastguard Worker         ForwardType::internalDestroy( getHeader(), m_handle );
165*03ce13f7SAndroid Build Coastguard Worker         delete m_control;
166*03ce13f7SAndroid Build Coastguard Worker       }
167*03ce13f7SAndroid Build Coastguard Worker     }
168*03ce13f7SAndroid Build Coastguard Worker 
169*03ce13f7SAndroid Build Coastguard Worker   public:
get() const170*03ce13f7SAndroid Build Coastguard Worker     HandleType get() const VULKAN_HPP_NOEXCEPT
171*03ce13f7SAndroid Build Coastguard Worker     {
172*03ce13f7SAndroid Build Coastguard Worker       return m_handle;
173*03ce13f7SAndroid Build Coastguard Worker     }
174*03ce13f7SAndroid Build Coastguard Worker 
operator *() const175*03ce13f7SAndroid Build Coastguard Worker     HandleType operator*() const VULKAN_HPP_NOEXCEPT
176*03ce13f7SAndroid Build Coastguard Worker     {
177*03ce13f7SAndroid Build Coastguard Worker       return m_handle;
178*03ce13f7SAndroid Build Coastguard Worker     }
179*03ce13f7SAndroid Build Coastguard Worker 
operator bool() const180*03ce13f7SAndroid Build Coastguard Worker     explicit operator bool() const VULKAN_HPP_NOEXCEPT
181*03ce13f7SAndroid Build Coastguard Worker     {
182*03ce13f7SAndroid Build Coastguard Worker       return bool( m_handle );
183*03ce13f7SAndroid Build Coastguard Worker     }
184*03ce13f7SAndroid Build Coastguard Worker 
185*03ce13f7SAndroid Build Coastguard Worker #  if defined( VULKAN_HPP_SMART_HANDLE_IMPLICIT_CAST )
operator HandleType() const186*03ce13f7SAndroid Build Coastguard Worker     operator HandleType() const VULKAN_HPP_NOEXCEPT
187*03ce13f7SAndroid Build Coastguard Worker     {
188*03ce13f7SAndroid Build Coastguard Worker       return m_handle;
189*03ce13f7SAndroid Build Coastguard Worker     }
190*03ce13f7SAndroid Build Coastguard Worker #  endif
191*03ce13f7SAndroid Build Coastguard Worker 
operator ->() const192*03ce13f7SAndroid Build Coastguard Worker     const HandleType * operator->() const VULKAN_HPP_NOEXCEPT
193*03ce13f7SAndroid Build Coastguard Worker     {
194*03ce13f7SAndroid Build Coastguard Worker       return &m_handle;
195*03ce13f7SAndroid Build Coastguard Worker     }
196*03ce13f7SAndroid Build Coastguard Worker 
operator ->()197*03ce13f7SAndroid Build Coastguard Worker     HandleType * operator->() VULKAN_HPP_NOEXCEPT
198*03ce13f7SAndroid Build Coastguard Worker     {
199*03ce13f7SAndroid Build Coastguard Worker       return &m_handle;
200*03ce13f7SAndroid Build Coastguard Worker     }
201*03ce13f7SAndroid Build Coastguard Worker 
reset()202*03ce13f7SAndroid Build Coastguard Worker     void reset() VULKAN_HPP_NOEXCEPT
203*03ce13f7SAndroid Build Coastguard Worker     {
204*03ce13f7SAndroid Build Coastguard Worker       SharedHandleBase().swap( *this );
205*03ce13f7SAndroid Build Coastguard Worker     }
206*03ce13f7SAndroid Build Coastguard Worker 
swap(SharedHandleBase & o)207*03ce13f7SAndroid Build Coastguard Worker     void swap( SharedHandleBase & o ) VULKAN_HPP_NOEXCEPT
208*03ce13f7SAndroid Build Coastguard Worker     {
209*03ce13f7SAndroid Build Coastguard Worker       std::swap( m_handle, o.m_handle );
210*03ce13f7SAndroid Build Coastguard Worker       std::swap( m_control, o.m_control );
211*03ce13f7SAndroid Build Coastguard Worker     }
212*03ce13f7SAndroid Build Coastguard Worker 
213*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType>
getDestructorType() const214*03ce13f7SAndroid Build Coastguard Worker     typename std::enable_if<HasDestructor<T>::value, const SharedHandle<DestructorTypeOf<HandleType>> &>::type getDestructorType() const VULKAN_HPP_NOEXCEPT
215*03ce13f7SAndroid Build Coastguard Worker     {
216*03ce13f7SAndroid Build Coastguard Worker       return getHeader().parent;
217*03ce13f7SAndroid Build Coastguard Worker     }
218*03ce13f7SAndroid Build Coastguard Worker 
219*03ce13f7SAndroid Build Coastguard Worker   protected:
220*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType>
internalDestroy(const HeaderType & control,HandleType handle)221*03ce13f7SAndroid Build Coastguard Worker     static typename std::enable_if<!HasDestructor<T>::value, void>::type internalDestroy( const HeaderType & control, HandleType handle ) VULKAN_HPP_NOEXCEPT
222*03ce13f7SAndroid Build Coastguard Worker     {
223*03ce13f7SAndroid Build Coastguard Worker       control.deleter.destroy( handle );
224*03ce13f7SAndroid Build Coastguard Worker     }
225*03ce13f7SAndroid Build Coastguard Worker 
226*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType>
internalDestroy(const HeaderType & control,HandleType handle)227*03ce13f7SAndroid Build Coastguard Worker     static typename std::enable_if<HasDestructor<T>::value, void>::type internalDestroy( const HeaderType & control, HandleType handle ) VULKAN_HPP_NOEXCEPT
228*03ce13f7SAndroid Build Coastguard Worker     {
229*03ce13f7SAndroid Build Coastguard Worker       control.deleter.destroy( control.parent.get(), handle );
230*03ce13f7SAndroid Build Coastguard Worker     }
231*03ce13f7SAndroid Build Coastguard Worker 
getHeader() const232*03ce13f7SAndroid Build Coastguard Worker     const HeaderType & getHeader() const VULKAN_HPP_NOEXCEPT
233*03ce13f7SAndroid Build Coastguard Worker     {
234*03ce13f7SAndroid Build Coastguard Worker       return m_control->m_header;
235*03ce13f7SAndroid Build Coastguard Worker     }
236*03ce13f7SAndroid Build Coastguard Worker 
237*03ce13f7SAndroid Build Coastguard Worker   private:
addRef() const238*03ce13f7SAndroid Build Coastguard Worker     void addRef() const VULKAN_HPP_NOEXCEPT
239*03ce13f7SAndroid Build Coastguard Worker     {
240*03ce13f7SAndroid Build Coastguard Worker       if ( m_control )
241*03ce13f7SAndroid Build Coastguard Worker         m_control->addRef();
242*03ce13f7SAndroid Build Coastguard Worker     }
243*03ce13f7SAndroid Build Coastguard Worker 
244*03ce13f7SAndroid Build Coastguard Worker   protected:
245*03ce13f7SAndroid Build Coastguard Worker     ReferenceCounter<HeaderType> * m_control = nullptr;
246*03ce13f7SAndroid Build Coastguard Worker     HandleType                     m_handle{};
247*03ce13f7SAndroid Build Coastguard Worker   };
248*03ce13f7SAndroid Build Coastguard Worker 
249*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
250*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle : public SharedHandleBase<HandleType, SharedHeader<DestructorTypeOf<HandleType>, typename SharedHandleTraits<HandleType>::deleter>>
251*03ce13f7SAndroid Build Coastguard Worker   {
252*03ce13f7SAndroid Build Coastguard Worker   private:
253*03ce13f7SAndroid Build Coastguard Worker     using BaseType    = SharedHandleBase<HandleType, SharedHeader<DestructorTypeOf<HandleType>, typename SharedHandleTraits<HandleType>::deleter>>;
254*03ce13f7SAndroid Build Coastguard Worker     using DeleterType = typename SharedHandleTraits<HandleType>::deleter;
255*03ce13f7SAndroid Build Coastguard Worker     friend BaseType;
256*03ce13f7SAndroid Build Coastguard Worker 
257*03ce13f7SAndroid Build Coastguard Worker   public:
258*03ce13f7SAndroid Build Coastguard Worker     SharedHandle() = default;
259*03ce13f7SAndroid Build Coastguard Worker 
260*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType, typename = typename std::enable_if<HasDestructor<T>::value>::type>
SharedHandle(HandleType handle,SharedHandle<DestructorTypeOf<HandleType>> parent,DeleterType deleter=DeleterType ())261*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( HandleType handle, SharedHandle<DestructorTypeOf<HandleType>> parent, DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT
262*03ce13f7SAndroid Build Coastguard Worker       : BaseType( handle, std::move( parent ), std::move( deleter ) )
263*03ce13f7SAndroid Build Coastguard Worker     {
264*03ce13f7SAndroid Build Coastguard Worker     }
265*03ce13f7SAndroid Build Coastguard Worker 
266*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType, typename = typename std::enable_if<!HasDestructor<T>::value>::type>
SharedHandle(HandleType handle,DeleterType deleter=DeleterType ())267*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( HandleType handle, DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT : BaseType( handle, std::move( deleter ) )
268*03ce13f7SAndroid Build Coastguard Worker     {
269*03ce13f7SAndroid Build Coastguard Worker     }
270*03ce13f7SAndroid Build Coastguard Worker 
271*03ce13f7SAndroid Build Coastguard Worker   protected:
272*03ce13f7SAndroid Build Coastguard Worker     using BaseType::internalDestroy;
273*03ce13f7SAndroid Build Coastguard Worker   };
274*03ce13f7SAndroid Build Coastguard Worker 
275*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
276*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits;
277*03ce13f7SAndroid Build Coastguard Worker 
278*03ce13f7SAndroid Build Coastguard Worker // Silence the function cast warnings.
279*03ce13f7SAndroid Build Coastguard Worker #  if defined( __GNUC__ ) && !defined( __clang__ ) && !defined( __INTEL_COMPILER )
280*03ce13f7SAndroid Build Coastguard Worker #    pragma GCC diagnostic push
281*03ce13f7SAndroid Build Coastguard Worker #    pragma GCC diagnostic ignored "-Wcast-function-type"
282*03ce13f7SAndroid Build Coastguard Worker #  endif
283*03ce13f7SAndroid Build Coastguard Worker 
284*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
285*03ce13f7SAndroid Build Coastguard Worker   class ObjectDestroyShared
286*03ce13f7SAndroid Build Coastguard Worker   {
287*03ce13f7SAndroid Build Coastguard Worker   public:
288*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
289*03ce13f7SAndroid Build Coastguard Worker 
290*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher>
291*03ce13f7SAndroid Build Coastguard Worker     using DestroyFunctionPointerType =
292*03ce13f7SAndroid Build Coastguard Worker       typename std::conditional<HasDestructor<HandleType>::value,
293*03ce13f7SAndroid Build Coastguard Worker                                 void ( DestructorType::* )( HandleType, const AllocationCallbacks *, const Dispatcher & ) const,
294*03ce13f7SAndroid Build Coastguard Worker                                 void ( HandleType::* )( const AllocationCallbacks *, const Dispatcher & ) const>::type;
295*03ce13f7SAndroid Build Coastguard Worker 
296*03ce13f7SAndroid Build Coastguard Worker     using SelectorType = typename std::conditional<HasDestructor<HandleType>::value, DestructorType, HandleType>::type;
297*03ce13f7SAndroid Build Coastguard Worker 
298*03ce13f7SAndroid Build Coastguard Worker     template <typename Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
ObjectDestroyShared(Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT)299*03ce13f7SAndroid Build Coastguard Worker     ObjectDestroyShared( Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
300*03ce13f7SAndroid Build Coastguard Worker                          const Dispatcher & dispatch                             VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
301*03ce13f7SAndroid Build Coastguard Worker       : m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &SelectorType::destroy ) ) )
302*03ce13f7SAndroid Build Coastguard Worker       , m_dispatch( &dispatch )
303*03ce13f7SAndroid Build Coastguard Worker       , m_allocationCallbacks( allocationCallbacks )
304*03ce13f7SAndroid Build Coastguard Worker     {
305*03ce13f7SAndroid Build Coastguard Worker     }
306*03ce13f7SAndroid Build Coastguard Worker 
307*03ce13f7SAndroid Build Coastguard Worker   public:
308*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType>
destroy(DestructorType parent,HandleType handle) const309*03ce13f7SAndroid Build Coastguard Worker     typename std::enable_if<HasDestructor<T>::value, void>::type destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT
310*03ce13f7SAndroid Build Coastguard Worker     {
311*03ce13f7SAndroid Build Coastguard Worker       VULKAN_HPP_ASSERT( m_destroy && m_dispatch );
312*03ce13f7SAndroid Build Coastguard Worker       ( parent.*m_destroy )( handle, m_allocationCallbacks, *m_dispatch );
313*03ce13f7SAndroid Build Coastguard Worker     }
314*03ce13f7SAndroid Build Coastguard Worker 
315*03ce13f7SAndroid Build Coastguard Worker     template <typename T = HandleType>
destroy(HandleType handle) const316*03ce13f7SAndroid Build Coastguard Worker     typename std::enable_if<!HasDestructor<T>::value, void>::type destroy( HandleType handle ) const VULKAN_HPP_NOEXCEPT
317*03ce13f7SAndroid Build Coastguard Worker     {
318*03ce13f7SAndroid Build Coastguard Worker       VULKAN_HPP_ASSERT( m_destroy && m_dispatch );
319*03ce13f7SAndroid Build Coastguard Worker       ( handle.*m_destroy )( m_allocationCallbacks, *m_dispatch );
320*03ce13f7SAndroid Build Coastguard Worker     }
321*03ce13f7SAndroid Build Coastguard Worker 
322*03ce13f7SAndroid Build Coastguard Worker   private:
323*03ce13f7SAndroid Build Coastguard Worker     DestroyFunctionPointerType<DispatchLoaderBase> m_destroy             = nullptr;
324*03ce13f7SAndroid Build Coastguard Worker     const DispatchLoaderBase *                     m_dispatch            = nullptr;
325*03ce13f7SAndroid Build Coastguard Worker     Optional<const AllocationCallbacks>            m_allocationCallbacks = nullptr;
326*03ce13f7SAndroid Build Coastguard Worker   };
327*03ce13f7SAndroid Build Coastguard Worker 
328*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
329*03ce13f7SAndroid Build Coastguard Worker   class ObjectFreeShared
330*03ce13f7SAndroid Build Coastguard Worker   {
331*03ce13f7SAndroid Build Coastguard Worker   public:
332*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
333*03ce13f7SAndroid Build Coastguard Worker 
334*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher>
335*03ce13f7SAndroid Build Coastguard Worker     using DestroyFunctionPointerType = void ( DestructorType::* )( HandleType, const AllocationCallbacks *, const Dispatcher & ) const;
336*03ce13f7SAndroid Build Coastguard Worker 
337*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
ObjectFreeShared(Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT)338*03ce13f7SAndroid Build Coastguard Worker     ObjectFreeShared( Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
339*03ce13f7SAndroid Build Coastguard Worker                       const Dispatcher & dispatch                             VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
340*03ce13f7SAndroid Build Coastguard Worker       : m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &DestructorType::free ) ) )
341*03ce13f7SAndroid Build Coastguard Worker       , m_dispatch( &dispatch )
342*03ce13f7SAndroid Build Coastguard Worker       , m_allocationCallbacks( allocationCallbacks )
343*03ce13f7SAndroid Build Coastguard Worker     {
344*03ce13f7SAndroid Build Coastguard Worker     }
345*03ce13f7SAndroid Build Coastguard Worker 
346*03ce13f7SAndroid Build Coastguard Worker   public:
destroy(DestructorType parent,HandleType handle) const347*03ce13f7SAndroid Build Coastguard Worker     void destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT
348*03ce13f7SAndroid Build Coastguard Worker     {
349*03ce13f7SAndroid Build Coastguard Worker       VULKAN_HPP_ASSERT( m_destroy && m_dispatch );
350*03ce13f7SAndroid Build Coastguard Worker       ( parent.*m_destroy )( handle, m_allocationCallbacks, *m_dispatch );
351*03ce13f7SAndroid Build Coastguard Worker     }
352*03ce13f7SAndroid Build Coastguard Worker 
353*03ce13f7SAndroid Build Coastguard Worker   private:
354*03ce13f7SAndroid Build Coastguard Worker     DestroyFunctionPointerType<DispatchLoaderBase> m_destroy             = nullptr;
355*03ce13f7SAndroid Build Coastguard Worker     const DispatchLoaderBase *                     m_dispatch            = nullptr;
356*03ce13f7SAndroid Build Coastguard Worker     Optional<const AllocationCallbacks>            m_allocationCallbacks = nullptr;
357*03ce13f7SAndroid Build Coastguard Worker   };
358*03ce13f7SAndroid Build Coastguard Worker 
359*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType>
360*03ce13f7SAndroid Build Coastguard Worker   class ObjectReleaseShared
361*03ce13f7SAndroid Build Coastguard Worker   {
362*03ce13f7SAndroid Build Coastguard Worker   public:
363*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
364*03ce13f7SAndroid Build Coastguard Worker 
365*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher>
366*03ce13f7SAndroid Build Coastguard Worker     using DestroyFunctionPointerType = void ( DestructorType::* )( HandleType, const Dispatcher & ) const;
367*03ce13f7SAndroid Build Coastguard Worker 
368*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
ObjectReleaseShared(const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT)369*03ce13f7SAndroid Build Coastguard Worker     ObjectReleaseShared( const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
370*03ce13f7SAndroid Build Coastguard Worker       : m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &DestructorType::release ) ) )
371*03ce13f7SAndroid Build Coastguard Worker       , m_dispatch( &dispatch )
372*03ce13f7SAndroid Build Coastguard Worker     {
373*03ce13f7SAndroid Build Coastguard Worker     }
374*03ce13f7SAndroid Build Coastguard Worker 
375*03ce13f7SAndroid Build Coastguard Worker   public:
destroy(DestructorType parent,HandleType handle) const376*03ce13f7SAndroid Build Coastguard Worker     void destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT
377*03ce13f7SAndroid Build Coastguard Worker     {
378*03ce13f7SAndroid Build Coastguard Worker       VULKAN_HPP_ASSERT( m_destroy && m_dispatch );
379*03ce13f7SAndroid Build Coastguard Worker       ( parent.*m_destroy )( handle, *m_dispatch );
380*03ce13f7SAndroid Build Coastguard Worker     }
381*03ce13f7SAndroid Build Coastguard Worker 
382*03ce13f7SAndroid Build Coastguard Worker   private:
383*03ce13f7SAndroid Build Coastguard Worker     DestroyFunctionPointerType<DispatchLoaderBase> m_destroy  = nullptr;
384*03ce13f7SAndroid Build Coastguard Worker     const DispatchLoaderBase *                     m_dispatch = nullptr;
385*03ce13f7SAndroid Build Coastguard Worker   };
386*03ce13f7SAndroid Build Coastguard Worker 
387*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType, typename PoolType>
388*03ce13f7SAndroid Build Coastguard Worker   class PoolFreeShared
389*03ce13f7SAndroid Build Coastguard Worker   {
390*03ce13f7SAndroid Build Coastguard Worker   public:
391*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
392*03ce13f7SAndroid Build Coastguard Worker 
393*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher>
394*03ce13f7SAndroid Build Coastguard Worker     using ReturnType = decltype( std::declval<DestructorType>().free( PoolType(), 0u, nullptr, Dispatcher() ) );
395*03ce13f7SAndroid Build Coastguard Worker 
396*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher>
397*03ce13f7SAndroid Build Coastguard Worker     using DestroyFunctionPointerType = ReturnType<Dispatcher> ( DestructorType::* )( PoolType, uint32_t, const HandleType *, const Dispatcher & ) const;
398*03ce13f7SAndroid Build Coastguard Worker 
399*03ce13f7SAndroid Build Coastguard Worker     PoolFreeShared() = default;
400*03ce13f7SAndroid Build Coastguard Worker 
401*03ce13f7SAndroid Build Coastguard Worker     template <class Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
PoolFreeShared(SharedHandle<PoolType> pool,const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT)402*03ce13f7SAndroid Build Coastguard Worker     PoolFreeShared( SharedHandle<PoolType> pool, const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
403*03ce13f7SAndroid Build Coastguard Worker       : m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &DestructorType::free ) ) )
404*03ce13f7SAndroid Build Coastguard Worker       , m_dispatch( &dispatch )
405*03ce13f7SAndroid Build Coastguard Worker       , m_pool( std::move( pool ) )
406*03ce13f7SAndroid Build Coastguard Worker     {
407*03ce13f7SAndroid Build Coastguard Worker     }
408*03ce13f7SAndroid Build Coastguard Worker 
409*03ce13f7SAndroid Build Coastguard Worker   public:
destroy(DestructorType parent,HandleType handle) const410*03ce13f7SAndroid Build Coastguard Worker     void destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT
411*03ce13f7SAndroid Build Coastguard Worker     {
412*03ce13f7SAndroid Build Coastguard Worker       VULKAN_HPP_ASSERT( m_destroy && m_dispatch );
413*03ce13f7SAndroid Build Coastguard Worker       ( parent.*m_destroy )( m_pool.get(), 1u, &handle, *m_dispatch );
414*03ce13f7SAndroid Build Coastguard Worker     }
415*03ce13f7SAndroid Build Coastguard Worker 
416*03ce13f7SAndroid Build Coastguard Worker   private:
417*03ce13f7SAndroid Build Coastguard Worker     DestroyFunctionPointerType<DispatchLoaderBase> m_destroy  = nullptr;
418*03ce13f7SAndroid Build Coastguard Worker     const DispatchLoaderBase *                     m_dispatch = nullptr;
419*03ce13f7SAndroid Build Coastguard Worker     SharedHandle<PoolType>                         m_pool{};
420*03ce13f7SAndroid Build Coastguard Worker   };
421*03ce13f7SAndroid Build Coastguard Worker 
422*03ce13f7SAndroid Build Coastguard Worker #  if defined( __GNUC__ ) && !defined( __clang__ ) && !defined( __INTEL_COMPILER )
423*03ce13f7SAndroid Build Coastguard Worker #    pragma GCC diagnostic pop
424*03ce13f7SAndroid Build Coastguard Worker #  endif
425*03ce13f7SAndroid Build Coastguard Worker 
426*03ce13f7SAndroid Build Coastguard Worker   //======================
427*03ce13f7SAndroid Build Coastguard Worker   //=== SHARED HANDLEs ===
428*03ce13f7SAndroid Build Coastguard Worker   //======================
429*03ce13f7SAndroid Build Coastguard Worker 
430*03ce13f7SAndroid Build Coastguard Worker   //=== VK_VERSION_1_0 ===
431*03ce13f7SAndroid Build Coastguard Worker   template <>
432*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Instance>
433*03ce13f7SAndroid Build Coastguard Worker   {
434*03ce13f7SAndroid Build Coastguard Worker   public:
435*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = NoDestructor;
436*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Instance>;
437*03ce13f7SAndroid Build Coastguard Worker   };
438*03ce13f7SAndroid Build Coastguard Worker 
439*03ce13f7SAndroid Build Coastguard Worker   using SharedInstance = SharedHandle<Instance>;
440*03ce13f7SAndroid Build Coastguard Worker 
441*03ce13f7SAndroid Build Coastguard Worker   template <>
442*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Device>
443*03ce13f7SAndroid Build Coastguard Worker   {
444*03ce13f7SAndroid Build Coastguard Worker   public:
445*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = NoDestructor;
446*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Device>;
447*03ce13f7SAndroid Build Coastguard Worker   };
448*03ce13f7SAndroid Build Coastguard Worker 
449*03ce13f7SAndroid Build Coastguard Worker   using SharedDevice = SharedHandle<Device>;
450*03ce13f7SAndroid Build Coastguard Worker 
451*03ce13f7SAndroid Build Coastguard Worker   template <>
452*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DeviceMemory>
453*03ce13f7SAndroid Build Coastguard Worker   {
454*03ce13f7SAndroid Build Coastguard Worker   public:
455*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
456*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectFreeShared<DeviceMemory>;
457*03ce13f7SAndroid Build Coastguard Worker   };
458*03ce13f7SAndroid Build Coastguard Worker 
459*03ce13f7SAndroid Build Coastguard Worker   using SharedDeviceMemory = SharedHandle<DeviceMemory>;
460*03ce13f7SAndroid Build Coastguard Worker 
461*03ce13f7SAndroid Build Coastguard Worker   template <>
462*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Fence>
463*03ce13f7SAndroid Build Coastguard Worker   {
464*03ce13f7SAndroid Build Coastguard Worker   public:
465*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
466*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Fence>;
467*03ce13f7SAndroid Build Coastguard Worker   };
468*03ce13f7SAndroid Build Coastguard Worker 
469*03ce13f7SAndroid Build Coastguard Worker   using SharedFence = SharedHandle<Fence>;
470*03ce13f7SAndroid Build Coastguard Worker 
471*03ce13f7SAndroid Build Coastguard Worker   template <>
472*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Semaphore>
473*03ce13f7SAndroid Build Coastguard Worker   {
474*03ce13f7SAndroid Build Coastguard Worker   public:
475*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
476*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Semaphore>;
477*03ce13f7SAndroid Build Coastguard Worker   };
478*03ce13f7SAndroid Build Coastguard Worker 
479*03ce13f7SAndroid Build Coastguard Worker   using SharedSemaphore = SharedHandle<Semaphore>;
480*03ce13f7SAndroid Build Coastguard Worker 
481*03ce13f7SAndroid Build Coastguard Worker   template <>
482*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Event>
483*03ce13f7SAndroid Build Coastguard Worker   {
484*03ce13f7SAndroid Build Coastguard Worker   public:
485*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
486*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Event>;
487*03ce13f7SAndroid Build Coastguard Worker   };
488*03ce13f7SAndroid Build Coastguard Worker 
489*03ce13f7SAndroid Build Coastguard Worker   using SharedEvent = SharedHandle<Event>;
490*03ce13f7SAndroid Build Coastguard Worker 
491*03ce13f7SAndroid Build Coastguard Worker   template <>
492*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<QueryPool>
493*03ce13f7SAndroid Build Coastguard Worker   {
494*03ce13f7SAndroid Build Coastguard Worker   public:
495*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
496*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<QueryPool>;
497*03ce13f7SAndroid Build Coastguard Worker   };
498*03ce13f7SAndroid Build Coastguard Worker 
499*03ce13f7SAndroid Build Coastguard Worker   using SharedQueryPool = SharedHandle<QueryPool>;
500*03ce13f7SAndroid Build Coastguard Worker 
501*03ce13f7SAndroid Build Coastguard Worker   template <>
502*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Buffer>
503*03ce13f7SAndroid Build Coastguard Worker   {
504*03ce13f7SAndroid Build Coastguard Worker   public:
505*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
506*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Buffer>;
507*03ce13f7SAndroid Build Coastguard Worker   };
508*03ce13f7SAndroid Build Coastguard Worker 
509*03ce13f7SAndroid Build Coastguard Worker   using SharedBuffer = SharedHandle<Buffer>;
510*03ce13f7SAndroid Build Coastguard Worker 
511*03ce13f7SAndroid Build Coastguard Worker   template <>
512*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<BufferView>
513*03ce13f7SAndroid Build Coastguard Worker   {
514*03ce13f7SAndroid Build Coastguard Worker   public:
515*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
516*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<BufferView>;
517*03ce13f7SAndroid Build Coastguard Worker   };
518*03ce13f7SAndroid Build Coastguard Worker 
519*03ce13f7SAndroid Build Coastguard Worker   using SharedBufferView = SharedHandle<BufferView>;
520*03ce13f7SAndroid Build Coastguard Worker 
521*03ce13f7SAndroid Build Coastguard Worker   template <>
522*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Image>
523*03ce13f7SAndroid Build Coastguard Worker   {
524*03ce13f7SAndroid Build Coastguard Worker   public:
525*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
526*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Image>;
527*03ce13f7SAndroid Build Coastguard Worker   };
528*03ce13f7SAndroid Build Coastguard Worker 
529*03ce13f7SAndroid Build Coastguard Worker   using SharedImage = SharedHandle<Image>;
530*03ce13f7SAndroid Build Coastguard Worker 
531*03ce13f7SAndroid Build Coastguard Worker   template <>
532*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<ImageView>
533*03ce13f7SAndroid Build Coastguard Worker   {
534*03ce13f7SAndroid Build Coastguard Worker   public:
535*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
536*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<ImageView>;
537*03ce13f7SAndroid Build Coastguard Worker   };
538*03ce13f7SAndroid Build Coastguard Worker 
539*03ce13f7SAndroid Build Coastguard Worker   using SharedImageView = SharedHandle<ImageView>;
540*03ce13f7SAndroid Build Coastguard Worker 
541*03ce13f7SAndroid Build Coastguard Worker   template <>
542*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<ShaderModule>
543*03ce13f7SAndroid Build Coastguard Worker   {
544*03ce13f7SAndroid Build Coastguard Worker   public:
545*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
546*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<ShaderModule>;
547*03ce13f7SAndroid Build Coastguard Worker   };
548*03ce13f7SAndroid Build Coastguard Worker 
549*03ce13f7SAndroid Build Coastguard Worker   using SharedShaderModule = SharedHandle<ShaderModule>;
550*03ce13f7SAndroid Build Coastguard Worker 
551*03ce13f7SAndroid Build Coastguard Worker   template <>
552*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<PipelineCache>
553*03ce13f7SAndroid Build Coastguard Worker   {
554*03ce13f7SAndroid Build Coastguard Worker   public:
555*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
556*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<PipelineCache>;
557*03ce13f7SAndroid Build Coastguard Worker   };
558*03ce13f7SAndroid Build Coastguard Worker 
559*03ce13f7SAndroid Build Coastguard Worker   using SharedPipelineCache = SharedHandle<PipelineCache>;
560*03ce13f7SAndroid Build Coastguard Worker 
561*03ce13f7SAndroid Build Coastguard Worker   template <>
562*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Pipeline>
563*03ce13f7SAndroid Build Coastguard Worker   {
564*03ce13f7SAndroid Build Coastguard Worker   public:
565*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
566*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Pipeline>;
567*03ce13f7SAndroid Build Coastguard Worker   };
568*03ce13f7SAndroid Build Coastguard Worker 
569*03ce13f7SAndroid Build Coastguard Worker   using SharedPipeline = SharedHandle<Pipeline>;
570*03ce13f7SAndroid Build Coastguard Worker 
571*03ce13f7SAndroid Build Coastguard Worker   template <>
572*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<PipelineLayout>
573*03ce13f7SAndroid Build Coastguard Worker   {
574*03ce13f7SAndroid Build Coastguard Worker   public:
575*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
576*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<PipelineLayout>;
577*03ce13f7SAndroid Build Coastguard Worker   };
578*03ce13f7SAndroid Build Coastguard Worker 
579*03ce13f7SAndroid Build Coastguard Worker   using SharedPipelineLayout = SharedHandle<PipelineLayout>;
580*03ce13f7SAndroid Build Coastguard Worker 
581*03ce13f7SAndroid Build Coastguard Worker   template <>
582*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Sampler>
583*03ce13f7SAndroid Build Coastguard Worker   {
584*03ce13f7SAndroid Build Coastguard Worker   public:
585*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
586*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Sampler>;
587*03ce13f7SAndroid Build Coastguard Worker   };
588*03ce13f7SAndroid Build Coastguard Worker 
589*03ce13f7SAndroid Build Coastguard Worker   using SharedSampler = SharedHandle<Sampler>;
590*03ce13f7SAndroid Build Coastguard Worker 
591*03ce13f7SAndroid Build Coastguard Worker   template <>
592*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DescriptorPool>
593*03ce13f7SAndroid Build Coastguard Worker   {
594*03ce13f7SAndroid Build Coastguard Worker   public:
595*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
596*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DescriptorPool>;
597*03ce13f7SAndroid Build Coastguard Worker   };
598*03ce13f7SAndroid Build Coastguard Worker 
599*03ce13f7SAndroid Build Coastguard Worker   using SharedDescriptorPool = SharedHandle<DescriptorPool>;
600*03ce13f7SAndroid Build Coastguard Worker 
601*03ce13f7SAndroid Build Coastguard Worker   template <>
602*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DescriptorSet>
603*03ce13f7SAndroid Build Coastguard Worker   {
604*03ce13f7SAndroid Build Coastguard Worker   public:
605*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
606*03ce13f7SAndroid Build Coastguard Worker     using deleter        = PoolFreeShared<DescriptorSet, DescriptorPool>;
607*03ce13f7SAndroid Build Coastguard Worker   };
608*03ce13f7SAndroid Build Coastguard Worker 
609*03ce13f7SAndroid Build Coastguard Worker   using SharedDescriptorSet = SharedHandle<DescriptorSet>;
610*03ce13f7SAndroid Build Coastguard Worker 
611*03ce13f7SAndroid Build Coastguard Worker   template <>
612*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DescriptorSetLayout>
613*03ce13f7SAndroid Build Coastguard Worker   {
614*03ce13f7SAndroid Build Coastguard Worker   public:
615*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
616*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DescriptorSetLayout>;
617*03ce13f7SAndroid Build Coastguard Worker   };
618*03ce13f7SAndroid Build Coastguard Worker 
619*03ce13f7SAndroid Build Coastguard Worker   using SharedDescriptorSetLayout = SharedHandle<DescriptorSetLayout>;
620*03ce13f7SAndroid Build Coastguard Worker 
621*03ce13f7SAndroid Build Coastguard Worker   template <>
622*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<Framebuffer>
623*03ce13f7SAndroid Build Coastguard Worker   {
624*03ce13f7SAndroid Build Coastguard Worker   public:
625*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
626*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<Framebuffer>;
627*03ce13f7SAndroid Build Coastguard Worker   };
628*03ce13f7SAndroid Build Coastguard Worker 
629*03ce13f7SAndroid Build Coastguard Worker   using SharedFramebuffer = SharedHandle<Framebuffer>;
630*03ce13f7SAndroid Build Coastguard Worker 
631*03ce13f7SAndroid Build Coastguard Worker   template <>
632*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<RenderPass>
633*03ce13f7SAndroid Build Coastguard Worker   {
634*03ce13f7SAndroid Build Coastguard Worker   public:
635*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
636*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<RenderPass>;
637*03ce13f7SAndroid Build Coastguard Worker   };
638*03ce13f7SAndroid Build Coastguard Worker 
639*03ce13f7SAndroid Build Coastguard Worker   using SharedRenderPass = SharedHandle<RenderPass>;
640*03ce13f7SAndroid Build Coastguard Worker 
641*03ce13f7SAndroid Build Coastguard Worker   template <>
642*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<CommandPool>
643*03ce13f7SAndroid Build Coastguard Worker   {
644*03ce13f7SAndroid Build Coastguard Worker   public:
645*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
646*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<CommandPool>;
647*03ce13f7SAndroid Build Coastguard Worker   };
648*03ce13f7SAndroid Build Coastguard Worker 
649*03ce13f7SAndroid Build Coastguard Worker   using SharedCommandPool = SharedHandle<CommandPool>;
650*03ce13f7SAndroid Build Coastguard Worker 
651*03ce13f7SAndroid Build Coastguard Worker   template <>
652*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<CommandBuffer>
653*03ce13f7SAndroid Build Coastguard Worker   {
654*03ce13f7SAndroid Build Coastguard Worker   public:
655*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
656*03ce13f7SAndroid Build Coastguard Worker     using deleter        = PoolFreeShared<CommandBuffer, CommandPool>;
657*03ce13f7SAndroid Build Coastguard Worker   };
658*03ce13f7SAndroid Build Coastguard Worker 
659*03ce13f7SAndroid Build Coastguard Worker   using SharedCommandBuffer = SharedHandle<CommandBuffer>;
660*03ce13f7SAndroid Build Coastguard Worker 
661*03ce13f7SAndroid Build Coastguard Worker   //=== VK_VERSION_1_1 ===
662*03ce13f7SAndroid Build Coastguard Worker   template <>
663*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<SamplerYcbcrConversion>
664*03ce13f7SAndroid Build Coastguard Worker   {
665*03ce13f7SAndroid Build Coastguard Worker   public:
666*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
667*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<SamplerYcbcrConversion>;
668*03ce13f7SAndroid Build Coastguard Worker   };
669*03ce13f7SAndroid Build Coastguard Worker 
670*03ce13f7SAndroid Build Coastguard Worker   using SharedSamplerYcbcrConversion    = SharedHandle<SamplerYcbcrConversion>;
671*03ce13f7SAndroid Build Coastguard Worker   using SharedSamplerYcbcrConversionKHR = SharedHandle<SamplerYcbcrConversion>;
672*03ce13f7SAndroid Build Coastguard Worker 
673*03ce13f7SAndroid Build Coastguard Worker   template <>
674*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DescriptorUpdateTemplate>
675*03ce13f7SAndroid Build Coastguard Worker   {
676*03ce13f7SAndroid Build Coastguard Worker   public:
677*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
678*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DescriptorUpdateTemplate>;
679*03ce13f7SAndroid Build Coastguard Worker   };
680*03ce13f7SAndroid Build Coastguard Worker 
681*03ce13f7SAndroid Build Coastguard Worker   using SharedDescriptorUpdateTemplate    = SharedHandle<DescriptorUpdateTemplate>;
682*03ce13f7SAndroid Build Coastguard Worker   using SharedDescriptorUpdateTemplateKHR = SharedHandle<DescriptorUpdateTemplate>;
683*03ce13f7SAndroid Build Coastguard Worker 
684*03ce13f7SAndroid Build Coastguard Worker   //=== VK_VERSION_1_3 ===
685*03ce13f7SAndroid Build Coastguard Worker   template <>
686*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<PrivateDataSlot>
687*03ce13f7SAndroid Build Coastguard Worker   {
688*03ce13f7SAndroid Build Coastguard Worker   public:
689*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
690*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<PrivateDataSlot>;
691*03ce13f7SAndroid Build Coastguard Worker   };
692*03ce13f7SAndroid Build Coastguard Worker 
693*03ce13f7SAndroid Build Coastguard Worker   using SharedPrivateDataSlot    = SharedHandle<PrivateDataSlot>;
694*03ce13f7SAndroid Build Coastguard Worker   using SharedPrivateDataSlotEXT = SharedHandle<PrivateDataSlot>;
695*03ce13f7SAndroid Build Coastguard Worker 
696*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_surface ===
697*03ce13f7SAndroid Build Coastguard Worker   template <>
698*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<SurfaceKHR>
699*03ce13f7SAndroid Build Coastguard Worker   {
700*03ce13f7SAndroid Build Coastguard Worker   public:
701*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Instance;
702*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<SurfaceKHR>;
703*03ce13f7SAndroid Build Coastguard Worker   };
704*03ce13f7SAndroid Build Coastguard Worker 
705*03ce13f7SAndroid Build Coastguard Worker   using SharedSurfaceKHR = SharedHandle<SurfaceKHR>;
706*03ce13f7SAndroid Build Coastguard Worker 
707*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_swapchain ===
708*03ce13f7SAndroid Build Coastguard Worker   template <>
709*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<SwapchainKHR>
710*03ce13f7SAndroid Build Coastguard Worker   {
711*03ce13f7SAndroid Build Coastguard Worker   public:
712*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
713*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<SwapchainKHR>;
714*03ce13f7SAndroid Build Coastguard Worker   };
715*03ce13f7SAndroid Build Coastguard Worker 
716*03ce13f7SAndroid Build Coastguard Worker   using SharedSwapchainKHR = SharedHandle<SwapchainKHR>;
717*03ce13f7SAndroid Build Coastguard Worker 
718*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_display ===
719*03ce13f7SAndroid Build Coastguard Worker   template <>
720*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DisplayKHR>
721*03ce13f7SAndroid Build Coastguard Worker   {
722*03ce13f7SAndroid Build Coastguard Worker   public:
723*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = PhysicalDevice;
724*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DisplayKHR>;
725*03ce13f7SAndroid Build Coastguard Worker   };
726*03ce13f7SAndroid Build Coastguard Worker 
727*03ce13f7SAndroid Build Coastguard Worker   using SharedDisplayKHR = SharedHandle<DisplayKHR>;
728*03ce13f7SAndroid Build Coastguard Worker 
729*03ce13f7SAndroid Build Coastguard Worker   //=== VK_EXT_debug_report ===
730*03ce13f7SAndroid Build Coastguard Worker   template <>
731*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DebugReportCallbackEXT>
732*03ce13f7SAndroid Build Coastguard Worker   {
733*03ce13f7SAndroid Build Coastguard Worker   public:
734*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Instance;
735*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DebugReportCallbackEXT>;
736*03ce13f7SAndroid Build Coastguard Worker   };
737*03ce13f7SAndroid Build Coastguard Worker 
738*03ce13f7SAndroid Build Coastguard Worker   using SharedDebugReportCallbackEXT = SharedHandle<DebugReportCallbackEXT>;
739*03ce13f7SAndroid Build Coastguard Worker 
740*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_video_queue ===
741*03ce13f7SAndroid Build Coastguard Worker   template <>
742*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<VideoSessionKHR>
743*03ce13f7SAndroid Build Coastguard Worker   {
744*03ce13f7SAndroid Build Coastguard Worker   public:
745*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
746*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<VideoSessionKHR>;
747*03ce13f7SAndroid Build Coastguard Worker   };
748*03ce13f7SAndroid Build Coastguard Worker 
749*03ce13f7SAndroid Build Coastguard Worker   using SharedVideoSessionKHR = SharedHandle<VideoSessionKHR>;
750*03ce13f7SAndroid Build Coastguard Worker 
751*03ce13f7SAndroid Build Coastguard Worker   template <>
752*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<VideoSessionParametersKHR>
753*03ce13f7SAndroid Build Coastguard Worker   {
754*03ce13f7SAndroid Build Coastguard Worker   public:
755*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
756*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<VideoSessionParametersKHR>;
757*03ce13f7SAndroid Build Coastguard Worker   };
758*03ce13f7SAndroid Build Coastguard Worker 
759*03ce13f7SAndroid Build Coastguard Worker   using SharedVideoSessionParametersKHR = SharedHandle<VideoSessionParametersKHR>;
760*03ce13f7SAndroid Build Coastguard Worker 
761*03ce13f7SAndroid Build Coastguard Worker   //=== VK_NVX_binary_import ===
762*03ce13f7SAndroid Build Coastguard Worker   template <>
763*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<CuModuleNVX>
764*03ce13f7SAndroid Build Coastguard Worker   {
765*03ce13f7SAndroid Build Coastguard Worker   public:
766*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
767*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<CuModuleNVX>;
768*03ce13f7SAndroid Build Coastguard Worker   };
769*03ce13f7SAndroid Build Coastguard Worker 
770*03ce13f7SAndroid Build Coastguard Worker   using SharedCuModuleNVX = SharedHandle<CuModuleNVX>;
771*03ce13f7SAndroid Build Coastguard Worker 
772*03ce13f7SAndroid Build Coastguard Worker   template <>
773*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<CuFunctionNVX>
774*03ce13f7SAndroid Build Coastguard Worker   {
775*03ce13f7SAndroid Build Coastguard Worker   public:
776*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
777*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<CuFunctionNVX>;
778*03ce13f7SAndroid Build Coastguard Worker   };
779*03ce13f7SAndroid Build Coastguard Worker 
780*03ce13f7SAndroid Build Coastguard Worker   using SharedCuFunctionNVX = SharedHandle<CuFunctionNVX>;
781*03ce13f7SAndroid Build Coastguard Worker 
782*03ce13f7SAndroid Build Coastguard Worker   //=== VK_EXT_debug_utils ===
783*03ce13f7SAndroid Build Coastguard Worker   template <>
784*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DebugUtilsMessengerEXT>
785*03ce13f7SAndroid Build Coastguard Worker   {
786*03ce13f7SAndroid Build Coastguard Worker   public:
787*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Instance;
788*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DebugUtilsMessengerEXT>;
789*03ce13f7SAndroid Build Coastguard Worker   };
790*03ce13f7SAndroid Build Coastguard Worker 
791*03ce13f7SAndroid Build Coastguard Worker   using SharedDebugUtilsMessengerEXT = SharedHandle<DebugUtilsMessengerEXT>;
792*03ce13f7SAndroid Build Coastguard Worker 
793*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_acceleration_structure ===
794*03ce13f7SAndroid Build Coastguard Worker   template <>
795*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<AccelerationStructureKHR>
796*03ce13f7SAndroid Build Coastguard Worker   {
797*03ce13f7SAndroid Build Coastguard Worker   public:
798*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
799*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<AccelerationStructureKHR>;
800*03ce13f7SAndroid Build Coastguard Worker   };
801*03ce13f7SAndroid Build Coastguard Worker 
802*03ce13f7SAndroid Build Coastguard Worker   using SharedAccelerationStructureKHR = SharedHandle<AccelerationStructureKHR>;
803*03ce13f7SAndroid Build Coastguard Worker 
804*03ce13f7SAndroid Build Coastguard Worker   //=== VK_EXT_validation_cache ===
805*03ce13f7SAndroid Build Coastguard Worker   template <>
806*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<ValidationCacheEXT>
807*03ce13f7SAndroid Build Coastguard Worker   {
808*03ce13f7SAndroid Build Coastguard Worker   public:
809*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
810*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<ValidationCacheEXT>;
811*03ce13f7SAndroid Build Coastguard Worker   };
812*03ce13f7SAndroid Build Coastguard Worker 
813*03ce13f7SAndroid Build Coastguard Worker   using SharedValidationCacheEXT = SharedHandle<ValidationCacheEXT>;
814*03ce13f7SAndroid Build Coastguard Worker 
815*03ce13f7SAndroid Build Coastguard Worker   //=== VK_NV_ray_tracing ===
816*03ce13f7SAndroid Build Coastguard Worker   template <>
817*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<AccelerationStructureNV>
818*03ce13f7SAndroid Build Coastguard Worker   {
819*03ce13f7SAndroid Build Coastguard Worker   public:
820*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
821*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<AccelerationStructureNV>;
822*03ce13f7SAndroid Build Coastguard Worker   };
823*03ce13f7SAndroid Build Coastguard Worker 
824*03ce13f7SAndroid Build Coastguard Worker   using SharedAccelerationStructureNV = SharedHandle<AccelerationStructureNV>;
825*03ce13f7SAndroid Build Coastguard Worker 
826*03ce13f7SAndroid Build Coastguard Worker   //=== VK_INTEL_performance_query ===
827*03ce13f7SAndroid Build Coastguard Worker   template <>
828*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<PerformanceConfigurationINTEL>
829*03ce13f7SAndroid Build Coastguard Worker   {
830*03ce13f7SAndroid Build Coastguard Worker   public:
831*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
832*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<PerformanceConfigurationINTEL>;
833*03ce13f7SAndroid Build Coastguard Worker   };
834*03ce13f7SAndroid Build Coastguard Worker 
835*03ce13f7SAndroid Build Coastguard Worker   using SharedPerformanceConfigurationINTEL = SharedHandle<PerformanceConfigurationINTEL>;
836*03ce13f7SAndroid Build Coastguard Worker 
837*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_deferred_host_operations ===
838*03ce13f7SAndroid Build Coastguard Worker   template <>
839*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<DeferredOperationKHR>
840*03ce13f7SAndroid Build Coastguard Worker   {
841*03ce13f7SAndroid Build Coastguard Worker   public:
842*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
843*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<DeferredOperationKHR>;
844*03ce13f7SAndroid Build Coastguard Worker   };
845*03ce13f7SAndroid Build Coastguard Worker 
846*03ce13f7SAndroid Build Coastguard Worker   using SharedDeferredOperationKHR = SharedHandle<DeferredOperationKHR>;
847*03ce13f7SAndroid Build Coastguard Worker 
848*03ce13f7SAndroid Build Coastguard Worker   //=== VK_NV_device_generated_commands ===
849*03ce13f7SAndroid Build Coastguard Worker   template <>
850*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<IndirectCommandsLayoutNV>
851*03ce13f7SAndroid Build Coastguard Worker   {
852*03ce13f7SAndroid Build Coastguard Worker   public:
853*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
854*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<IndirectCommandsLayoutNV>;
855*03ce13f7SAndroid Build Coastguard Worker   };
856*03ce13f7SAndroid Build Coastguard Worker 
857*03ce13f7SAndroid Build Coastguard Worker   using SharedIndirectCommandsLayoutNV = SharedHandle<IndirectCommandsLayoutNV>;
858*03ce13f7SAndroid Build Coastguard Worker 
859*03ce13f7SAndroid Build Coastguard Worker #  if defined( VK_ENABLE_BETA_EXTENSIONS )
860*03ce13f7SAndroid Build Coastguard Worker   //=== VK_NV_cuda_kernel_launch ===
861*03ce13f7SAndroid Build Coastguard Worker   template <>
862*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<CudaModuleNV>
863*03ce13f7SAndroid Build Coastguard Worker   {
864*03ce13f7SAndroid Build Coastguard Worker   public:
865*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
866*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<CudaModuleNV>;
867*03ce13f7SAndroid Build Coastguard Worker   };
868*03ce13f7SAndroid Build Coastguard Worker 
869*03ce13f7SAndroid Build Coastguard Worker   using SharedCudaModuleNV = SharedHandle<CudaModuleNV>;
870*03ce13f7SAndroid Build Coastguard Worker 
871*03ce13f7SAndroid Build Coastguard Worker   template <>
872*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<CudaFunctionNV>
873*03ce13f7SAndroid Build Coastguard Worker   {
874*03ce13f7SAndroid Build Coastguard Worker   public:
875*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
876*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<CudaFunctionNV>;
877*03ce13f7SAndroid Build Coastguard Worker   };
878*03ce13f7SAndroid Build Coastguard Worker 
879*03ce13f7SAndroid Build Coastguard Worker   using SharedCudaFunctionNV = SharedHandle<CudaFunctionNV>;
880*03ce13f7SAndroid Build Coastguard Worker #  endif /*VK_ENABLE_BETA_EXTENSIONS*/
881*03ce13f7SAndroid Build Coastguard Worker 
882*03ce13f7SAndroid Build Coastguard Worker #  if defined( VK_USE_PLATFORM_FUCHSIA )
883*03ce13f7SAndroid Build Coastguard Worker   //=== VK_FUCHSIA_buffer_collection ===
884*03ce13f7SAndroid Build Coastguard Worker   template <>
885*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<BufferCollectionFUCHSIA>
886*03ce13f7SAndroid Build Coastguard Worker   {
887*03ce13f7SAndroid Build Coastguard Worker   public:
888*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
889*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<BufferCollectionFUCHSIA>;
890*03ce13f7SAndroid Build Coastguard Worker   };
891*03ce13f7SAndroid Build Coastguard Worker 
892*03ce13f7SAndroid Build Coastguard Worker   using SharedBufferCollectionFUCHSIA = SharedHandle<BufferCollectionFUCHSIA>;
893*03ce13f7SAndroid Build Coastguard Worker #  endif /*VK_USE_PLATFORM_FUCHSIA*/
894*03ce13f7SAndroid Build Coastguard Worker 
895*03ce13f7SAndroid Build Coastguard Worker   //=== VK_EXT_opacity_micromap ===
896*03ce13f7SAndroid Build Coastguard Worker   template <>
897*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<MicromapEXT>
898*03ce13f7SAndroid Build Coastguard Worker   {
899*03ce13f7SAndroid Build Coastguard Worker   public:
900*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
901*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<MicromapEXT>;
902*03ce13f7SAndroid Build Coastguard Worker   };
903*03ce13f7SAndroid Build Coastguard Worker 
904*03ce13f7SAndroid Build Coastguard Worker   using SharedMicromapEXT = SharedHandle<MicromapEXT>;
905*03ce13f7SAndroid Build Coastguard Worker 
906*03ce13f7SAndroid Build Coastguard Worker   //=== VK_NV_optical_flow ===
907*03ce13f7SAndroid Build Coastguard Worker   template <>
908*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<OpticalFlowSessionNV>
909*03ce13f7SAndroid Build Coastguard Worker   {
910*03ce13f7SAndroid Build Coastguard Worker   public:
911*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
912*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<OpticalFlowSessionNV>;
913*03ce13f7SAndroid Build Coastguard Worker   };
914*03ce13f7SAndroid Build Coastguard Worker 
915*03ce13f7SAndroid Build Coastguard Worker   using SharedOpticalFlowSessionNV = SharedHandle<OpticalFlowSessionNV>;
916*03ce13f7SAndroid Build Coastguard Worker 
917*03ce13f7SAndroid Build Coastguard Worker   //=== VK_EXT_shader_object ===
918*03ce13f7SAndroid Build Coastguard Worker   template <>
919*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleTraits<ShaderEXT>
920*03ce13f7SAndroid Build Coastguard Worker   {
921*03ce13f7SAndroid Build Coastguard Worker   public:
922*03ce13f7SAndroid Build Coastguard Worker     using DestructorType = Device;
923*03ce13f7SAndroid Build Coastguard Worker     using deleter        = ObjectDestroyShared<ShaderEXT>;
924*03ce13f7SAndroid Build Coastguard Worker   };
925*03ce13f7SAndroid Build Coastguard Worker 
926*03ce13f7SAndroid Build Coastguard Worker   using SharedShaderEXT = SharedHandle<ShaderEXT>;
927*03ce13f7SAndroid Build Coastguard Worker 
928*03ce13f7SAndroid Build Coastguard Worker   enum class SwapchainOwns
929*03ce13f7SAndroid Build Coastguard Worker   {
930*03ce13f7SAndroid Build Coastguard Worker     no,
931*03ce13f7SAndroid Build Coastguard Worker     yes,
932*03ce13f7SAndroid Build Coastguard Worker   };
933*03ce13f7SAndroid Build Coastguard Worker 
934*03ce13f7SAndroid Build Coastguard Worker   struct ImageHeader : SharedHeader<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>, typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter>
935*03ce13f7SAndroid Build Coastguard Worker   {
ImageHeaderVULKAN_HPP_NAMESPACE::ImageHeader936*03ce13f7SAndroid Build Coastguard Worker     ImageHeader(
937*03ce13f7SAndroid Build Coastguard Worker       SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>>       parent,
938*03ce13f7SAndroid Build Coastguard Worker       typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter deleter        = typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter(),
939*03ce13f7SAndroid Build Coastguard Worker       SwapchainOwns                                                     swapchainOwned = SwapchainOwns::no ) VULKAN_HPP_NOEXCEPT
940*03ce13f7SAndroid Build Coastguard Worker       : SharedHeader<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>, typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter>( std::move( parent ),
941*03ce13f7SAndroid Build Coastguard Worker                                                                                                                                         std::move( deleter ) )
942*03ce13f7SAndroid Build Coastguard Worker       , swapchainOwned( swapchainOwned )
943*03ce13f7SAndroid Build Coastguard Worker     {
944*03ce13f7SAndroid Build Coastguard Worker     }
945*03ce13f7SAndroid Build Coastguard Worker 
946*03ce13f7SAndroid Build Coastguard Worker     SwapchainOwns swapchainOwned = SwapchainOwns::no;
947*03ce13f7SAndroid Build Coastguard Worker   };
948*03ce13f7SAndroid Build Coastguard Worker 
949*03ce13f7SAndroid Build Coastguard Worker   template <>
950*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle<VULKAN_HPP_NAMESPACE::Image> : public SharedHandleBase<VULKAN_HPP_NAMESPACE::Image, ImageHeader>
951*03ce13f7SAndroid Build Coastguard Worker   {
952*03ce13f7SAndroid Build Coastguard Worker     using BaseType    = SharedHandleBase<VULKAN_HPP_NAMESPACE::Image, ImageHeader>;
953*03ce13f7SAndroid Build Coastguard Worker     using DeleterType = typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter;
954*03ce13f7SAndroid Build Coastguard Worker     friend BaseType;
955*03ce13f7SAndroid Build Coastguard Worker 
956*03ce13f7SAndroid Build Coastguard Worker   public:
957*03ce13f7SAndroid Build Coastguard Worker     SharedHandle() = default;
958*03ce13f7SAndroid Build Coastguard Worker 
SharedHandle(VULKAN_HPP_NAMESPACE::Image handle,SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>> parent,SwapchainOwns swapchain_owned=SwapchainOwns::no,DeleterType deleter=DeleterType ())959*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( VULKAN_HPP_NAMESPACE::Image                                 handle,
960*03ce13f7SAndroid Build Coastguard Worker                            SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>> parent,
961*03ce13f7SAndroid Build Coastguard Worker                            SwapchainOwns                                               swapchain_owned = SwapchainOwns::no,
962*03ce13f7SAndroid Build Coastguard Worker                            DeleterType                                                 deleter         = DeleterType() ) VULKAN_HPP_NOEXCEPT
963*03ce13f7SAndroid Build Coastguard Worker       : BaseType( handle, std::move( parent ), std::move( deleter ), swapchain_owned )
964*03ce13f7SAndroid Build Coastguard Worker     {
965*03ce13f7SAndroid Build Coastguard Worker     }
966*03ce13f7SAndroid Build Coastguard Worker 
967*03ce13f7SAndroid Build Coastguard Worker   protected:
internalDestroy(const ImageHeader & control,VULKAN_HPP_NAMESPACE::Image handle)968*03ce13f7SAndroid Build Coastguard Worker     static void internalDestroy( const ImageHeader & control, VULKAN_HPP_NAMESPACE::Image handle ) VULKAN_HPP_NOEXCEPT
969*03ce13f7SAndroid Build Coastguard Worker     {
970*03ce13f7SAndroid Build Coastguard Worker       if ( control.swapchainOwned == SwapchainOwns::no )
971*03ce13f7SAndroid Build Coastguard Worker       {
972*03ce13f7SAndroid Build Coastguard Worker         control.deleter.destroy( control.parent.get(), handle );
973*03ce13f7SAndroid Build Coastguard Worker       }
974*03ce13f7SAndroid Build Coastguard Worker     }
975*03ce13f7SAndroid Build Coastguard Worker   };
976*03ce13f7SAndroid Build Coastguard Worker 
977*03ce13f7SAndroid Build Coastguard Worker   struct SwapchainHeader
978*03ce13f7SAndroid Build Coastguard Worker   {
SwapchainHeaderVULKAN_HPP_NAMESPACE::SwapchainHeader979*03ce13f7SAndroid Build Coastguard Worker     SwapchainHeader( SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR>                           surface,
980*03ce13f7SAndroid Build Coastguard Worker                      SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>>       parent,
981*03ce13f7SAndroid Build Coastguard Worker                      typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter deleter =
982*03ce13f7SAndroid Build Coastguard Worker                        typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter() ) VULKAN_HPP_NOEXCEPT
983*03ce13f7SAndroid Build Coastguard Worker       : surface( std::move( surface ) )
984*03ce13f7SAndroid Build Coastguard Worker       , parent( std::move( parent ) )
985*03ce13f7SAndroid Build Coastguard Worker       , deleter( std::move( deleter ) )
986*03ce13f7SAndroid Build Coastguard Worker     {
987*03ce13f7SAndroid Build Coastguard Worker     }
988*03ce13f7SAndroid Build Coastguard Worker 
989*03ce13f7SAndroid Build Coastguard Worker     SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR>                           surface{};
990*03ce13f7SAndroid Build Coastguard Worker     SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>>       parent{};
991*03ce13f7SAndroid Build Coastguard Worker     typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter deleter{};
992*03ce13f7SAndroid Build Coastguard Worker   };
993*03ce13f7SAndroid Build Coastguard Worker 
994*03ce13f7SAndroid Build Coastguard Worker   template <>
995*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle<VULKAN_HPP_NAMESPACE::SwapchainKHR> : public SharedHandleBase<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainHeader>
996*03ce13f7SAndroid Build Coastguard Worker   {
997*03ce13f7SAndroid Build Coastguard Worker     using BaseType    = SharedHandleBase<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainHeader>;
998*03ce13f7SAndroid Build Coastguard Worker     using DeleterType = typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter;
999*03ce13f7SAndroid Build Coastguard Worker     friend BaseType;
1000*03ce13f7SAndroid Build Coastguard Worker 
1001*03ce13f7SAndroid Build Coastguard Worker   public:
1002*03ce13f7SAndroid Build Coastguard Worker     SharedHandle() = default;
1003*03ce13f7SAndroid Build Coastguard Worker 
SharedHandle(VULKAN_HPP_NAMESPACE::SwapchainKHR handle,SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>> parent,SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR> surface,DeleterType deleter=DeleterType ())1004*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( VULKAN_HPP_NAMESPACE::SwapchainKHR                                 handle,
1005*03ce13f7SAndroid Build Coastguard Worker                            SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>> parent,
1006*03ce13f7SAndroid Build Coastguard Worker                            SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR>                     surface,
1007*03ce13f7SAndroid Build Coastguard Worker                            DeleterType                                                        deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT
1008*03ce13f7SAndroid Build Coastguard Worker       : BaseType( handle, std::move( surface ), std::move( parent ), std::move( deleter ) )
1009*03ce13f7SAndroid Build Coastguard Worker     {
1010*03ce13f7SAndroid Build Coastguard Worker     }
1011*03ce13f7SAndroid Build Coastguard Worker 
1012*03ce13f7SAndroid Build Coastguard Worker   public:
getSurface() const1013*03ce13f7SAndroid Build Coastguard Worker     const SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR> & getSurface() const VULKAN_HPP_NOEXCEPT
1014*03ce13f7SAndroid Build Coastguard Worker     {
1015*03ce13f7SAndroid Build Coastguard Worker       return getHeader().surface;
1016*03ce13f7SAndroid Build Coastguard Worker     }
1017*03ce13f7SAndroid Build Coastguard Worker 
1018*03ce13f7SAndroid Build Coastguard Worker   protected:
1019*03ce13f7SAndroid Build Coastguard Worker     using BaseType::internalDestroy;
1020*03ce13f7SAndroid Build Coastguard Worker   };
1021*03ce13f7SAndroid Build Coastguard Worker 
1022*03ce13f7SAndroid Build Coastguard Worker   template <typename HandleType, typename DestructorType>
1023*03ce13f7SAndroid Build Coastguard Worker   class SharedHandleBaseNoDestroy : public SharedHandleBase<HandleType, DestructorType>
1024*03ce13f7SAndroid Build Coastguard Worker   {
1025*03ce13f7SAndroid Build Coastguard Worker   public:
1026*03ce13f7SAndroid Build Coastguard Worker     using SharedHandleBase<HandleType, DestructorType>::SharedHandleBase;
1027*03ce13f7SAndroid Build Coastguard Worker 
getDestructorType() const1028*03ce13f7SAndroid Build Coastguard Worker     const DestructorType & getDestructorType() const VULKAN_HPP_NOEXCEPT
1029*03ce13f7SAndroid Build Coastguard Worker     {
1030*03ce13f7SAndroid Build Coastguard Worker       return SharedHandleBase<HandleType, DestructorType>::getHeader();
1031*03ce13f7SAndroid Build Coastguard Worker     }
1032*03ce13f7SAndroid Build Coastguard Worker 
1033*03ce13f7SAndroid Build Coastguard Worker   protected:
internalDestroy(const DestructorType &,HandleType)1034*03ce13f7SAndroid Build Coastguard Worker     static void internalDestroy( const DestructorType &, HandleType ) VULKAN_HPP_NOEXCEPT {}
1035*03ce13f7SAndroid Build Coastguard Worker   };
1036*03ce13f7SAndroid Build Coastguard Worker 
1037*03ce13f7SAndroid Build Coastguard Worker   //=== VK_VERSION_1_0 ===
1038*03ce13f7SAndroid Build Coastguard Worker 
1039*03ce13f7SAndroid Build Coastguard Worker   template <>
1040*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle<PhysicalDevice> : public SharedHandleBaseNoDestroy<PhysicalDevice, SharedInstance>
1041*03ce13f7SAndroid Build Coastguard Worker   {
1042*03ce13f7SAndroid Build Coastguard Worker     friend SharedHandleBase<PhysicalDevice, SharedInstance>;
1043*03ce13f7SAndroid Build Coastguard Worker 
1044*03ce13f7SAndroid Build Coastguard Worker   public:
1045*03ce13f7SAndroid Build Coastguard Worker     SharedHandle() = default;
1046*03ce13f7SAndroid Build Coastguard Worker 
SharedHandle(PhysicalDevice handle,SharedInstance parent)1047*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( PhysicalDevice handle, SharedInstance parent ) noexcept
1048*03ce13f7SAndroid Build Coastguard Worker       : SharedHandleBaseNoDestroy<PhysicalDevice, SharedInstance>( handle, std::move( parent ) )
1049*03ce13f7SAndroid Build Coastguard Worker     {
1050*03ce13f7SAndroid Build Coastguard Worker     }
1051*03ce13f7SAndroid Build Coastguard Worker   };
1052*03ce13f7SAndroid Build Coastguard Worker 
1053*03ce13f7SAndroid Build Coastguard Worker   using SharedPhysicalDevice = SharedHandle<PhysicalDevice>;
1054*03ce13f7SAndroid Build Coastguard Worker 
1055*03ce13f7SAndroid Build Coastguard Worker   template <>
1056*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle<Queue> : public SharedHandleBaseNoDestroy<Queue, SharedDevice>
1057*03ce13f7SAndroid Build Coastguard Worker   {
1058*03ce13f7SAndroid Build Coastguard Worker     friend SharedHandleBase<Queue, SharedDevice>;
1059*03ce13f7SAndroid Build Coastguard Worker 
1060*03ce13f7SAndroid Build Coastguard Worker   public:
1061*03ce13f7SAndroid Build Coastguard Worker     SharedHandle() = default;
1062*03ce13f7SAndroid Build Coastguard Worker 
SharedHandle(Queue handle,SharedDevice parent)1063*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( Queue handle, SharedDevice parent ) noexcept : SharedHandleBaseNoDestroy<Queue, SharedDevice>( handle, std::move( parent ) ) {}
1064*03ce13f7SAndroid Build Coastguard Worker   };
1065*03ce13f7SAndroid Build Coastguard Worker 
1066*03ce13f7SAndroid Build Coastguard Worker   using SharedQueue = SharedHandle<Queue>;
1067*03ce13f7SAndroid Build Coastguard Worker 
1068*03ce13f7SAndroid Build Coastguard Worker   //=== VK_KHR_display ===
1069*03ce13f7SAndroid Build Coastguard Worker 
1070*03ce13f7SAndroid Build Coastguard Worker   template <>
1071*03ce13f7SAndroid Build Coastguard Worker   class SharedHandle<DisplayModeKHR> : public SharedHandleBaseNoDestroy<DisplayModeKHR, SharedDisplayKHR>
1072*03ce13f7SAndroid Build Coastguard Worker   {
1073*03ce13f7SAndroid Build Coastguard Worker     friend SharedHandleBase<DisplayModeKHR, SharedDisplayKHR>;
1074*03ce13f7SAndroid Build Coastguard Worker 
1075*03ce13f7SAndroid Build Coastguard Worker   public:
1076*03ce13f7SAndroid Build Coastguard Worker     SharedHandle() = default;
1077*03ce13f7SAndroid Build Coastguard Worker 
SharedHandle(DisplayModeKHR handle,SharedDisplayKHR parent)1078*03ce13f7SAndroid Build Coastguard Worker     explicit SharedHandle( DisplayModeKHR handle, SharedDisplayKHR parent ) noexcept
1079*03ce13f7SAndroid Build Coastguard Worker       : SharedHandleBaseNoDestroy<DisplayModeKHR, SharedDisplayKHR>( handle, std::move( parent ) )
1080*03ce13f7SAndroid Build Coastguard Worker     {
1081*03ce13f7SAndroid Build Coastguard Worker     }
1082*03ce13f7SAndroid Build Coastguard Worker   };
1083*03ce13f7SAndroid Build Coastguard Worker 
1084*03ce13f7SAndroid Build Coastguard Worker   using SharedDisplayModeKHR = SharedHandle<DisplayModeKHR>;
1085*03ce13f7SAndroid Build Coastguard Worker #endif  // !VULKAN_HPP_NO_SMART_HANDLE
1086*03ce13f7SAndroid Build Coastguard Worker }  // namespace VULKAN_HPP_NAMESPACE
1087*03ce13f7SAndroid Build Coastguard Worker #endif  // VULKAN_SHARED_HPP
1088