@class NSMutableDictionary, MTLPipelineBufferDescriptor, PKMetalResourceHandlerBuffer, NSObject, PKLRUCache; @protocol MTLTexture, MTLComputePipelineState, MTLBuffer, OS_dispatch_queue, MTLPipelineLibrarySPI, MTLRenderPipelineState, MTLLibrary, MTLDevice; @interface PKMetalResourceHandler : NSObject { id _particleShaderKernelPipelineState; id _particleShaderKernelPipelineStateWithVariableSpacing; id _paintShaderKernelPipelineState; id _paintShaderKernelPipelineStateWithLiveStrokeMode; id _paintShaderKernelPipelineStateWithLiveStrokeParticles; id _sixChannelCopyToCanvasPipelineState; id _cachedQuadVertexBuffer; id _cachedQuadTexCoordBuffer; NSMutableDictionary *_inkTextures; struct unordered_map<(anonymous namespace)::PKMetalShaderKey, PKMetalShader *, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKMetalShaderKey>, std::allocator>> { struct __hash_table, std::__unordered_map_hasher<(anonymous namespace)::PKMetalShaderKey, std::__hash_value_type<(anonymous namespace)::PKMetalShaderKey, PKMetalShader *>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKMetalShaderKey>>, std::__unordered_map_equal<(anonymous namespace)::PKMetalShaderKey, std::__hash_value_type<(anonymous namespace)::PKMetalShaderKey, PKMetalShader *>, std::equal_to<(anonymous namespace)::PKMetalShaderKey>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>, std::allocator>> { struct unique_ptr, void *> *> *[], std::__bucket_list_deallocator, void *> *> *>>> { struct __compressed_pair, void *> *> **, std::__bucket_list_deallocator, void *> *> *>>> { void **__value_; struct __bucket_list_deallocator, void *> *> *>> { struct __compressed_pair, void *> *> *>> { unsigned long long __value_; } __data_; } __value_; } __ptr_; } __bucket_list_; struct __compressed_pair, void *> *>, std::allocator, void *>>> { struct __hash_node_base, void *> *> { void *__next_; } __value_; } __p1_; struct __compressed_pair, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKMetalShaderKey>>> { unsigned long long __value_; } __p2_; struct __compressed_pair, std::equal_to<(anonymous namespace)::PKMetalShaderKey>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>> { float __value_; } __p3_; } __table_; } _uberShaders; struct unordered_map<(anonymous namespace)::PKSixChannelShaderKey, PKMetalShader *, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKSixChannelShaderKey>, std::allocator>> { struct __hash_table, std::__unordered_map_hasher<(anonymous namespace)::PKSixChannelShaderKey, std::__hash_value_type<(anonymous namespace)::PKSixChannelShaderKey, PKMetalShader *>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKSixChannelShaderKey>>, std::__unordered_map_equal<(anonymous namespace)::PKSixChannelShaderKey, std::__hash_value_type<(anonymous namespace)::PKSixChannelShaderKey, PKMetalShader *>, std::equal_to<(anonymous namespace)::PKSixChannelShaderKey>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>, std::allocator>> { struct unique_ptr, void *> *> *[], std::__bucket_list_deallocator, void *> *> *>>> { struct __compressed_pair, void *> *> **, std::__bucket_list_deallocator, void *> *> *>>> { void **__value_; struct __bucket_list_deallocator, void *> *> *>> { struct __compressed_pair, void *> *> *>> { unsigned long long __value_; } __data_; } __value_; } __ptr_; } __bucket_list_; struct __compressed_pair, void *> *>, std::allocator, void *>>> { struct __hash_node_base, void *> *> { void *__next_; } __value_; } __p1_; struct __compressed_pair, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKSixChannelShaderKey>>> { unsigned long long __value_; } __p2_; struct __compressed_pair, std::equal_to<(anonymous namespace)::PKSixChannelShaderKey>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>> { float __value_; } __p3_; } __table_; } _sixChannelShaders; struct unordered_map, std::allocator>> { struct __hash_table, std::__unordered_map_hasher, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to>, std::__unordered_map_equal, std::equal_to, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>, std::allocator>> { struct unique_ptr, void *> *> *[], std::__bucket_list_deallocator, void *> *> *>>> { struct __compressed_pair, void *> *> **, std::__bucket_list_deallocator, void *> *> *>>> { void **__value_; struct __bucket_list_deallocator, void *> *> *>> { struct __compressed_pair, void *> *> *>> { unsigned long long __value_; } __data_; } __value_; } __ptr_; } __bucket_list_; struct __compressed_pair, void *> *>, std::allocator, void *>>> { struct __hash_node_base, void *> *> { void *__next_; } __value_; } __p1_; struct __compressed_pair, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to>> { unsigned long long __value_; } __p2_; struct __compressed_pair, std::equal_to, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>> { float __value_; } __p3_; } __table_; } _namedShaders; struct unordered_map, std::allocator>> { struct __hash_table, std::__unordered_map_hasher, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to>, std::__unordered_map_equal, std::equal_to, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>, std::allocator>> { struct unique_ptr, void *> *> *[], std::__bucket_list_deallocator, void *> *> *>>> { struct __compressed_pair, void *> *> **, std::__bucket_list_deallocator, void *> *> *>>> { void **__value_; struct __bucket_list_deallocator, void *> *> *>> { struct __compressed_pair, void *> *> *>> { unsigned long long __value_; } __data_; } __value_; } __ptr_; } __bucket_list_; struct __compressed_pair, void *> *>, std::allocator, void *>>> { struct __hash_node_base, void *> *> { void *__next_; } __value_; } __p1_; struct __compressed_pair, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to>> { unsigned long long __value_; } __p2_; struct __compressed_pair, std::equal_to, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>> { float __value_; } __p3_; } __table_; } _pipelineDescriptors; struct unordered_map<(anonymous namespace)::PKMetalKernelKey, id, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKMetalKernelKey>, std::allocator>>> { struct __hash_table>, std::__unordered_map_hasher<(anonymous namespace)::PKMetalKernelKey, std::__hash_value_type<(anonymous namespace)::PKMetalKernelKey, id>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKMetalKernelKey>>, std::__unordered_map_equal<(anonymous namespace)::PKMetalKernelKey, std::__hash_value_type<(anonymous namespace)::PKMetalKernelKey, id>, std::equal_to<(anonymous namespace)::PKMetalKernelKey>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>, std::allocator>>> { struct unique_ptr>, void *> *> *[], std::__bucket_list_deallocator>, void *> *> *>>> { struct __compressed_pair>, void *> *> **, std::__bucket_list_deallocator>, void *> *> *>>> { void **__value_; struct __bucket_list_deallocator>, void *> *> *>> { struct __compressed_pair>, void *> *> *>> { unsigned long long __value_; } __data_; } __value_; } __ptr_; } __bucket_list_; struct __compressed_pair>, void *> *>, std::allocator>, void *>>> { struct __hash_node_base>, void *> *> { void *__next_; } __value_; } __p1_; struct __compressed_pair>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions, std::equal_to<(anonymous namespace)::PKMetalKernelKey>>> { unsigned long long __value_; } __p2_; struct __compressed_pair>, std::equal_to<(anonymous namespace)::PKMetalKernelKey>, (anonymous namespace)::PKMetalResourceHandlerHashFunctions>> { float __value_; } __p3_; } __table_; } _kernelPipelines; id _defaultLibrary; id _paperTexture; struct CGSize { double width; double height; } _paperTextureSize; PKLRUCache *_strokeRenderCache; id _uint16IndexBuffer; id _uint32IndexBuffer; unsigned long long _uint32IndexBufferNumVertices; id _randomNumberBuffer; NSObject *_accessQueue; unsigned long long _signpost_id; PKMetalResourceHandlerBuffer *_purgeableResourceBuffer; PKMetalResourceHandlerBuffer *_resourceBuffer; PKMetalResourceHandlerBuffer *_gpuResourceBuffer; id _pipelineLibrary; BOOL _generatePipelineDescriptors; BOOL _generateForScribble; BOOL _deviceSupportsAppleFamily; BOOL _deviceSupportsMacFamily; BOOL _deviceSupportsFramebufferFetch; BOOL _sixChannelUsesWideGamut; id _device; unsigned long long _sixChannelOriginalBackPixelFormat; unsigned long long _sixChannelMetalLayerPixelFormat; MTLPipelineBufferDescriptor *_sharedPipelineDescriptor; } + (id)generatePipelineDescriptorsForDevice:(id)a0; - (id)init; - (id).cxx_construct; - (void).cxx_destruct; @end