// Copyright Epic Games, Inc. All Rights Reserved. /*============================================================================= MetalInclude.h: MetalCPP Includes =============================================================================*/ #pragma once #include #include #include namespace MTL { static const NS::UInteger ResourceCpuCacheModeShift = 0; static const NS::UInteger ResourceStorageModeShift = 4; static const NS::UInteger ResourceHazardTrackingModeShift = 8; static const NS::UInteger ResourceCpuCacheModeMask = 0xfUL << ResourceCpuCacheModeShift; static const NS::UInteger ResourceStorageModeMask = 0xfUL << ResourceStorageModeShift; static const NS::UInteger ResourceHazardTrackingModeMask = 0x1UL << ResourceHazardTrackingModeShift; } // MTL Pointer types typedef NS::SharedPtr MTLCommandBufferPtr; typedef NS::SharedPtr MTLTexturePtr; typedef NS::SharedPtr MTLBufferPtr; typedef NS::SharedPtr MTLHeapPtr; typedef NS::SharedPtr MTLTextureDescriptorPtr; typedef NS::SharedPtr MTLVertexDescriptorPtr; typedef NS::SharedPtr MTLRenderCommandEncoderPtr; typedef NS::SharedPtr MTLParallelRenderCommandEncoderPtr; typedef NS::SharedPtr MTLComputeCommandEncoderPtr; typedef NS::SharedPtr MTLBlitCommandEncoderPtr; typedef NS::SharedPtr MTLAccelerationStructureCommandEncoderPtr; typedef NS::SharedPtr MTLRenderPipelineDescriptorPtr; typedef NS::SharedPtr MTLMeshRenderPipelineDescriptorPtr; typedef NS::SharedPtr MTLComputePipelineDescriptorPtr; typedef NS::SharedPtr MTLTileRenderPipelineDescriptorPtr; typedef NS::SharedPtr MTLRenderPipelineStatePtr; typedef NS::SharedPtr MTLComputePipelineStatePtr; typedef NS::SharedPtr MTLRenderPipelineReflectionPtr; typedef NS::SharedPtr MTLComputePipelineReflectionPtr; typedef NS::SharedPtr MTLLibraryPtr; typedef NS::SharedPtr MTLFunctionPtr; typedef NS::SharedPtr MTLEventPtr; namespace NS { inline bool operator == (const Range& A, const Range& B) { return A.location == B.location && A.length == B.length; } } class FMTLScopedAutoreleasePool { public: FMTLScopedAutoreleasePool() { AutoreleasePool = NS::AutoreleasePool::alloc()->init(); check(AutoreleasePool); } ~FMTLScopedAutoreleasePool() { AutoreleasePool->release(); } private: NS::AutoreleasePool* AutoreleasePool = nullptr; }; #define MTL_SCOPED_AUTORELEASE_POOL const FMTLScopedAutoreleasePool MTLAutoreleaseScope;