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