diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Shader.h')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/Shader.h | 163 |
1 files changed, 47 insertions, 116 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Shader.h b/src/3rdparty/angle/src/libGLESv2/Shader.h index 2015addd11..7ba3bd165c 100644 --- a/src/3rdparty/angle/src/libGLESv2/Shader.h +++ b/src/3rdparty/angle/src/libGLESv2/Shader.h @@ -12,68 +12,70 @@ #ifndef LIBGLESV2_SHADER_H_ #define LIBGLESV2_SHADER_H_ -#define GL_APICALL -#include <GLES2/gl2.h> + #include <string> #include <list> #include <vector> -#include "compiler/translator/Uniform.h" +#include "angle_gl.h" +#include <GLSLANG/ShaderLang.h> + #include "common/angleutils.h" +#include "libGLESv2/angletypes.h" namespace rx { -class Renderer; +class ShaderImpl; } namespace gl { class ResourceManager; -struct Varying +struct PackedVarying : public sh::Varying { - Varying(GLenum type, const std::string &name, int size, bool array) - : type(type), name(name), size(size), array(array), reg(-1), col(-1) - { - } + unsigned int registerIndex; // Assigned during link + unsigned int columnIndex; // Assigned during link, defaults to 0 - GLenum type; - std::string name; - int size; // Number of 'type' elements - bool array; + PackedVarying(const sh::Varying &varying) + : sh::Varying(varying), + registerIndex(GL_INVALID_INDEX), + columnIndex(0) + {} - int reg; // First varying register, assigned during link - int col; // First register element, assigned during link -}; + bool registerAssigned() const { return registerIndex != GL_INVALID_INDEX; } + bool isBuiltIn() const { return name.compare(0, 3, "gl_") == 0; } -typedef std::list<Varying> VaryingList; + void resetRegisterAssignment() + { + registerIndex = GL_INVALID_INDEX; + } +}; class Shader { - friend class ProgramBinary; - public: - Shader(ResourceManager *manager, const rx::Renderer *renderer, GLuint handle); + Shader(ResourceManager *manager, rx::ShaderImpl *impl, GLenum type, GLuint handle); virtual ~Shader(); - virtual GLenum getType() = 0; + GLenum getType() const { return mType; } GLuint getHandle() const; + rx::ShaderImpl *getImplementation() { return mShader; } + const rx::ShaderImpl *getImplementation() const { return mShader; } + void deleteSource(); - void setSource(GLsizei count, const char **string, const GLint *length); + void setSource(GLsizei count, const char *const *string, const GLint *length); int getInfoLogLength() const; - void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog); + void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog) const; int getSourceLength() const; - void getSource(GLsizei bufSize, GLsizei *length, char *buffer); + void getSource(GLsizei bufSize, GLsizei *length, char *buffer) const; int getTranslatedSourceLength() const; - void getTranslatedSource(GLsizei bufSize, GLsizei *length, char *buffer); - const sh::ActiveUniforms &getUniforms(); + void getTranslatedSource(GLsizei bufSize, GLsizei *length, char *buffer) const; - virtual void compile() = 0; - virtual void uncompile(); - bool isCompiled(); - const char *getHLSL(); + void compile(); + bool isCompiled() const { return mCompiled; } void addRef(); void release(); @@ -81,105 +83,34 @@ class Shader bool isFlaggedForDeletion() const; void flagForDeletion(); - static void releaseCompiler(); - - protected: - void parseVaryings(); - void resetVaryingsRegisterAssignment(); - - void compileToHLSL(void *compiler); + const std::vector<gl::PackedVarying> &getVaryings() const; + const std::vector<sh::Uniform> &getUniforms() const; + const std::vector<sh::InterfaceBlock> &getInterfaceBlocks() const; + const std::vector<sh::Attribute> &getActiveAttributes() const; + const std::vector<sh::Attribute> &getActiveOutputVariables() const; - void getSourceImpl(char *source, GLsizei bufSize, GLsizei *length, char *buffer); - - static GLenum parseType(const std::string &type); - static bool compareVarying(const Varying &x, const Varying &y); - - const rx::Renderer *const mRenderer; - - VaryingList mVaryings; - - bool mUsesMultipleRenderTargets; - bool mUsesFragColor; - bool mUsesFragData; - bool mUsesFragCoord; - bool mUsesFrontFacing; - bool mUsesPointSize; - bool mUsesPointCoord; - bool mUsesDepthRange; - bool mUsesFragDepth; - bool mUsesDiscardRewriting; - - static void *mFragmentCompiler; - static void *mVertexCompiler; + std::vector<gl::PackedVarying> &getVaryings(); + std::vector<sh::Uniform> &getUniforms(); + std::vector<sh::InterfaceBlock> &getInterfaceBlocks(); + std::vector<sh::Attribute> &getActiveAttributes(); + std::vector<sh::Attribute> &getActiveOutputVariables(); private: DISALLOW_COPY_AND_ASSIGN(Shader); - void initializeCompiler(); + static void getSourceImpl(const std::string &source, GLsizei bufSize, GLsizei *length, char *buffer); + rx::ShaderImpl *mShader; const GLuint mHandle; + const GLenum mType; + std::string mSource; unsigned int mRefCount; // Number of program objects this shader is attached to bool mDeleteStatus; // Flag to indicate that the shader can be deleted when no longer in use - - char *mSource; - char *mHlsl; - char *mInfoLog; - sh::ActiveUniforms mActiveUniforms; + bool mCompiled; // Indicates if this shader has been successfully compiled ResourceManager *mResourceManager; }; -struct Attribute -{ - Attribute() : type(GL_NONE), name("") - { - } - - Attribute(GLenum type, const std::string &name) : type(type), name(name) - { - } - - GLenum type; - std::string name; -}; - -typedef std::vector<Attribute> AttributeArray; - -class VertexShader : public Shader -{ - friend class ProgramBinary; - - public: - VertexShader(ResourceManager *manager, const rx::Renderer *renderer, GLuint handle); - - ~VertexShader(); - - virtual GLenum getType(); - virtual void compile(); - virtual void uncompile(); - int getSemanticIndex(const std::string &attributeName); - - private: - DISALLOW_COPY_AND_ASSIGN(VertexShader); - - void parseAttributes(); - - AttributeArray mAttributes; -}; - -class FragmentShader : public Shader -{ - public: - FragmentShader(ResourceManager *manager,const rx::Renderer *renderer, GLuint handle); - - ~FragmentShader(); - - virtual GLenum getType(); - virtual void compile(); - - private: - DISALLOW_COPY_AND_ASSIGN(FragmentShader); -}; } #endif // LIBGLESV2_SHADER_H_ |