diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Shader.h')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/Shader.h | 135 |
1 files changed, 31 insertions, 104 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Shader.h b/src/3rdparty/angle/src/libGLESv2/Shader.h index a40f415c1e..7ba3bd165c 100644 --- a/src/3rdparty/angle/src/libGLESv2/Shader.h +++ b/src/3rdparty/angle/src/libGLESv2/Shader.h @@ -12,19 +12,20 @@ #ifndef LIBGLESV2_SHADER_H_ #define LIBGLESV2_SHADER_H_ -#include "angle_gl.h" + #include <string> #include <list> #include <vector> -#include "common/shadervars.h" +#include "angle_gl.h" +#include <GLSLANG/ShaderLang.h> + #include "common/angleutils.h" #include "libGLESv2/angletypes.h" -#include "GLSLANG/ShaderLang.h" namespace rx { -class Renderer; +class ShaderImpl; } namespace gl @@ -34,13 +35,16 @@ class ResourceManager; struct PackedVarying : public sh::Varying { unsigned int registerIndex; // Assigned during link + unsigned int columnIndex; // Assigned during link, defaults to 0 PackedVarying(const sh::Varying &varying) : sh::Varying(varying), - registerIndex(GL_INVALID_INDEX) + registerIndex(GL_INVALID_INDEX), + columnIndex(0) {} bool registerAssigned() const { return registerIndex != GL_INVALID_INDEX; } + bool isBuiltIn() const { return name.compare(0, 3, "gl_") == 0; } void resetRegisterAssignment() { @@ -50,16 +54,17 @@ struct PackedVarying : public sh::Varying class Shader { - friend class DynamicHLSL; - 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() const = 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 *const *string, const GLint *length); int getInfoLogLength() const; @@ -68,122 +73,44 @@ class Shader void getSource(GLsizei bufSize, GLsizei *length, char *buffer) const; int getTranslatedSourceLength() const; void getTranslatedSource(GLsizei bufSize, GLsizei *length, char *buffer) const; - const std::vector<sh::Uniform> &getUniforms() const; - const std::vector<sh::InterfaceBlock> &getInterfaceBlocks() const; - std::vector<PackedVarying> &getVaryings(); - virtual void compile() = 0; - virtual void uncompile(); - bool isCompiled() const; - const std::string &getHLSL() const; + void compile(); + bool isCompiled() const { return mCompiled; } void addRef(); void release(); unsigned int getRefCount() const; bool isFlaggedForDeletion() const; void flagForDeletion(); - int getShaderVersion() const; - void resetVaryingsRegisterAssignment(); - - static void releaseCompiler(); - static ShShaderOutput getCompilerOutputType(GLenum shader); - unsigned int getUniformRegister(const std::string &uniformName) const; - unsigned int getInterfaceBlockRegister(const std::string &blockName) const; - - bool usesDepthRange() const { return mUsesDepthRange; } - bool usesPointSize() const { return mUsesPointSize; } - rx::D3DWorkaroundType getD3DWorkarounds() const; - - protected: - void parseVaryings(void *compiler); - void compileToHLSL(void *compiler); - - void getSourceImpl(const std::string &source, GLsizei bufSize, GLsizei *length, char *buffer) const; - - static bool compareVarying(const PackedVarying &x, const PackedVarying &y); - - const rx::Renderer *const mRenderer; - - std::vector<PackedVarying> mVaryings; - - bool mUsesMultipleRenderTargets; - bool mUsesFragColor; - bool mUsesFragData; - bool mUsesFragCoord; - bool mUsesFrontFacing; - bool mUsesPointSize; - bool mUsesPointCoord; - bool mUsesDepthRange; - bool mUsesFragDepth; - int mShaderVersion; - bool mUsesDiscardRewriting; - bool mUsesNestedBreak; + 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; - 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 - - std::string mSource; - std::string mHlsl; - std::string mInfoLog; - std::vector<sh::Uniform> mActiveUniforms; - std::vector<sh::InterfaceBlock> mActiveInterfaceBlocks; - std::map<std::string, unsigned int> mUniformRegisterMap; - std::map<std::string, unsigned int> mInterfaceBlockRegisterMap; + bool mCompiled; // Indicates if this shader has been successfully compiled ResourceManager *mResourceManager; }; -class VertexShader : public Shader -{ - friend class DynamicHLSL; - - public: - VertexShader(ResourceManager *manager, const rx::Renderer *renderer, GLuint handle); - - ~VertexShader(); - - virtual GLenum getType() const; - virtual void compile(); - virtual void uncompile(); - int getSemanticIndex(const std::string &attributeName); - - const std::vector<sh::Attribute> &activeAttributes() const { return mActiveAttributes; } - - private: - DISALLOW_COPY_AND_ASSIGN(VertexShader); - - void parseAttributes(); - - std::vector<sh::Attribute> mActiveAttributes; -}; - -class FragmentShader : public Shader -{ - public: - FragmentShader(ResourceManager *manager,const rx::Renderer *renderer, GLuint handle); - - ~FragmentShader(); - - virtual GLenum getType() const; - virtual void compile(); - virtual void uncompile(); - const std::vector<sh::Attribute> &getOutputVariables() const; - - private: - DISALLOW_COPY_AND_ASSIGN(FragmentShader); - - std::vector<sh::Attribute> mActiveOutputVariables; -}; } #endif // LIBGLESV2_SHADER_H_ |