Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
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
13namespace 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
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_
static const uint8_t buffer[]
FlTexture * texture
std::unordered_map< SamplerDescriptor, std::unique_ptr< const Sampler >, ComparableHash< SamplerDescriptor >, ComparableEqual< SamplerDescriptor > > SamplerMap
Definition sampler.h:35
Point offset
Ensures that bindings on the pass are not redundantly set or updated. Avoids making the driver do add...
PassBindingsCacheMTL(const PassBindingsCacheMTL &)=delete
void SetScissor(const IRect &scissor)
void SetRenderPipelineState(id< MTLRenderPipelineState > pipeline)
bool SetSampler(ShaderStage stage, uint64_t index, id< MTLSamplerState > sampler)
bool SetBuffer(ShaderStage stage, uint64_t index, uint64_t offset, id< MTLBuffer > buffer)
void SetViewport(const Viewport &viewport)
void SetDepthStencilState(id< MTLDepthStencilState > depth_stencil)
void SetEncoder(id< MTLRenderCommandEncoder > encoder)
bool SetTexture(ShaderStage stage, uint64_t index, id< MTLTexture > texture)
PassBindingsCacheMTL(PassBindingsCacheMTL &&)=delete