diff options
author | Andrew Knight <andrew.knight@digia.com> | 2014-08-05 12:59:44 +0300 |
---|---|---|
committer | Andrew Knight <andrew.knight@digia.com> | 2014-08-05 16:43:22 +0200 |
commit | a6a12d8c0fc918972c15268f749ecc7c90b95d6c (patch) | |
tree | cb6d986d30ef97e932ab51768854d5d9b46729d3 /src/3rdparty/angle/src/libGLESv2/Shader.h | |
parent | 14f9c09542bd6cc19430473da9ce4c68f239ec7d (diff) |
ANGLE: upgrade to 2.1~07d49ef5350a
This version of ANGLE provides partial ES3 support, numerous
bug fixes, and several potentially useful vendor extensions.
All patches have been rebased. The following changes are noted:
0000-General-fixes-for-ANGLE-2.1.patch
contains compile fixes for the new ANGLE
0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch
has incorporated patch 0015.
0007-Make-DX9-DX11-mutually-exclusive.patch
has been removed as it was fixed upstream.
0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
has been moved up to fill the patch number gap.
0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch
now contains patch 0014 and 0017.
0013-ANGLE-Allow-for-universal-program-binaries.patch
has been removed as it is no longer relevant.
0014-ANGLE-D3D11-Fix-internal-index-buffer-for-level-9-ha.patch
has been merged with patch 0010.
0015-ANGLE-Don-t-export-DLLMain-functions-for-static-buil.patch
has been merged with patch 0004.
0016-ANGLE-WinRT-Call-Trim-when-application-suspends.patch
has been removed and will be replaced by a follow-up patch using a
different technique.
0017-ANGLE-D3D11-Don-t-use-mipmaps-in-level-9-textures.patch
has been merged with patch 0010.
0018-ANGLE-WinRT-Create-swap-chain-using-physical-resolut.patch
has been removed and will be replaced by a follow-up patch extending
the EGL_ANGLE_window_fixed_size extension.
0019-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
is now patch 0007.
[ChangeLog][Third-party libraries] ANGLE has been upgraded to
version 2.1, bringing partial support for OpenGL ES3 over
Direct3D 11, numerous bug fixes, and several new vendor extensions.
Change-Id: I6d95ce1480462d67228d83c1e5c74a1706b5b21c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Shader.h')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/Shader.h | 114 |
1 files changed, 59 insertions, 55 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Shader.h b/src/3rdparty/angle/src/libGLESv2/Shader.h index 2015addd11..a40f415c1e 100644 --- a/src/3rdparty/angle/src/libGLESv2/Shader.h +++ b/src/3rdparty/angle/src/libGLESv2/Shader.h @@ -12,14 +12,15 @@ #ifndef LIBGLESV2_SHADER_H_ #define LIBGLESV2_SHADER_H_ -#define GL_APICALL -#include <GLES2/gl2.h> +#include "angle_gl.h" #include <string> #include <list> #include <vector> -#include "compiler/translator/Uniform.h" +#include "common/shadervars.h" #include "common/angleutils.h" +#include "libGLESv2/angletypes.h" +#include "GLSLANG/ShaderLang.h" namespace rx { @@ -30,73 +31,81 @@ 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 - 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) + {} - int reg; // First varying register, assigned during link - int col; // First register element, assigned during link -}; + bool registerAssigned() const { return registerIndex != GL_INVALID_INDEX; } -typedef std::list<Varying> VaryingList; + void resetRegisterAssignment() + { + registerIndex = GL_INVALID_INDEX; + } +}; class Shader { - friend class ProgramBinary; + friend class DynamicHLSL; public: Shader(ResourceManager *manager, const rx::Renderer *renderer, GLuint handle); virtual ~Shader(); - virtual GLenum getType() = 0; + virtual GLenum getType() const = 0; GLuint getHandle() const; 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; + 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 char *getHLSL(); + bool isCompiled() const; + const std::string &getHLSL() const; 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 resetVaryingsRegisterAssignment(); + void parseVaryings(void *compiler); void compileToHLSL(void *compiler); - void getSourceImpl(char *source, GLsizei bufSize, GLsizei *length, char *buffer); + void getSourceImpl(const std::string &source, GLsizei bufSize, GLsizei *length, char *buffer) const; - static GLenum parseType(const std::string &type); - static bool compareVarying(const Varying &x, const Varying &y); + static bool compareVarying(const PackedVarying &x, const PackedVarying &y); const rx::Renderer *const mRenderer; - VaryingList mVaryings; + std::vector<PackedVarying> mVaryings; bool mUsesMultipleRenderTargets; bool mUsesFragColor; @@ -107,7 +116,9 @@ class Shader bool mUsesPointCoord; bool mUsesDepthRange; bool mUsesFragDepth; + int mShaderVersion; bool mUsesDiscardRewriting; + bool mUsesNestedBreak; static void *mFragmentCompiler; static void *mVertexCompiler; @@ -121,50 +132,39 @@ class Shader 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; + 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; 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; + friend class DynamicHLSL; public: VertexShader(ResourceManager *manager, const rx::Renderer *renderer, GLuint handle); ~VertexShader(); - virtual GLenum getType(); + 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(); - AttributeArray mAttributes; + std::vector<sh::Attribute> mActiveAttributes; }; class FragmentShader : public Shader @@ -174,11 +174,15 @@ class FragmentShader : public Shader ~FragmentShader(); - virtual GLenum getType(); + 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; }; } |