62 const std::shared_ptr<fml::Mapping>& payload) {
63 if (payload ==
nullptr || !payload->GetMapping()) {
66 if (!fb::RuntimeStagesBufferHasIdentifier(payload->GetMapping())) {
70 auto raw_stages = fb::GetRuntimeStages(payload->GetMapping());
73 RuntimeStageIfPresent(raw_stages->sksl(), payload)},
75 RuntimeStageIfPresent(raw_stages->metal(), payload)},
77 RuntimeStageIfPresent(raw_stages->opengles(), payload)},
79 RuntimeStageIfPresent(raw_stages->vulkan(), payload)},
84 const std::shared_ptr<fml::Mapping>& payload)
89 entrypoint_ = runtime_stage->entrypoint()->str();
91 auto* uniforms = runtime_stage->uniforms();
93 for (
auto i = uniforms->begin(),
end = uniforms->end(); i !=
end; i++) {
95 desc.name = i->name()->str();
96 desc.location = i->location();
97 desc.binding = i->binding();
98 desc.type =
ToType(i->type());
100 static_cast<size_t>(i->rows()),
static_cast<size_t>(i->columns())};
101 desc.bit_width = i->bit_width();
102 desc.array_elements = i->array_elements();
103 if (i->struct_layout()) {
104 for (
const auto& byte_type : *i->struct_layout()) {
105 desc.struct_layout.push_back(
static_cast<uint8_t
>(byte_type));
108 desc.binding = i->binding();
109 desc.struct_float_count = i->struct_float_count();
110 uniforms_.push_back(std::move(desc));
114 code_mapping_ = std::make_shared<fml::NonOwnedMapping>(
115 runtime_stage->shader()->data(),
116 runtime_stage->shader()->size(),
117 [payload = payload_](
auto,
auto) {}
123 static_cast<uint32_t
>(uniform.location),
129 static_cast<uint32_t
>(uniform.binding),