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()
return mProgram->applyUniforms();
}
Error Program::applyUniformBuffers(const gl::Data &data)
{
return mProgram->applyUniformBuffers(data, mUniformBlockBindings);
}
void Program::flagForDeletion()
{
mDeleteStatus = true;
......@@ -1116,19 +1111,19 @@ const UniformBlock *Program::getUniformBlockByIndex(GLuint index) const
void Program::bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding)
{
mUniformBlockBindings[uniformBlockIndex] = uniformBlockBinding;
mData.mUniformBlockBindings[uniformBlockIndex] = uniformBlockBinding;
}
GLuint Program::getUniformBlockBinding(GLuint uniformBlockIndex) const
{
return mUniformBlockBindings[uniformBlockIndex];
return mData.getUniformBlockBinding(uniformBlockIndex);
}
void Program::resetUniformBlockBindings()
{
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
return mTransformFeedbackVaryingNames;
}
GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const
{
ASSERT(uniformBlockIndex < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS);
return mUniformBlockBindings[uniformBlockIndex];
}
private:
friend class Program;
......@@ -186,6 +191,8 @@ class Program : angle::NonCopyable
std::vector<sh::Varying> mTransformFeedbackVaryingVars;
GLenum mTransformFeedbackBufferMode;
GLuint mUniformBlockBindings[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
// TODO(jmadill): move more state into Data.
};
......@@ -262,7 +269,6 @@ class Program : angle::NonCopyable
void getUniformuiv(GLint location, GLuint *params);
Error applyUniforms();
Error applyUniformBuffers(const gl::Data &data);
void getActiveUniformBlockName(GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) const;
void getActiveUniformBlockiv(GLuint uniformBlockIndex, GLenum pname, GLint *params) const;
......@@ -339,8 +345,6 @@ class Program : angle::NonCopyable
AttributeBindings mAttributeBindings;
GLuint mUniformBlockBindings[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
bool mLinked;
bool mDeleteStatus; // Flag to indicate that the program can be deleted when no longer in use
......
......@@ -81,7 +81,6 @@ class ProgramImpl : angle::NonCopyable
virtual bool validateSamplers(gl::InfoLog *infoLog, const gl::Caps &caps) = 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::map<GLuint, gl::VariableLocation> &getUniformIndices() const { return mUniformIndex; }
......
......@@ -1216,7 +1216,7 @@ gl::Error ProgramD3D::applyUniforms()
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();
mFragmentUBOCache.clear();
......@@ -1227,7 +1227,7 @@ gl::Error ProgramD3D::applyUniformBuffers(const gl::Data &data, GLuint uniformBl
for (unsigned int uniformBlockIndex = 0; uniformBlockIndex < mUniformBlocks.size(); uniformBlockIndex++)
{
gl::UniformBlock *uniformBlock = mUniformBlocks[uniformBlockIndex];
GLuint blockBinding = uniformBlockBindings[uniformBlockIndex];
GLuint blockBinding = mData.getUniformBlockBinding(uniformBlockIndex);
ASSERT(uniformBlock);
......
......@@ -78,7 +78,7 @@ class ProgramD3D : public ProgramImpl
void initializeUniformStorage();
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,
GLenum shader,
unsigned int registerIndex,
......
......@@ -144,7 +144,7 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
return error;
}
error = program->applyUniformBuffers(data);
error = programD3D->applyUniformBuffers(data);
if (error.isError())
{
return error;
......@@ -217,7 +217,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data,
return error;
}
error = program->applyUniformBuffers(data);
error = programD3D->applyUniformBuffers(data);
if (error.isError())
{
return error;
......
......@@ -372,12 +372,6 @@ gl::Error ProgramGL::applyUniforms()
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()
{
ProgramImpl::reset();
......
......@@ -79,7 +79,6 @@ class ProgramGL : public ProgramImpl
const gl::Caps &caps);
gl::Error applyUniforms() override;
gl::Error applyUniformBuffers(const gl::Data &data, GLuint uniformBlockBindings[]) 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