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