Flutter Impeller
compute_pass_bindings_cache_mtl.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_COMPUTE_PASS_BINDINGS_CACHE_MTL_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_COMPUTE_PASS_BINDINGS_CACHE_MTL_H_
7 
8 #include <Metal/Metal.h>
9 
12 
13 namespace impeller {
14 
15 //-----------------------------------------------------------------------------
16 /// @brief Ensures that bindings on the pass are not redundantly set or
17 /// updated. Avoids making the driver do additional checks and makes
18 /// the frame insights during profiling and instrumentation not
19 /// complain about the same.
20 ///
21 /// There should be no change to rendering if this caching was
22 /// absent.
23 ///
26 
28 
30 
31  void SetComputePipelineState(id<MTLComputePipelineState> pipeline);
32 
33  id<MTLComputePipelineState> GetPipeline() const;
34 
35  void SetEncoder(id<MTLComputeCommandEncoder> encoder);
36 
37  void SetBuffer(uint64_t index, uint64_t offset, id<MTLBuffer> buffer);
38 
39  void SetTexture(uint64_t index, id<MTLTexture> texture);
40 
41  void SetSampler(uint64_t index, id<MTLSamplerState> sampler);
42 
43  private:
44  struct BufferOffsetPair {
45  id<MTLBuffer> buffer = nullptr;
46  size_t offset = 0u;
47  };
48  using BufferMap = std::map<uint64_t, BufferOffsetPair>;
49  using TextureMap = std::map<uint64_t, id<MTLTexture>>;
50  using SamplerMap = std::map<uint64_t, id<MTLSamplerState>>;
51 
52  id<MTLComputeCommandEncoder> encoder_;
53  id<MTLComputePipelineState> pipeline_ = nullptr;
54  BufferMap buffers_;
55  TextureMap textures_;
56  SamplerMap samplers_;
57 };
58 
59 } // namespace impeller
60 
61 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_COMPUTE_PASS_BINDINGS_CACHE_MTL_H_
Ensures that bindings on the pass are not redundantly set or updated. Avoids making the driver do add...
void SetEncoder(id< MTLComputeCommandEncoder > encoder)
void SetComputePipelineState(id< MTLComputePipelineState > pipeline)
void SetBuffer(uint64_t index, uint64_t offset, id< MTLBuffer > buffer)
ComputePassBindingsCacheMTL(ComputePassBindingsCacheMTL &&)=delete
void SetSampler(uint64_t index, id< MTLSamplerState > sampler)
ComputePassBindingsCacheMTL(const ComputePassBindingsCacheMTL &)=delete
id< MTLComputePipelineState > GetPipeline() const
void SetTexture(uint64_t index, id< MTLTexture > texture)