// // Copyright 2014 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Compiler.h: Defines the gl::Compiler class, abstracting the ESSL compiler // that a GL context holds. #ifndef LIBANGLE_COMPILER_H_ #define LIBANGLE_COMPILER_H_ #include #include "GLSLANG/ShaderLang.h" #include "common/PackedEnums.h" #include "libANGLE/Error.h" #include "libANGLE/RefCountObject.h" namespace rx { class CompilerImpl; class GLImplFactory; } // namespace rx namespace gl { class ShCompilerInstance; class State; class Compiler final : public RefCountObjectNoID { public: Compiler(rx::GLImplFactory *implFactory, const State &data, egl::Display *display); void onDestroy(const Context *context) override; ShCompilerInstance getInstance(ShaderType shaderType); void putInstance(ShCompilerInstance &&instance); ShShaderOutput getShaderOutputType() const { return mOutputType; } static ShShaderSpec SelectShaderSpec(const State &state); private: ~Compiler() override; std::unique_ptr mImplementation; ShShaderSpec mSpec; ShShaderOutput mOutputType; ShBuiltInResources mResources; ShaderMap> mPools; }; class ShCompilerInstance final : public angle::NonCopyable { public: ShCompilerInstance(); ShCompilerInstance(ShHandle handle, ShShaderOutput outputType, ShaderType shaderType); ~ShCompilerInstance(); void destroy(); ShCompilerInstance(ShCompilerInstance &&other); ShCompilerInstance &operator=(ShCompilerInstance &&other); ShHandle getHandle(); ShaderType getShaderType() const; ShBuiltInResources getBuiltInResources() const; const std::string &getBuiltinResourcesString() const; ShShaderOutput getShaderOutputType() const; private: ShHandle mHandle; ShShaderOutput mOutputType; ShaderType mShaderType; }; } // namespace gl #endif // LIBANGLE_COMPILER_H_