5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_RENDER_PASS_MTL_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_RENDER_PASS_MTL_H_
8 #include <Metal/Metal.h>
10 #include "flutter/fml/macros.h"
25 id<MTLCommandBuffer> buffer_ = nil;
26 id<MTLRenderCommandEncoder> encoder_ = nil;
27 MTLRenderPassDescriptor* desc_ = nil;
29 bool is_metal_trace_active_ =
false;
30 bool is_valid_ =
false;
34 mutable bool did_finish_encoding_ =
false;
39 size_t instance_count_ = 1u;
40 size_t base_vertex_ = 0u;
41 size_t vertex_count_ = 0u;
42 bool has_valid_pipeline_ =
false;
43 bool has_label_ =
false;
46 MTLIndexType index_type_ = {};
48 RenderPassMTL(std::shared_ptr<const Context> context,
49 const RenderTarget& target,
50 id<MTLCommandBuffer> buffer);
53 void ReserveCommands(
size_t command_count)
override {}
56 bool IsValid()
const override;
59 void OnSetLabel(std::string label)
override;
62 bool OnEncodeCommands(
const Context& context)
const override;
66 const std::shared_ptr<Pipeline<PipelineDescriptor>>& pipeline)
override;
69 void SetCommandLabel(std::string_view label)
override;
72 void SetStencilReference(uint32_t value)
override;
75 void SetBaseVertex(uint64_t value)
override;
78 void SetViewport(Viewport viewport)
override;
81 void SetScissor(
IRect scissor)
override;
84 void SetInstanceCount(
size_t count)
override;
87 bool SetVertexBuffer(VertexBuffer buffer)
override;
90 fml::Status Draw()
override;
95 const ShaderUniformSlot& slot,
96 const ShaderMetadata& metadata,
97 BufferView view)
override;
102 const ShaderUniformSlot& slot,
103 const std::shared_ptr<const ShaderMetadata>& metadata,
104 BufferView view)
override;
109 const SampledImageSlot& slot,
110 const ShaderMetadata& metadata,
111 std::shared_ptr<const Texture> texture,
112 const std::unique_ptr<const Sampler>& sampler)
override;
114 RenderPassMTL(
const RenderPassMTL&) =
delete;
116 RenderPassMTL& operator=(
const RenderPassMTL&) =
delete;
121 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_RENDER_PASS_MTL_H_