1cb93a386Sopenharmony_ci// 2cb93a386Sopenharmony_ci// Copyright 2014 The ANGLE Project Authors. All rights reserved. 3cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be 4cb93a386Sopenharmony_ci// found in the LICENSE file. 5cb93a386Sopenharmony_ci// 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ci// Compiler.h: Defines the gl::Compiler class, abstracting the ESSL compiler 8cb93a386Sopenharmony_ci// that a GL context holds. 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#ifndef LIBANGLE_COMPILER_H_ 11cb93a386Sopenharmony_ci#define LIBANGLE_COMPILER_H_ 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci#include <vector> 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#include "GLSLANG/ShaderLang.h" 16cb93a386Sopenharmony_ci#include "common/PackedEnums.h" 17cb93a386Sopenharmony_ci#include "libANGLE/Error.h" 18cb93a386Sopenharmony_ci#include "libANGLE/RefCountObject.h" 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_cinamespace rx 21cb93a386Sopenharmony_ci{ 22cb93a386Sopenharmony_ciclass CompilerImpl; 23cb93a386Sopenharmony_ciclass GLImplFactory; 24cb93a386Sopenharmony_ci} // namespace rx 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_cinamespace gl 27cb93a386Sopenharmony_ci{ 28cb93a386Sopenharmony_ciclass ShCompilerInstance; 29cb93a386Sopenharmony_ciclass State; 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ciclass Compiler final : public RefCountObjectNoID 32cb93a386Sopenharmony_ci{ 33cb93a386Sopenharmony_ci public: 34cb93a386Sopenharmony_ci Compiler(rx::GLImplFactory *implFactory, const State &data, egl::Display *display); 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci void onDestroy(const Context *context) override; 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci ShCompilerInstance getInstance(ShaderType shaderType); 39cb93a386Sopenharmony_ci void putInstance(ShCompilerInstance &&instance); 40cb93a386Sopenharmony_ci ShShaderOutput getShaderOutputType() const { return mOutputType; } 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci private: 43cb93a386Sopenharmony_ci ~Compiler() override; 44cb93a386Sopenharmony_ci std::unique_ptr<rx::CompilerImpl> mImplementation; 45cb93a386Sopenharmony_ci ShShaderSpec mSpec; 46cb93a386Sopenharmony_ci ShShaderOutput mOutputType; 47cb93a386Sopenharmony_ci ShBuiltInResources mResources; 48cb93a386Sopenharmony_ci ShaderMap<std::vector<ShCompilerInstance>> mPools; 49cb93a386Sopenharmony_ci}; 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ciclass ShCompilerInstance final : public angle::NonCopyable 52cb93a386Sopenharmony_ci{ 53cb93a386Sopenharmony_ci public: 54cb93a386Sopenharmony_ci ShCompilerInstance(); 55cb93a386Sopenharmony_ci ShCompilerInstance(ShHandle handle, ShShaderOutput outputType, ShaderType shaderType); 56cb93a386Sopenharmony_ci ~ShCompilerInstance(); 57cb93a386Sopenharmony_ci void destroy(); 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci ShCompilerInstance(ShCompilerInstance &&other); 60cb93a386Sopenharmony_ci ShCompilerInstance &operator=(ShCompilerInstance &&other); 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci ShHandle getHandle(); 63cb93a386Sopenharmony_ci ShaderType getShaderType() const; 64cb93a386Sopenharmony_ci const std::string &getBuiltinResourcesString(); 65cb93a386Sopenharmony_ci ShShaderOutput getShaderOutputType() const; 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci private: 68cb93a386Sopenharmony_ci ShHandle mHandle; 69cb93a386Sopenharmony_ci ShShaderOutput mOutputType; 70cb93a386Sopenharmony_ci ShaderType mShaderType; 71cb93a386Sopenharmony_ci}; 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci} // namespace gl 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci#endif // LIBANGLE_COMPILER_H_ 76