summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/Shader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Shader.h')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/Shader.h163
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_