10 #include "fml/mapping.h"
12 #include "impeller/runtime_stage/runtime_stage_flatbuffers.h"
13 #include "runtime_stage_types_flatbuffers.h"
51 case fb::Stage::kVertex:
53 case fb::Stage::kFragment:
55 case fb::Stage::kCompute:
61 std::unique_ptr<RuntimeStage> RuntimeStage::RuntimeStageIfPresent(
62 const fb::RuntimeStage* runtime_stage,
63 const std::shared_ptr<fml::Mapping>& payload) {
68 return std::unique_ptr<RuntimeStage>(
73 const std::shared_ptr<fml::Mapping>& payload) {
74 if (payload ==
nullptr || !payload->GetMapping()) {
77 if (!fb::RuntimeStagesBufferHasIdentifier(payload->GetMapping())) {
81 auto raw_stages = fb::GetRuntimeStages(payload->GetMapping());
84 RuntimeStageIfPresent(raw_stages->sksl(), payload)},
86 RuntimeStageIfPresent(raw_stages->metal(), payload)},
88 RuntimeStageIfPresent(raw_stages->opengles(), payload)},
90 RuntimeStageIfPresent(raw_stages->vulkan(), payload)},
95 const std::shared_ptr<fml::Mapping>& payload)
97 FML_DCHECK(runtime_stage);
100 entrypoint_ = runtime_stage->entrypoint()->str();
102 auto* uniforms = runtime_stage->uniforms();
104 for (
auto i = uniforms->begin(), end = uniforms->end(); i != end; i++) {
106 desc.
name = i->name()->str();
110 static_cast<size_t>(i->rows()),
static_cast<size_t>(i->columns())};
113 uniforms_.emplace_back(std::move(desc));
117 code_mapping_ = std::make_shared<fml::NonOwnedMapping>(
118 runtime_stage->shader()->data(),
119 runtime_stage->shader()->size(),
120 [payload = payload_](
auto,
auto) {}
135 return code_mapping_;
144 const std::string& name)
const {
145 for (
const auto& uniform : uniforms_) {
146 if (uniform.name == name) {