#ifndef LIBANGLE_RENDERER_D3D_HLSLCOMPILER_H_ #define LIBANGLE_RENDERER_D3D_HLSLCOMPILER_H_ #include "libANGLE/Error.h" #include "common/angleutils.h" #include "common/platform.h" #include #include namespace gl { class InfoLog; } namespace rx { struct CompileConfig { UINT flags; std::string name; CompileConfig(); CompileConfig(UINT flags, const std::string &name); }; class HLSLCompiler : angle::NonCopyable { public: HLSLCompiler(); ~HLSLCompiler(); bool initialize(); void release(); // Attempt to compile a HLSL shader using the supplied configurations, may output a NULL compiled blob // even if no GL errors are returned. gl::Error compileToBinary(gl::InfoLog &infoLog, const std::string &hlsl, const std::string &profile, const std::vector &configs, const D3D_SHADER_MACRO *overrideMacros, ID3DBlob **outCompiledBlob, std::string *outDebugInfo) const; std::string disassembleBinary(ID3DBlob* shaderBinary) const; private: HMODULE mD3DCompilerModule; pD3DCompile mD3DCompileFunc; pD3DDisassemble mD3DDisassembleFunc; }; } #endif // LIBANGLE_RENDERER_D3D_HLSLCOMPILER_H_