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.h135
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_