Flutter Impeller
runtime_stage.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_RUNTIME_STAGE_RUNTIME_STAGE_H_
6 #define FLUTTER_IMPELLER_RUNTIME_STAGE_RUNTIME_STAGE_H_
7 
8 #include <map>
9 #include <memory>
10 #include <string>
11 
12 #include "flutter/fml/mapping.h"
13 
16 #include "runtime_stage_types_flatbuffers.h"
17 #include "third_party/abseil-cpp/absl/status/statusor.h"
18 
19 namespace impeller {
20 
21 class RuntimeStage {
22  public:
23  static const char* kVulkanUBOName;
24 
25  using Map = std::map<RuntimeStageBackend, std::shared_ptr<RuntimeStage>>;
26  static absl::StatusOr<Map> DecodeRuntimeStages(
27  const std::shared_ptr<fml::Mapping>& payload);
28 
29  static absl::StatusOr<RuntimeStage> Create(
30  const fb::RuntimeStage* runtime_stage,
31  const std::shared_ptr<fml::Mapping>& payload);
32 
36 
38 
39  const std::vector<RuntimeUniformDescription>& GetUniforms() const;
40 
41  const std::vector<DescriptorSetLayout>& GetDescriptorSetLayouts() const;
42 
43  const std::string& GetEntrypoint() const;
44 
45  const RuntimeUniformDescription* GetUniform(const std::string& name) const;
46 
47  const std::shared_ptr<fml::Mapping>& GetCodeMapping() const;
48 
49  bool IsDirty() const;
50 
51  void SetClean();
52 
53  private:
54  explicit RuntimeStage(std::shared_ptr<fml::Mapping> payload);
55 
56  std::shared_ptr<fml::Mapping> payload_;
58  std::string entrypoint_;
59  std::shared_ptr<fml::Mapping> code_mapping_;
60  std::vector<RuntimeUniformDescription> uniforms_;
61  std::vector<DescriptorSetLayout> descriptor_set_layouts_;
62  bool is_dirty_ = true;
63 
64  RuntimeStage(const RuntimeStage&) = delete;
65 
66  static std::unique_ptr<RuntimeStage> RuntimeStageIfPresent(
67  const fb::RuntimeStage* runtime_stage,
68  const std::shared_ptr<fml::Mapping>& payload);
69 
70  RuntimeStage& operator=(const RuntimeStage&) = delete;
71 };
72 
73 } // namespace impeller
74 
75 #endif // FLUTTER_IMPELLER_RUNTIME_STAGE_RUNTIME_STAGE_H_
RuntimeStage(RuntimeStage &&)
const std::string & GetEntrypoint() const
RuntimeStage & operator=(RuntimeStage &&)
static absl::StatusOr< RuntimeStage > Create(const fb::RuntimeStage *runtime_stage, const std::shared_ptr< fml::Mapping > &payload)
const std::vector< RuntimeUniformDescription > & GetUniforms() const
const RuntimeUniformDescription * GetUniform(const std::string &name) const
std::map< RuntimeStageBackend, std::shared_ptr< RuntimeStage > > Map
Definition: runtime_stage.h:25
static const char * kVulkanUBOName
Definition: runtime_stage.h:23
const std::shared_ptr< fml::Mapping > & GetCodeMapping() const
const std::vector< DescriptorSetLayout > & GetDescriptorSetLayouts() const
static absl::StatusOr< Map > DecodeRuntimeStages(const std::shared_ptr< fml::Mapping > &payload)
RuntimeShaderStage GetShaderStage() const