1 /* 2 * Copyright 2021 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef skgpu_graphite_MtlResourceProvider_DEFINED 9 #define skgpu_graphite_MtlResourceProvider_DEFINED 10 11 #include "src/core/SkTHash.h" 12 #include "src/gpu/graphite/DrawTypes.h" 13 #include "src/gpu/graphite/ResourceProvider.h" 14 #include "src/gpu/graphite/mtl/MtlGraphicsPipeline.h" 15 16 #import <Metal/Metal.h> 17 18 namespace skgpu::graphite { 19 20 class CommandBuffer; 21 class MtlSharedContext; 22 23 class MtlResourceProvider final : public ResourceProvider { 24 public: 25 MtlResourceProvider(SharedContext* sharedContext, 26 SingleOwner*, 27 uint32_t recorderID, 28 size_t resourceBudget); ~MtlResourceProvider()29 ~MtlResourceProvider() override {} 30 31 sk_sp<MtlGraphicsPipeline> findOrCreateLoadMSAAPipeline(const RenderPassDesc&); 32 33 sk_cfp<id<MTLDepthStencilState>> findOrCreateCompatibleDepthStencilState( 34 const DepthStencilSettings&); 35 36 private: 37 const MtlSharedContext* mtlSharedContext(); 38 39 sk_sp<GraphicsPipeline> createGraphicsPipeline(const RuntimeEffectDictionary*, 40 const GraphicsPipelineDesc&, 41 const RenderPassDesc&, 42 SkEnumBitMask<PipelineCreationFlags>) override; 43 sk_sp<ComputePipeline> createComputePipeline(const ComputePipelineDesc&) override; 44 45 sk_sp<Texture> createTexture(SkISize, 46 const TextureInfo&, 47 skgpu::Budgeted) override; 48 sk_sp<Texture> onCreateWrappedTexture(const BackendTexture&) override; 49 sk_sp<Buffer> createBuffer(size_t size, BufferType type, AccessPattern) override; 50 sk_sp<Sampler> createSampler(const SamplerDesc&) override; 51 52 BackendTexture onCreateBackendTexture(SkISize dimensions, const TextureInfo&) override; 53 void onDeleteBackendTexture(const BackendTexture&) override; 54 55 skia_private::THashMap<DepthStencilSettings, sk_cfp<id<MTLDepthStencilState>>> 56 fDepthStencilStates; 57 skia_private::THashMap<uint64_t, sk_sp<MtlGraphicsPipeline>> fLoadMSAAPipelines; 58 }; 59 60 } // namespace skgpu::graphite 61 62 #endif // skgpu_graphite_MtlResourceProvider_DEFINED 63