Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
impeller::ShaderArchiveWriter Class Reference

#include <shader_archive_writer.h>

Public Member Functions

 ShaderArchiveWriter ()
 
 ~ShaderArchiveWriter ()
 
bool AddShaderAtPath (const std::string &path)
 
void SetEntryPointPrefix (std::string prefix)
 
bool AddShader (ArchiveShaderType type, std::string name, std::shared_ptr< fml::Mapping > mapping)
 
std::shared_ptr< fml::MappingCreateMapping () const
 

Detailed Description

Definition at line 17 of file shader_archive_writer.h.

Constructor & Destructor Documentation

◆ ShaderArchiveWriter()

impeller::ShaderArchiveWriter::ShaderArchiveWriter ( )
default

◆ ~ShaderArchiveWriter()

impeller::ShaderArchiveWriter::~ShaderArchiveWriter ( )
default

References type.

Member Function Documentation

◆ AddShader()

bool impeller::ShaderArchiveWriter::AddShader ( ArchiveShaderType  type,
std::string  name,
std::shared_ptr< fml::Mapping mapping 
)

Definition at line 87 of file shader_archive_writer.cc.

89 {
90 if (name.empty() || !mapping || mapping->GetMapping() == nullptr) {
91 return false;
92 }
93
94 shader_descriptions_.emplace_back(
95 ShaderDescription{type, std::move(name), std::move(mapping)});
96 return true;
97}
GLenum type
const char * name
Definition fuchsia.cc:49

References name, and type.

Referenced by AddShaderAtPath(), and impeller::testing::TEST().

◆ AddShaderAtPath()

bool impeller::ShaderArchiveWriter::AddShaderAtPath ( const std::string &  path)

Definition at line 40 of file shader_archive_writer.cc.

40 {
41#if FML_OS_QNX
42 return false;
43#else // FML_OS_QNX
44 std::filesystem::path path(std_path);
45
46 if (path.stem().empty()) {
47 FML_LOG(ERROR) << "File path stem was empty for " << path;
48 return false;
49 }
50
51 if (path.extension() != ".gles" && path.extension() != ".vkspv") {
52 FML_LOG(ERROR) << "File path doesn't have a known shader extension "
53 << path;
54 return false;
55 }
56
57 // Get rid of .gles
58 path = path.replace_extension();
59
60 auto shader_type = InferShaderTypefromFileExtension(path.extension());
61
62 if (!shader_type.has_value()) {
63 FML_LOG(ERROR) << "Could not infer shader type from file extension: "
64 << path.extension().string();
65 return false;
66 }
67
68 // Get rid of the shader type extension (.vert, .frag, etc..).
69 path = path.replace_extension();
70
71 const auto shader_name = prefix_ + path.stem().string();
72 if (shader_name.empty()) {
73 FML_LOG(ERROR) << "Shader name was empty.";
74 return false;
75 }
76
77 auto file_mapping = fml::FileMapping::CreateReadOnly(std_path);
78 if (!file_mapping) {
79 FML_LOG(ERROR) << "File doesn't exist at path: " << path;
80 return false;
81 }
82
83 return AddShader(shader_type.value(), shader_name, std::move(file_mapping));
84#endif // FML_OS_QNX
85}
static std::unique_ptr< FileMapping > CreateReadOnly(const std::string &path)
Definition mapping.cc:20
bool AddShader(ArchiveShaderType type, std::string name, std::shared_ptr< fml::Mapping > mapping)
#define FML_LOG(severity)
Definition logging.h:101
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switch_defs.h:52
std::optional< ArchiveShaderType > InferShaderTypefromFileExtension(const std::filesystem::path &path)

References AddShader(), fml::FileMapping::CreateReadOnly(), FML_LOG, and impeller::InferShaderTypefromFileExtension().

Referenced by impeller::Main().

◆ CreateMapping()

std::shared_ptr< fml::Mapping > impeller::ShaderArchiveWriter::CreateMapping ( ) const

Definition at line 111 of file shader_archive_writer.cc.

111 {
112 fb::ShaderArchiveT shader_archive;
113 shader_archive.format_version =
114 static_cast<uint32_t>(fb::ShaderArchiveFormatVersion::kVersion);
115 for (const auto& shader_description : shader_descriptions_) {
116 auto mapping = shader_description.mapping;
117 if (!mapping) {
118 return nullptr;
119 }
120 auto desc = std::make_unique<fb::ShaderBlobT>();
121 desc->name = shader_description.name;
122 desc->stage = ToStage(shader_description.type);
123 desc->mapping = {mapping->GetMapping(),
124 mapping->GetMapping() + mapping->GetSize()};
125 shader_archive.items.emplace_back(std::move(desc));
126 }
127 auto builder = std::make_shared<flatbuffers::FlatBufferBuilder>();
128 builder->Finish(fb::ShaderArchive::Pack(*builder.get(), &shader_archive),
129 fb::ShaderArchiveIdentifier());
130 return std::make_shared<fml::NonOwnedMapping>(builder->GetBufferPointer(),
131 builder->GetSize(),
132 [builder](auto, auto) {});
133}
constexpr fb::Stage ToStage(ArchiveShaderType type)

References impeller::ToStage().

Referenced by impeller::Main(), and impeller::testing::TEST().

◆ SetEntryPointPrefix()

void impeller::ShaderArchiveWriter::SetEntryPointPrefix ( std::string  prefix)

Definition at line 20 of file shader_archive_writer.cc.

20 {
21 prefix_ = std::move(prefix);
22}

Referenced by impeller::Main().


The documentation for this class was generated from the following files: