Flutter Impeller
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_PASS_BINDINGS_CACHE_MTL_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_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 ///
25  explicit PassBindingsCacheMTL() {}
26 
27  ~PassBindingsCacheMTL() = default;
28 
30 
32 
33  void SetEncoder(id<MTLRenderCommandEncoder> encoder);
34 
35  void SetRenderPipelineState(id<MTLRenderPipelineState> pipeline);
36 
37  void SetDepthStencilState(id<MTLDepthStencilState> depth_stencil);
38 
39  bool SetBuffer(ShaderStage stage,
40  uint64_t index,
41  uint64_t offset,
42  id<MTLBuffer> buffer);
43 
44  bool SetTexture(ShaderStage stage, uint64_t index, id<MTLTexture> texture);
45 
46  bool SetSampler(ShaderStage stage,
47  uint64_t index,
48  id<MTLSamplerState> sampler);
49 
50  void SetViewport(const Viewport& viewport);
51 
52  void SetScissor(const IRect& scissor);
53 
54  private:
55  struct BufferOffsetPair {
56  id<MTLBuffer> buffer = nullptr;
57  size_t offset = 0u;
58  };
59  using BufferMap = std::map<uint64_t, BufferOffsetPair>;
60  using TextureMap = std::map<uint64_t, id<MTLTexture>>;
61  using SamplerMap = std::map<uint64_t, id<MTLSamplerState>>;
62 
63  id<MTLRenderCommandEncoder> encoder_;
64  id<MTLRenderPipelineState> pipeline_ = nullptr;
65  id<MTLDepthStencilState> depth_stencil_ = nullptr;
66  std::map<ShaderStage, BufferMap> buffers_;
67  std::map<ShaderStage, TextureMap> textures_;
68  std::map<ShaderStage, SamplerMap> samplers_;
69  std::optional<Viewport> viewport_;
70  std::optional<IRect> scissor_;
71 };
72 
73 } // namespace impeller
74 
75 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_PASS_BINDINGS_CACHE_MTL_H_
impeller::PassBindingsCacheMTL::~PassBindingsCacheMTL
~PassBindingsCacheMTL()=default
impeller::PassBindingsCacheMTL::SetScissor
void SetScissor(const IRect &scissor)
Definition: pass_bindings_cache_mtl.mm:138
impeller::ShaderStage
ShaderStage
Definition: shader_types.h:22
impeller::PassBindingsCacheMTL::SetBuffer
bool SetBuffer(ShaderStage stage, uint64_t index, uint64_t offset, id< MTLBuffer > buffer)
Definition: pass_bindings_cache_mtl.mm:31
impeller::PassBindingsCacheMTL
Ensures that bindings on the pass are not redundantly set or updated. Avoids making the driver do add...
Definition: pass_bindings_cache_mtl.h:24
render_pass.h
impeller::PassBindingsCacheMTL::SetEncoder
void SetEncoder(id< MTLRenderCommandEncoder > encoder)
Definition: pass_bindings_cache_mtl.mm:9
impeller::PassBindingsCacheMTL::SetTexture
bool SetTexture(ShaderStage stage, uint64_t index, id< MTLTexture > texture)
Definition: pass_bindings_cache_mtl.mm:75
impeller::Viewport
Definition: formats.h:398
impeller::PassBindingsCacheMTL::SetSampler
bool SetSampler(ShaderStage stage, uint64_t index, id< MTLSamplerState > sampler)
Definition: pass_bindings_cache_mtl.mm:99
impeller::PassBindingsCacheMTL::SetViewport
void SetViewport(const Viewport &viewport)
Definition: pass_bindings_cache_mtl.mm:123
impeller::PassBindingsCacheMTL::SetDepthStencilState
void SetDepthStencilState(id< MTLDepthStencilState > depth_stencil)
Definition: pass_bindings_cache_mtl.mm:22
offset
Point offset
Definition: stroke_path_geometry.cc:300
render_target.h
impeller::PassBindingsCacheMTL::PassBindingsCacheMTL
PassBindingsCacheMTL()
Definition: pass_bindings_cache_mtl.h:25
impeller
Definition: aiks_blur_unittests.cc:20
impeller::TRect
Definition: rect.h:122
impeller::PassBindingsCacheMTL::SetRenderPipelineState
void SetRenderPipelineState(id< MTLRenderPipelineState > pipeline)
Definition: pass_bindings_cache_mtl.mm:13