#include <shader_archive.h>
Definition at line 19 of file shader_archive.h.
◆ ShaderArchive()
◆ ~ShaderArchive()
| impeller::ShaderArchive::~ShaderArchive |
( |
| ) |
|
|
default |
◆ Create()
| absl::StatusOr< ShaderArchive > impeller::ShaderArchive::Create |
( |
std::shared_ptr< fml::Mapping > |
payload | ) |
|
|
static |
Definition at line 29 of file shader_archive.cc.
31 if (!payload || payload->GetMapping() ==
nullptr) {
32 return absl::InvalidArgumentError(
"Shader mapping was absent.");
35 if (!fb::ShaderArchiveBufferHasIdentifier(payload->GetMapping())) {
36 return absl::InvalidArgumentError(
"Invalid shader magic.");
39 flatbuffers::Verifier verifier(payload->GetMapping(), payload->GetSize());
40 if (!fb::VerifyShaderArchiveBuffer(verifier)) {
41 return absl::InvalidArgumentError(
42 "Shader archive buffer failed verification.");
45 auto shader_archive = fb::GetShaderArchive(payload->GetMapping());
46 if (!shader_archive) {
47 return absl::InvalidArgumentError(
"Could not read shader archive.");
50 const auto version = shader_archive->format_version();
52 static_cast<uint32_t
>(fb::ShaderArchiveFormatVersion::kVersion);
53 if (version != expected) {
54 std::stringstream stream;
55 stream <<
"Unsupported shader archive format version. Expected: "
56 << expected <<
", Got: " << version;
57 return absl::InvalidArgumentError(stream.str());
61 if (
auto items = shader_archive->items()) {
62 for (
auto i = items->begin(),
end = items->end(); i !=
end; i++) {
64 key.name = i->name()->str();
66 shaders[key] = std::make_shared<fml::NonOwnedMapping>(
67 i->mapping()->Data(), i->mapping()->size(), [payload](
auto,
auto) {
ShaderArchive(ShaderArchive &&)
constexpr ArchiveShaderType ToShaderType(fb::Stage stage)
References end, ShaderArchive(), and impeller::ToShaderType().
Referenced by impeller::testing::TEST().
◆ GetMapping()
| std::shared_ptr< fml::Mapping > impeller::ShaderArchive::GetMapping |
( |
ArchiveShaderType |
type, |
|
|
std::string |
name |
|
) |
| const |
Definition at line 89 of file shader_archive.cc.
94 key.name = std::move(name);
95 auto found = shaders_.find(key);
96 return found == shaders_.end() ? nullptr : found->second;
◆ GetShaderCount()
| size_t impeller::ShaderArchive::GetShaderCount |
( |
| ) |
const |
◆ IterateAllShaders()
| size_t impeller::ShaderArchive::IterateAllShaders |
( |
const std::function< bool(ArchiveShaderType type, const std::string &name, const std::shared_ptr< fml::Mapping > &mapping)> & |
callback | ) |
const |
Definition at line 99 of file shader_archive.cc.
108 for (
const auto& shader : shaders_) {
110 if (!callback(shader.first.type, shader.first.name, shader.second)) {
The documentation for this class was generated from the following files: