1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2016 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // HLSLCompiler: Wrapper for the D3DCompiler DLL. 7*8975f5c5SAndroid Build Coastguard Worker // 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_HLSLCOMPILER_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_HLSLCOMPILER_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "common/platform.h" 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker #include <string> 18*8975f5c5SAndroid Build Coastguard Worker #include <vector> 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Worker namespace gl 21*8975f5c5SAndroid Build Coastguard Worker { 22*8975f5c5SAndroid Build Coastguard Worker class InfoLog; 23*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 24*8975f5c5SAndroid Build Coastguard Worker 25*8975f5c5SAndroid Build Coastguard Worker namespace rx 26*8975f5c5SAndroid Build Coastguard Worker { 27*8975f5c5SAndroid Build Coastguard Worker namespace d3d 28*8975f5c5SAndroid Build Coastguard Worker { 29*8975f5c5SAndroid Build Coastguard Worker class Context; 30*8975f5c5SAndroid Build Coastguard Worker } // namespace d3d 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Worker struct CompileConfig 33*8975f5c5SAndroid Build Coastguard Worker { 34*8975f5c5SAndroid Build Coastguard Worker UINT flags; 35*8975f5c5SAndroid Build Coastguard Worker std::string name; 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker CompileConfig(); 38*8975f5c5SAndroid Build Coastguard Worker CompileConfig(UINT flags, const std::string &name); 39*8975f5c5SAndroid Build Coastguard Worker }; 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker class HLSLCompiler : angle::NonCopyable 42*8975f5c5SAndroid Build Coastguard Worker { 43*8975f5c5SAndroid Build Coastguard Worker public: 44*8975f5c5SAndroid Build Coastguard Worker HLSLCompiler(); 45*8975f5c5SAndroid Build Coastguard Worker ~HLSLCompiler(); 46*8975f5c5SAndroid Build Coastguard Worker 47*8975f5c5SAndroid Build Coastguard Worker void release(); 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Worker // Attempt to compile a HLSL shader using the supplied configurations, may output a NULL 50*8975f5c5SAndroid Build Coastguard Worker // compiled blob even if no GL errors are returned. 51*8975f5c5SAndroid Build Coastguard Worker angle::Result compileToBinary(d3d::Context *context, 52*8975f5c5SAndroid Build Coastguard Worker gl::InfoLog &infoLog, 53*8975f5c5SAndroid Build Coastguard Worker const std::string &hlsl, 54*8975f5c5SAndroid Build Coastguard Worker const std::string &profile, 55*8975f5c5SAndroid Build Coastguard Worker const std::vector<CompileConfig> &configs, 56*8975f5c5SAndroid Build Coastguard Worker const D3D_SHADER_MACRO *overrideMacros, 57*8975f5c5SAndroid Build Coastguard Worker ID3DBlob **outCompiledBlob, 58*8975f5c5SAndroid Build Coastguard Worker std::string *outDebugInfo); 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker angle::Result disassembleBinary(d3d::Context *context, 61*8975f5c5SAndroid Build Coastguard Worker ID3DBlob *shaderBinary, 62*8975f5c5SAndroid Build Coastguard Worker std::string *disassemblyOut); 63*8975f5c5SAndroid Build Coastguard Worker angle::Result ensureInitialized(d3d::Context *context); 64*8975f5c5SAndroid Build Coastguard Worker 65*8975f5c5SAndroid Build Coastguard Worker private: 66*8975f5c5SAndroid Build Coastguard Worker bool mInitialized; 67*8975f5c5SAndroid Build Coastguard Worker HMODULE mD3DCompilerModule; 68*8975f5c5SAndroid Build Coastguard Worker pD3DCompile mD3DCompileFunc; 69*8975f5c5SAndroid Build Coastguard Worker pD3DDisassemble mD3DDisassembleFunc; 70*8975f5c5SAndroid Build Coastguard Worker }; 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 73*8975f5c5SAndroid Build Coastguard Worker 74*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_D3D_HLSLCOMPILER_H_ 75