xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/HLSLCompiler.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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