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