Commit d1fe1646 by Jamie Madill

Move UBO bindings into Program shared state.

Sharing the bindings with the Impl (read-only) allows us to clean out the applyUniformBuffers method from the Impl class, and make it D3D- only. BUG=angleproject:1123 Change-Id: Icb51a90cb227bbbdd83319ea308b68aa1c4c325e Reviewed-on: https://chromium-review.googlesource.com/293824Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 72f39c15
...@@ -972,11 +972,6 @@ Error Program::applyUniforms() ...@@ -972,11 +972,6 @@ Error Program::applyUniforms()
return mProgram->applyUniforms(); return mProgram->applyUniforms();
} }
Error Program::applyUniformBuffers(const gl::Data &data)
{
return mProgram->applyUniformBuffers(data, mUniformBlockBindings);
}
void Program::flagForDeletion() void Program::flagForDeletion()
{ {
mDeleteStatus = true; mDeleteStatus = true;
...@@ -1116,19 +1111,19 @@ const UniformBlock *Program::getUniformBlockByIndex(GLuint index) const ...@@ -1116,19 +1111,19 @@ const UniformBlock *Program::getUniformBlockByIndex(GLuint index) const
void Program::bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding) void Program::bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding)
{ {
mUniformBlockBindings[uniformBlockIndex] = uniformBlockBinding; mData.mUniformBlockBindings[uniformBlockIndex] = uniformBlockBinding;
} }
GLuint Program::getUniformBlockBinding(GLuint uniformBlockIndex) const GLuint Program::getUniformBlockBinding(GLuint uniformBlockIndex) const
{ {
return mUniformBlockBindings[uniformBlockIndex]; return mData.getUniformBlockBinding(uniformBlockIndex);
} }
void Program::resetUniformBlockBindings() void Program::resetUniformBlockBindings()
{ {
for (unsigned int blockId = 0; blockId < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; blockId++) for (unsigned int blockId = 0; blockId < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; blockId++)
{ {
mUniformBlockBindings[blockId] = 0; mData.mUniformBlockBindings[blockId] = 0;
} }
} }
......
...@@ -175,6 +175,11 @@ class Program : angle::NonCopyable ...@@ -175,6 +175,11 @@ class Program : angle::NonCopyable
return mTransformFeedbackVaryingNames; return mTransformFeedbackVaryingNames;
} }
GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; } GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const
{
ASSERT(uniformBlockIndex < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS);
return mUniformBlockBindings[uniformBlockIndex];
}
private: private:
friend class Program; friend class Program;
...@@ -186,6 +191,8 @@ class Program : angle::NonCopyable ...@@ -186,6 +191,8 @@ class Program : angle::NonCopyable
std::vector<sh::Varying> mTransformFeedbackVaryingVars; std::vector<sh::Varying> mTransformFeedbackVaryingVars;
GLenum mTransformFeedbackBufferMode; GLenum mTransformFeedbackBufferMode;
GLuint mUniformBlockBindings[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
// TODO(jmadill): move more state into Data. // TODO(jmadill): move more state into Data.
}; };
...@@ -262,7 +269,6 @@ class Program : angle::NonCopyable ...@@ -262,7 +269,6 @@ class Program : angle::NonCopyable
void getUniformuiv(GLint location, GLuint *params); void getUniformuiv(GLint location, GLuint *params);
Error applyUniforms(); Error applyUniforms();
Error applyUniformBuffers(const gl::Data &data);
void getActiveUniformBlockName(GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) const; void getActiveUniformBlockName(GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) const;
void getActiveUniformBlockiv(GLuint uniformBlockIndex, GLenum pname, GLint *params) const; void getActiveUniformBlockiv(GLuint uniformBlockIndex, GLenum pname, GLint *params) const;
...@@ -339,8 +345,6 @@ class Program : angle::NonCopyable ...@@ -339,8 +345,6 @@ class Program : angle::NonCopyable
AttributeBindings mAttributeBindings; AttributeBindings mAttributeBindings;
GLuint mUniformBlockBindings[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
bool mLinked; bool mLinked;
bool mDeleteStatus; // Flag to indicate that the program can be deleted when no longer in use bool mDeleteStatus; // Flag to indicate that the program can be deleted when no longer in use
......
...@@ -81,7 +81,6 @@ class ProgramImpl : angle::NonCopyable ...@@ -81,7 +81,6 @@ class ProgramImpl : angle::NonCopyable
virtual bool validateSamplers(gl::InfoLog *infoLog, const gl::Caps &caps) = 0; virtual bool validateSamplers(gl::InfoLog *infoLog, const gl::Caps &caps) = 0;
virtual gl::Error applyUniforms() = 0; virtual gl::Error applyUniforms() = 0;
virtual gl::Error applyUniformBuffers(const gl::Data &data, GLuint uniformBlockBindings[]) = 0;
const std::vector<gl::LinkedUniform*> &getUniforms() const { return mUniforms; } const std::vector<gl::LinkedUniform*> &getUniforms() const { return mUniforms; }
const std::map<GLuint, gl::VariableLocation> &getUniformIndices() const { return mUniformIndex; } const std::map<GLuint, gl::VariableLocation> &getUniformIndices() const { return mUniformIndex; }
......
...@@ -1216,7 +1216,7 @@ gl::Error ProgramD3D::applyUniforms() ...@@ -1216,7 +1216,7 @@ gl::Error ProgramD3D::applyUniforms()
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error ProgramD3D::applyUniformBuffers(const gl::Data &data, GLuint uniformBlockBindings[]) gl::Error ProgramD3D::applyUniformBuffers(const gl::Data &data)
{ {
mVertexUBOCache.clear(); mVertexUBOCache.clear();
mFragmentUBOCache.clear(); mFragmentUBOCache.clear();
...@@ -1227,7 +1227,7 @@ gl::Error ProgramD3D::applyUniformBuffers(const gl::Data &data, GLuint uniformBl ...@@ -1227,7 +1227,7 @@ gl::Error ProgramD3D::applyUniformBuffers(const gl::Data &data, GLuint uniformBl
for (unsigned int uniformBlockIndex = 0; uniformBlockIndex < mUniformBlocks.size(); uniformBlockIndex++) for (unsigned int uniformBlockIndex = 0; uniformBlockIndex < mUniformBlocks.size(); uniformBlockIndex++)
{ {
gl::UniformBlock *uniformBlock = mUniformBlocks[uniformBlockIndex]; gl::UniformBlock *uniformBlock = mUniformBlocks[uniformBlockIndex];
GLuint blockBinding = uniformBlockBindings[uniformBlockIndex]; GLuint blockBinding = mData.getUniformBlockBinding(uniformBlockIndex);
ASSERT(uniformBlock); ASSERT(uniformBlock);
......
...@@ -78,7 +78,7 @@ class ProgramD3D : public ProgramImpl ...@@ -78,7 +78,7 @@ class ProgramD3D : public ProgramImpl
void initializeUniformStorage(); void initializeUniformStorage();
gl::Error applyUniforms(); gl::Error applyUniforms();
gl::Error applyUniformBuffers(const gl::Data &data, GLuint uniformBlockBindings[]) override; gl::Error applyUniformBuffers(const gl::Data &data);
void assignUniformBlockRegister(gl::UniformBlock *uniformBlock, void assignUniformBlockRegister(gl::UniformBlock *uniformBlock,
GLenum shader, GLenum shader,
unsigned int registerIndex, unsigned int registerIndex,
......
...@@ -144,7 +144,7 @@ gl::Error RendererD3D::drawElements(const gl::Data &data, ...@@ -144,7 +144,7 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
return error; return error;
} }
error = program->applyUniformBuffers(data); error = programD3D->applyUniformBuffers(data);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -217,7 +217,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data, ...@@ -217,7 +217,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data,
return error; return error;
} }
error = program->applyUniformBuffers(data); error = programD3D->applyUniformBuffers(data);
if (error.isError()) if (error.isError())
{ {
return error; return error;
......
...@@ -372,12 +372,6 @@ gl::Error ProgramGL::applyUniforms() ...@@ -372,12 +372,6 @@ gl::Error ProgramGL::applyUniforms()
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error ProgramGL::applyUniformBuffers(const gl::Data &data, GLuint uniformBlockBindings[])
{
UNIMPLEMENTED();
return gl::Error(GL_INVALID_OPERATION);
}
void ProgramGL::reset() void ProgramGL::reset()
{ {
ProgramImpl::reset(); ProgramImpl::reset();
......
...@@ -79,7 +79,6 @@ class ProgramGL : public ProgramImpl ...@@ -79,7 +79,6 @@ class ProgramGL : public ProgramImpl
const gl::Caps &caps); const gl::Caps &caps);
gl::Error applyUniforms() override; gl::Error applyUniforms() override;
gl::Error applyUniformBuffers(const gl::Data &data, GLuint uniformBlockBindings[]) override;
void reset() override; void reset() override;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment