// Copyright (c) Wojciech Figat. All rights reserved. #pragma once #if COMPILE_WITH_VK_SHADER_COMPILER #include "Engine/ShadersCompilation/ShaderCompiler.h" #include namespace glslang { class TShader; struct SpvOptions; } /// /// Implementation of shaders compiler for Vulkan rendering backend. /// class ShaderCompilerVulkan : public ShaderCompiler { private: Array _funcNameDefineBuffer; public: /// /// Initializes a new instance of the class. /// /// The profile. ShaderCompilerVulkan(ShaderProfile profile); /// /// Finalizes an instance of the class. /// ~ShaderCompilerVulkan(); protected: // [ShaderCompiler] bool CompileShader(ShaderFunctionMeta& meta, WritePermutationData customDataWrite = nullptr) override; bool OnCompileBegin() override; protected: virtual void InitParsing(ShaderCompilationContext* context, glslang::TShader& shader); virtual void InitCodegen(ShaderCompilationContext* context, glslang::SpvOptions& spvOptions); virtual bool Write(ShaderCompilationContext* context, ShaderFunctionMeta& meta, int32 permutationIndex, const ShaderBindings& bindings, struct SpirvShaderHeader& header, std::vector& spirv); }; #endif