12#include "impeller/shader_archive/shader_archive_flatbuffers.h"
18 case fb::Stage::kVertex:
20 case fb::Stage::kFragment:
22 case fb::Stage::kCompute:
29 : payload_(
std::move(payload)) {
30 if (!payload_ || payload_->GetMapping() ==
nullptr) {
35 if (!fb::ShaderArchiveBufferHasIdentifier(payload_->GetMapping())) {
40 auto shader_archive = fb::GetShaderArchive(payload_->GetMapping());
41 if (!shader_archive) {
45 if (
auto items = shader_archive->items()) {
46 for (
auto i = items->begin(),
end = items->end(); i !=
end; i++) {
48 key.name = i->name()->str();
50 shaders_[
key] = std::make_shared<fml::NonOwnedMapping>(
51 i->mapping()->Data(), i->mapping()->size(),
52 [payload = payload_](
auto,
auto) {
62ShaderArchive::ShaderArchive(ShaderArchive&&) =
default;
64ShaderArchive::~ShaderArchive() =
default;
66bool ShaderArchive::IsValid()
const {
70size_t ShaderArchive::GetShaderCount()
const {
71 return shaders_.size();
74std::shared_ptr<fml::Mapping> ShaderArchive::GetMapping(
76 std::string
name)
const {
80 auto found = shaders_.find(
key);
81 return found == shaders_.end() ? nullptr : found->second;
84size_t ShaderArchive::IterateAllShaders(
86 const std::string&
name,
87 const std::shared_ptr<fml::Mapping>& mapping)>&
93 for (
const auto& shader : shaders_) {
95 if (!
callback(shader.first.type, shader.first.name, shader.second)) {
ShaderArchive(ShaderArchive &&)
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
#define FML_UNREACHABLE()
constexpr ArchiveShaderType ToShaderType(fb::Stage stage)