// 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_SKSL_H_ #define FLUTTER_IMPELLER_COMPILER_SPIRV_SKSL_H_ #include #include #include #include #include "flutter/fml/logging.h" #include "spirv_glsl.hpp" namespace impeller { namespace compiler { class CompilerSkSL : public spirv_cross::CompilerGLSL { public: explicit CompilerSkSL(std::vector spirv_) : CompilerGLSL(std::move(spirv_)) {} CompilerSkSL(const uint32_t* ir_, size_t word_count) : CompilerGLSL(ir_, word_count) {} explicit CompilerSkSL(const spirv_cross::ParsedIR& ir_) : spirv_cross::CompilerGLSL(ir_) {} explicit CompilerSkSL(spirv_cross::ParsedIR&& ir_) : spirv_cross::CompilerGLSL(std::move(ir_)) {} std::string compile() override; private: std::string output_name_; void emit_header() override; void emit_uniform(const spirv_cross::SPIRVariable& var) override; void fixup_user_functions(); void detect_unsupported_resources(); bool emit_constant_resources(); bool emit_struct_resources(); bool emit_uniform_resources(); bool emit_output_resources(); bool emit_global_variable_resources(); bool emit_undefined_values(); void emit_resources(); void emit_interface_block(const spirv_cross::SPIRVariable& var); void emit_function_prototype( spirv_cross::SPIRFunction& func, const spirv_cross::Bitset& return_flags) override; std::string image_type_glsl(const spirv_cross::SPIRType& type, uint32_t id = 0, bool member = false) override; std::string builtin_to_glsl(spv::BuiltIn builtin, spv::StorageClass storage) override; std::string to_texture_op( const spirv_cross::Instruction& i, bool sparse, bool* forward, spirv_cross::SmallVector& inherited_expressions) override; std::string to_function_name( const spirv_cross::CompilerGLSL::TextureFunctionNameArguments& args) override; std::string to_function_args( const spirv_cross::CompilerGLSL::TextureFunctionArguments& args, bool* p_forward) override; }; } // namespace compiler } // namespace impeller #endif // FLUTTER_IMPELLER_COMPILER_SPIRV_SKSL_H_