Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
impeller::PipelineLibraryVK Class Referencefinal

#include <pipeline_library_vk.h>

Inheritance diagram for impeller::PipelineLibraryVK:
impeller::PipelineLibrary impeller::BackendCast< PipelineLibraryVK, PipelineLibrary >

Public Member Functions

 ~PipelineLibraryVK () override
 
void DidAcquireSurfaceFrame ()
 
const std::shared_ptr< PipelineCacheVK > & GetPSOCache () const
 
const std::shared_ptr< fml::ConcurrentTaskRunner > & GetWorkerTaskRunner () const
 
- Public Member Functions inherited from impeller::PipelineLibrary
virtual ~PipelineLibrary ()
 
PipelineFuture< PipelineDescriptorGetPipeline (std::optional< PipelineDescriptor > descriptor)
 
PipelineFuture< ComputePipelineDescriptorGetPipeline (std::optional< ComputePipelineDescriptor > descriptor)
 

Private Member Functions

bool IsValid () const override
 
PipelineFuture< PipelineDescriptorGetPipeline (PipelineDescriptor descriptor) override
 
PipelineFuture< ComputePipelineDescriptorGetPipeline (ComputePipelineDescriptor descriptor) override
 
void RemovePipelinesWithEntryPoint (std::shared_ptr< const ShaderFunction > function) override
 

Additional Inherited Members

- Static Public Member Functions inherited from impeller::BackendCast< PipelineLibraryVK, PipelineLibrary >
static PipelineLibraryVKCast (PipelineLibrary &base)
 
static const PipelineLibraryVKCast (const PipelineLibrary &base)
 
static PipelineLibraryVKCast (PipelineLibrary *base)
 
static const PipelineLibraryVKCast (const PipelineLibrary *base)
 
- Protected Member Functions inherited from impeller::PipelineLibrary
 PipelineLibrary ()
 

Detailed Description

Definition at line 26 of file pipeline_library_vk.h.

Constructor & Destructor Documentation

◆ ~PipelineLibraryVK()

impeller::PipelineLibraryVK::~PipelineLibraryVK ( )
overridedefault

Member Function Documentation

◆ DidAcquireSurfaceFrame()

void impeller::PipelineLibraryVK::DidAcquireSurfaceFrame ( )

Definition at line 257 of file pipeline_library_vk.cc.

257 {
258 if (++frames_acquired_ == 50u) {
259 PersistPipelineCacheToDisk();
260 }
261}

◆ GetPipeline() [1/2]

PipelineFuture< ComputePipelineDescriptor > impeller::PipelineLibraryVK::GetPipeline ( ComputePipelineDescriptor  descriptor)
overrideprivatevirtual

Implements impeller::PipelineLibrary.

Definition at line 200 of file pipeline_library_vk.cc.

201 {
202 Lock lock(compute_pipelines_mutex_);
203 if (auto found = compute_pipelines_.find(descriptor);
204 found != compute_pipelines_.end()) {
205 return found->second;
206 }
207
208 if (!IsValid()) {
209 return {
210 descriptor,
211 RealizedFuture<std::shared_ptr<Pipeline<ComputePipelineDescriptor>>>(
212 nullptr)};
213 }
214
215 auto promise = std::make_shared<
216 std::promise<std::shared_ptr<Pipeline<ComputePipelineDescriptor>>>>();
217 auto pipeline_future = PipelineFuture<ComputePipelineDescriptor>{
218 descriptor, promise->get_future()};
219 compute_pipelines_[descriptor] = pipeline_future;
220
221 auto weak_this = weak_from_this();
222
223 worker_task_runner_->PostTask([descriptor, weak_this, promise]() {
224 auto self = weak_this.lock();
225 if (!self) {
226 promise->set_value(nullptr);
227 VALIDATION_LOG << "Pipeline library was collected before the pipeline "
228 "could be created.";
229 return;
230 }
231
232 auto pipeline =
233 PipelineLibraryVK::Cast(*self).CreateComputePipeline(descriptor);
234 if (!pipeline) {
235 promise->set_value(nullptr);
236 VALIDATION_LOG << "Could not create pipeline: " << descriptor.GetLabel();
237 return;
238 }
239
240 promise->set_value(std::move(pipeline));
241 });
242
243 return pipeline_future;
244}
static PipelineLibraryVK & Cast(PipelineLibrary &base)
#define VALIDATION_LOG
Definition validation.h:73

◆ GetPipeline() [2/2]

PipelineFuture< PipelineDescriptor > impeller::PipelineLibraryVK::GetPipeline ( PipelineDescriptor  descriptor)
overrideprivatevirtual

Implements impeller::PipelineLibrary.

Definition at line 159 of file pipeline_library_vk.cc.

160 {
161 Lock lock(pipelines_mutex_);
162 if (auto found = pipelines_.find(descriptor); found != pipelines_.end()) {
163 return found->second;
164 }
165
166 if (!IsValid()) {
167 return {
168 descriptor,
169 RealizedFuture<std::shared_ptr<Pipeline<PipelineDescriptor>>>(nullptr)};
170 }
171
172 auto promise = std::make_shared<
173 NoExceptionPromise<std::shared_ptr<Pipeline<PipelineDescriptor>>>>();
174 auto pipeline_future =
175 PipelineFuture<PipelineDescriptor>{descriptor, promise->get_future()};
176 pipelines_[descriptor] = pipeline_future;
177
178 auto weak_this = weak_from_this();
179
180 worker_task_runner_->PostTask([descriptor, weak_this, promise]() {
181 auto thiz = weak_this.lock();
182 if (!thiz) {
183 promise->set_value(nullptr);
184 VALIDATION_LOG << "Pipeline library was collected before the pipeline "
185 "could be created.";
186 return;
187 }
188
189 promise->set_value(PipelineVK::Create(
190 descriptor, //
191 PipelineLibraryVK::Cast(*thiz).device_holder_.lock(), //
192 weak_this //
193 ));
194 });
195
196 return pipeline_future;
197}
static std::unique_ptr< PipelineVK > Create(const PipelineDescriptor &desc, const std::shared_ptr< DeviceHolderVK > &device_holder, const std::weak_ptr< PipelineLibrary > &weak_library, std::shared_ptr< SamplerVK > immutable_sampler={})

◆ GetPSOCache()

const std::shared_ptr< PipelineCacheVK > & impeller::PipelineLibraryVK::GetPSOCache ( ) const

Definition at line 274 of file pipeline_library_vk.cc.

274 {
275 return pso_cache_;
276}

◆ GetWorkerTaskRunner()

const std::shared_ptr< fml::ConcurrentTaskRunner > & impeller::PipelineLibraryVK::GetWorkerTaskRunner ( ) const

Definition at line 279 of file pipeline_library_vk.cc.

279 {
280 return worker_task_runner_;
281}

◆ IsValid()

bool impeller::PipelineLibraryVK::IsValid ( ) const
overrideprivatevirtual

Implements impeller::PipelineLibrary.

Definition at line 48 of file pipeline_library_vk.cc.

48 {
49 return is_valid_;
50}

◆ RemovePipelinesWithEntryPoint()

void impeller::PipelineLibraryVK::RemovePipelinesWithEntryPoint ( std::shared_ptr< const ShaderFunction function)
overrideprivatevirtual

Implements impeller::PipelineLibrary.

Definition at line 247 of file pipeline_library_vk.cc.

248 {
249 Lock lock(pipelines_mutex_);
250
251 fml::erase_if(pipelines_, [&](auto item) {
252 return item->first.GetEntrypointForStage(function->GetStage())
253 ->IsEqual(*function);
254 });
255}
Dart_NativeFunction function
Definition fuchsia.cc:51
void erase_if(Collection &container, std::function< bool(typename Collection::iterator)> predicate)
Definition container.h:16

The documentation for this class was generated from the following files: