Revert "Re^5-land "Move Uniform and UBO info to the gl::Program layer.""
Failing dEQP-GLES3.functional.uniform_api.random.22 and 23:
There's a bug with arrays of tranpsosed matrix uniforms.
BUG=angleproject:1123
This reverts commit 78d356929bd0441d81e2dd8a63130cd6788e2fde.
Change-Id: If39b5908af39671dfe98965e6a1ba77fd18ea8fc
Reviewed-on: https://chromium-review.googlesource.com/299320
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/ProgramImpl.h b/src/libANGLE/renderer/ProgramImpl.h
index 47fb9be..94da0c7 100644
--- a/src/libANGLE/renderer/ProgramImpl.h
+++ b/src/libANGLE/renderer/ProgramImpl.h
@@ -23,17 +23,16 @@
struct LinkResult
{
- LinkResult(bool linkSuccess, const gl::Error &error) : linkSuccess(linkSuccess), error(error) {}
-
bool linkSuccess;
gl::Error error;
+ LinkResult(bool linkSuccess, const gl::Error &error);
};
class ProgramImpl : angle::NonCopyable
{
public:
- ProgramImpl(const gl::Program::Data &data) : mData(data) {}
- virtual ~ProgramImpl() {}
+ ProgramImpl(const gl::Program::Data &data);
+ virtual ~ProgramImpl();
virtual int getShaderVersion() const = 0;
@@ -66,16 +65,41 @@
virtual void setUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) = 0;
virtual void setUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) = 0;
+ virtual void getUniformfv(GLint location, GLfloat *params) = 0;
+ virtual void getUniformiv(GLint location, GLint *params) = 0;
+ virtual void getUniformuiv(GLint location, GLuint *params) = 0;
+
// TODO: The following functions are possibly only applicable to D3D backends. The should be carefully evaluated to
// determine if they can be removed from this interface.
virtual bool validateSamplers(gl::InfoLog *infoLog, const gl::Caps &caps) = 0;
- // Gather uniform block active uniform indices, and uniform block offset info.
- virtual void gatherUniformBlockInfo(std::vector<gl::UniformBlock> *uniformBlocks,
- std::vector<gl::LinkedUniform> *uniforms) = 0;
+ const std::vector<gl::LinkedUniform*> &getUniforms() const { return mUniforms; }
+ const std::map<GLuint, gl::VariableLocation> &getUniformIndices() const { return mUniformIndex; }
+ const std::vector<gl::UniformBlock*> &getUniformBlocks() const { return mUniformBlocks; }
+
+ std::vector<gl::LinkedUniform*> &getUniforms() { return mUniforms; }
+ std::map<GLuint, gl::VariableLocation> &getUniformIndices() { return mUniformIndex; }
+ std::vector<gl::UniformBlock*> &getUniformBlocks() { return mUniformBlocks; }
+
+ gl::LinkedUniform *getUniformByLocation(GLint location) const;
+ gl::LinkedUniform *getUniformByName(const std::string &name) const;
+ gl::UniformBlock *getUniformBlockByIndex(GLuint blockIndex) const;
+
+ GLint getUniformLocation(const std::string &name) const;
+ GLuint getUniformIndex(const std::string &name) const;
+ GLuint getUniformBlockIndex(const std::string &name) const;
+
+ virtual void reset();
protected:
const gl::Program::Data &mData;
+
+ std::vector<gl::LinkedUniform*> mUniforms;
+
+ // TODO: use a hash map
+ std::map<GLuint, gl::VariableLocation> mUniformIndex;
+
+ std::vector<gl::UniformBlock*> mUniformBlocks;
};
}