5 #ifndef FLUTTER_IMPELLER_RENDERER_PIPELINE_H_
6 #define FLUTTER_IMPELLER_RENDERER_PIPELINE_H_
19 class PipelineLibrary;
20 template <
typename PipelineDescriptor_>
26 std::shared_future<std::shared_ptr<Pipeline<T>>>
future;
28 const std::shared_ptr<Pipeline<T>>
Get()
const {
return future.get(); }
52 virtual bool IsValid()
const = 0;
64 std::function<
void(T& desc)> descriptor_callback)
const;
67 Pipeline(std::weak_ptr<PipelineLibrary> library, T desc);
70 const std::weak_ptr<PipelineLibrary> library_;
78 extern template class Pipeline<PipelineDescriptor>;
79 extern template class Pipeline<ComputePipelineDescriptor>;
82 const Context& context,
83 std::optional<PipelineDescriptor> desc);
86 const Context& context,
87 std::optional<ComputePipelineDescriptor> desc);
89 template <
class VertexShader_,
class FragmentShader_>
99 Builder::MakeDefaultPipelineDescriptor(context))) {}
102 std::optional<PipelineDescriptor> desc)
106 : pipeline_future_(
std::move(future)) {}
113 if (pipeline_future_.IsValid()) {
114 pipeline_ = pipeline_future_.Get();
120 return pipeline_future_.descriptor;
125 std::shared_ptr<Pipeline<PipelineDescriptor>> pipeline_;
126 bool did_wait_ =
false;
133 template <
class ComputeShader_>
142 Builder::MakeDefaultPipelineDescriptor(context))) {}
146 std::optional<ComputePipelineDescriptor> compute_desc)
150 : pipeline_future_(
std::move(future)) {}
152 std::shared_ptr<Pipeline<ComputePipelineDescriptor>>
WaitAndGet() {
157 if (pipeline_future_.IsValid()) {
158 pipeline_ = pipeline_future_.Get();
165 std::shared_ptr<Pipeline<ComputePipelineDescriptor>> pipeline_;
166 bool did_wait_ =
false;
175 #endif // FLUTTER_IMPELLER_RENDERER_PIPELINE_H_