10 #include "flutter/fml/macros.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_;
73 FML_DISALLOW_COPY_AND_ASSIGN(
Pipeline);
76 extern template class Pipeline<PipelineDescriptor>;
77 extern template class Pipeline<ComputePipelineDescriptor>;
80 const Context& context,
81 std::optional<PipelineDescriptor> desc);
84 const Context& context,
85 std::optional<ComputePipelineDescriptor> desc);
87 template <
class VertexShader_,
class FragmentShader_>
97 Builder::MakeDefaultPipelineDescriptor(context))) {}
100 std::optional<PipelineDescriptor> desc)
104 : pipeline_future_(
std::move(future)) {}
111 if (pipeline_future_.IsValid()) {
112 pipeline_ = pipeline_future_.Get();
118 return pipeline_future_.descriptor;
123 std::shared_ptr<Pipeline<PipelineDescriptor>> pipeline_;
124 bool did_wait_ =
false;
129 template <
class ComputeShader_>
138 Builder::MakeDefaultPipelineDescriptor(context))) {}
142 std::optional<ComputePipelineDescriptor> compute_desc)
146 : pipeline_future_(
std::move(future)) {}
148 std::shared_ptr<Pipeline<ComputePipelineDescriptor>>
WaitAndGet() {
153 if (pipeline_future_.IsValid()) {
154 pipeline_ = pipeline_future_.Get();
161 std::shared_ptr<Pipeline<ComputePipelineDescriptor>> pipeline_;
162 bool did_wait_ =
false;