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 private: 34 const MtlSharedContext* mtlSharedContext(); 35 36 sk_sp<GraphicsPipeline> createGraphicsPipeline(const RuntimeEffectDictionary*, 37 const GraphicsPipelineDesc&, 38 const RenderPassDesc&) override; 39 sk_sp<ComputePipeline> createComputePipeline(const ComputePipelineDesc&) override; 40 41 sk_sp<Texture> createTexture(SkISize, 42 const TextureInfo&, 43 skgpu::Budgeted) override; 44 sk_sp<Texture> onCreateWrappedTexture(const BackendTexture&) override; 45 sk_sp<Buffer> createBuffer(size_t size, BufferType type, AccessPattern) override; 46 sk_sp<Sampler> createSampler(const SamplerDesc&) override; 47 48 BackendTexture onCreateBackendTexture(SkISize dimensions, const TextureInfo&) override; 49 void onDeleteBackendTexture(const BackendTexture&) override; 50 51 sk_cfp<id<MTLDepthStencilState>> findOrCreateCompatibleDepthStencilState( 52 const DepthStencilSettings&); 53 54 skia_private::THashMap<DepthStencilSettings, sk_cfp<id<MTLDepthStencilState>>> 55 fDepthStencilStates; 56 skia_private::THashMap<uint64_t, sk_sp<MtlGraphicsPipeline>> fLoadMSAAPipelines; 57 }; 58 59 } // namespace skgpu::graphite 60 61 #endif // skgpu_graphite_MtlResourceProvider_DEFINED 62