10 #include "fml/mapping.h"
13 #include "impeller/runtime_stage/runtime_stage_flatbuffers.h"
14 #include "runtime_stage_types_flatbuffers.h"
32 case fb::Stage::kVertex:
34 case fb::Stage::kFragment:
36 case fb::Stage::kCompute:
47 "_RESERVED_IDENTIFIER_FIXUP_gl_DefaultUniformBlock";
49 std::unique_ptr<RuntimeStage> RuntimeStage::RuntimeStageIfPresent(
50 const fb::RuntimeStage* runtime_stage,
51 const std::shared_ptr<fml::Mapping>& payload) {
56 return std::unique_ptr<RuntimeStage>(
61 const std::shared_ptr<fml::Mapping>& payload) {
62 if (payload ==
nullptr || !payload->GetMapping()) {
65 if (!fb::RuntimeStagesBufferHasIdentifier(payload->GetMapping())) {
69 auto raw_stages = fb::GetRuntimeStages(payload->GetMapping());
72 RuntimeStageIfPresent(raw_stages->sksl(), payload)},
74 RuntimeStageIfPresent(raw_stages->metal(), payload)},
76 RuntimeStageIfPresent(raw_stages->opengles(), payload)},
78 RuntimeStageIfPresent(raw_stages->vulkan(), payload)},
83 const std::shared_ptr<fml::Mapping>& payload)
85 FML_DCHECK(runtime_stage);
88 entrypoint_ = runtime_stage->entrypoint()->str();
90 auto* uniforms = runtime_stage->uniforms();
92 for (
auto i = uniforms->begin(), end = uniforms->end(); i != end; i++) {
94 desc.
name = i->name()->str();
98 static_cast<size_t>(i->rows()),
static_cast<size_t>(i->columns())};
101 if (i->struct_layout()) {
102 for (
const auto& byte_type : *i->struct_layout()) {
103 desc.
struct_layout.push_back(
static_cast<uint8_t
>(byte_type));
107 uniforms_.emplace_back(std::move(desc));
111 code_mapping_ = std::make_shared<fml::NonOwnedMapping>(
112 runtime_stage->shader()->data(),
113 runtime_stage->shader()->size(),
114 [payload = payload_](
auto,
auto) {}
129 return code_mapping_;
138 const std::string& name)
const {
139 for (
const auto& uniform : uniforms_) {
140 if (uniform.name == name) {