| // 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_SPIRV_COMPILER_H_ | |
| #define FLUTTER_IMPELLER_COMPILER_SPIRV_COMPILER_H_ | |
| #include <cstdint> | |
| #include <vector> | |
| #include "flutter/fml/mapping.h" | |
| #include "impeller/compiler/includer.h" | |
| #include "impeller/compiler/source_options.h" | |
| #include "shaderc/shaderc.hpp" | |
| namespace impeller { | |
| namespace compiler { | |
| struct SPIRVCompilerSourceProfile { | |
| shaderc_profile profile = shaderc_profile_core; | |
| uint32_t version = 460; | |
| }; | |
| struct SPIRVCompilerTargetEnv { | |
| shaderc_target_env env = shaderc_target_env::shaderc_target_env_vulkan; | |
| shaderc_env_version version = | |
| shaderc_env_version::shaderc_env_version_vulkan_1_1; | |
| shaderc_spirv_version spirv_version = | |
| shaderc_spirv_version::shaderc_spirv_version_1_3; | |
| }; | |
| struct SPIRVCompilerOptions { | |
| bool generate_debug_info = true; | |
| //---------------------------------------------------------------------------- | |
| // Source Options. | |
| //---------------------------------------------------------------------------- | |
| std::optional<shaderc_source_language> source_langauge; | |
| std::optional<SPIRVCompilerSourceProfile> source_profile; | |
| shaderc_optimization_level optimization_level = | |
| shaderc_optimization_level::shaderc_optimization_level_performance; | |
| //---------------------------------------------------------------------------- | |
| // Target Options. | |
| //---------------------------------------------------------------------------- | |
| std::optional<SPIRVCompilerTargetEnv> target; | |
| std::vector<std::string> macro_definitions; | |
| std::shared_ptr<Includer> includer; | |
| bool relaxed_vulkan_rules = false; | |
| shaderc::CompileOptions BuildShadercOptions() const; | |
| }; | |
| class SPIRVCompiler { | |
| public: | |
| SPIRVCompiler(const SourceOptions& options, | |
| std::shared_ptr<const fml::Mapping> sources); | |
| ~SPIRVCompiler(); | |
| std::shared_ptr<fml::Mapping> CompileToSPV( | |
| std::stringstream& error_stream, | |
| const shaderc::CompileOptions& spirv_options) const; | |
| private: | |
| SourceOptions options_; | |
| const std::shared_ptr<const fml::Mapping> sources_; | |
| std::string GetSourcePrefix() const; | |
| SPIRVCompiler(const SPIRVCompiler&) = delete; | |
| SPIRVCompiler& operator=(const SPIRVCompiler&) = delete; | |
| }; | |
| } // namespace compiler | |
| } // namespace impeller | |
| #endif // FLUTTER_IMPELLER_COMPILER_SPIRV_COMPILER_H_ |