xref: /aosp_15_r20/external/angle/src/libANGLE/Compiler.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 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 
7*8975f5c5SAndroid Build Coastguard Worker // Compiler.h: Defines the gl::Compiler class, abstracting the ESSL compiler
8*8975f5c5SAndroid Build Coastguard Worker // that a GL context holds.
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_COMPILER_H_
11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_COMPILER_H_
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include <vector>
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker #include "GLSLANG/ShaderLang.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "common/PackedEnums.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/RefCountObject.h"
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker namespace rx
21*8975f5c5SAndroid Build Coastguard Worker {
22*8975f5c5SAndroid Build Coastguard Worker class CompilerImpl;
23*8975f5c5SAndroid Build Coastguard Worker class GLImplFactory;
24*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
25*8975f5c5SAndroid Build Coastguard Worker 
26*8975f5c5SAndroid Build Coastguard Worker namespace gl
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker class ShCompilerInstance;
29*8975f5c5SAndroid Build Coastguard Worker class State;
30*8975f5c5SAndroid Build Coastguard Worker 
31*8975f5c5SAndroid Build Coastguard Worker class Compiler final : public RefCountObjectNoID
32*8975f5c5SAndroid Build Coastguard Worker {
33*8975f5c5SAndroid Build Coastguard Worker   public:
34*8975f5c5SAndroid Build Coastguard Worker     Compiler(rx::GLImplFactory *implFactory, const State &data, egl::Display *display);
35*8975f5c5SAndroid Build Coastguard Worker 
36*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const Context *context) override;
37*8975f5c5SAndroid Build Coastguard Worker 
38*8975f5c5SAndroid Build Coastguard Worker     ShCompilerInstance getInstance(ShaderType shaderType);
39*8975f5c5SAndroid Build Coastguard Worker     void putInstance(ShCompilerInstance &&instance);
getShaderOutputType()40*8975f5c5SAndroid Build Coastguard Worker     ShShaderOutput getShaderOutputType() const { return mOutputType; }
getBuiltInResources()41*8975f5c5SAndroid Build Coastguard Worker     const ShBuiltInResources &getBuiltInResources() const { return mResources; }
42*8975f5c5SAndroid Build Coastguard Worker 
43*8975f5c5SAndroid Build Coastguard Worker     static ShShaderSpec SelectShaderSpec(const State &state);
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker   private:
46*8975f5c5SAndroid Build Coastguard Worker     ~Compiler() override;
47*8975f5c5SAndroid Build Coastguard Worker     std::unique_ptr<rx::CompilerImpl> mImplementation;
48*8975f5c5SAndroid Build Coastguard Worker     ShShaderSpec mSpec;
49*8975f5c5SAndroid Build Coastguard Worker     ShShaderOutput mOutputType;
50*8975f5c5SAndroid Build Coastguard Worker     ShBuiltInResources mResources;
51*8975f5c5SAndroid Build Coastguard Worker     ShaderMap<std::vector<ShCompilerInstance>> mPools;
52*8975f5c5SAndroid Build Coastguard Worker };
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker class ShCompilerInstance final : public angle::NonCopyable
55*8975f5c5SAndroid Build Coastguard Worker {
56*8975f5c5SAndroid Build Coastguard Worker   public:
57*8975f5c5SAndroid Build Coastguard Worker     ShCompilerInstance();
58*8975f5c5SAndroid Build Coastguard Worker     ShCompilerInstance(ShHandle handle, ShShaderOutput outputType, ShaderType shaderType);
59*8975f5c5SAndroid Build Coastguard Worker     ~ShCompilerInstance();
60*8975f5c5SAndroid Build Coastguard Worker     void destroy();
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     ShCompilerInstance(ShCompilerInstance &&other);
63*8975f5c5SAndroid Build Coastguard Worker     ShCompilerInstance &operator=(ShCompilerInstance &&other);
64*8975f5c5SAndroid Build Coastguard Worker 
65*8975f5c5SAndroid Build Coastguard Worker     ShHandle getHandle();
66*8975f5c5SAndroid Build Coastguard Worker     ShaderType getShaderType() const;
67*8975f5c5SAndroid Build Coastguard Worker     ShBuiltInResources getBuiltInResources() const;
68*8975f5c5SAndroid Build Coastguard Worker     ShShaderOutput getShaderOutputType() const;
69*8975f5c5SAndroid Build Coastguard Worker 
70*8975f5c5SAndroid Build Coastguard Worker   private:
71*8975f5c5SAndroid Build Coastguard Worker     ShHandle mHandle;
72*8975f5c5SAndroid Build Coastguard Worker     ShShaderOutput mOutputType;
73*8975f5c5SAndroid Build Coastguard Worker     ShaderType mShaderType;
74*8975f5c5SAndroid Build Coastguard Worker };
75*8975f5c5SAndroid Build Coastguard Worker 
76*8975f5c5SAndroid Build Coastguard Worker }  // namespace gl
77*8975f5c5SAndroid Build Coastguard Worker 
78*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_COMPILER_H_
79