| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef FLUTTER_IMPELLER_COMPILER_SHADER_BUNDLE_DATA_H_ | |
| #define FLUTTER_IMPELLER_COMPILER_SHADER_BUNDLE_DATA_H_ | |
| #include <memory> | |
| #include <vector> | |
| #include "flutter/fml/mapping.h" | |
| #include "impeller/compiler/types.h" | |
| #include "impeller/shader_bundle/shader_bundle_flatbuffers.h" | |
| namespace impeller { | |
| namespace compiler { | |
| class ShaderBundleData { | |
| public: | |
| struct ShaderUniformStructField { | |
| std::string name; | |
| spirv_cross::SPIRType::BaseType type = | |
| spirv_cross::SPIRType::BaseType::Float; | |
| size_t offset_in_bytes = 0u; | |
| size_t element_size_in_bytes = 0u; | |
| size_t total_size_in_bytes = 0u; | |
| std::optional<size_t> array_elements = std::nullopt; | |
| }; | |
| struct ShaderUniformStruct { | |
| std::string name; | |
| size_t ext_res_0 = 0u; | |
| size_t set = 0u; | |
| size_t binding = 0u; | |
| size_t size_in_bytes = 0u; | |
| std::vector<ShaderUniformStructField> fields; | |
| }; | |
| struct ShaderUniformTexture { | |
| std::string name; | |
| size_t ext_res_0 = 0u; | |
| size_t set = 0u; | |
| size_t binding = 0u; | |
| }; | |
| ShaderBundleData(std::string entrypoint, | |
| spv::ExecutionModel stage, | |
| TargetPlatform target_platform); | |
| ~ShaderBundleData(); | |
| void AddUniformStruct(ShaderUniformStruct uniform_struct); | |
| void AddUniformTexture(ShaderUniformTexture uniform_texture); | |
| void AddInputDescription(InputDescription input); | |
| void SetShaderData(std::shared_ptr<fml::Mapping> shader); | |
| void SetSkSLData(std::shared_ptr<fml::Mapping> sksl); | |
| std::unique_ptr<fb::shaderbundle::BackendShaderT> CreateFlatbuffer() const; | |
| private: | |
| const std::string entrypoint_; | |
| const spv::ExecutionModel stage_; | |
| const TargetPlatform target_platform_; | |
| std::vector<ShaderUniformStruct> uniform_structs_; | |
| std::vector<ShaderUniformTexture> uniform_textures_; | |
| std::vector<InputDescription> inputs_; | |
| std::shared_ptr<fml::Mapping> shader_; | |
| std::shared_ptr<fml::Mapping> sksl_; | |
| ShaderBundleData(const ShaderBundleData&) = delete; | |
| ShaderBundleData& operator=(const ShaderBundleData&) = delete; | |
| }; | |
| } // namespace compiler | |
| } // namespace impeller | |
| #endif // FLUTTER_IMPELLER_COMPILER_SHADER_BUNDLE_DATA_H_ |