Commit 7a20b973 by jchen10 Committed by Commit Bot

Refactor uniform block binding

Remove mUniformBlockBindings and move its bindings to mUniformBlocks. BUG=angleproject:1442 Change-Id: I62b4471990a44e626d2357c41cb914abc27cb18f Reviewed-on: https://chromium-review.googlesource.com/532834Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent db9e5d31
...@@ -146,14 +146,8 @@ LinkResult MemoryProgramCache::Deserialize(const Context *context, ...@@ -146,14 +146,8 @@ LinkResult MemoryProgramCache::Deserialize(const Context *context,
} }
state->mUniformBlocks.push_back(uniformBlock); state->mUniformBlocks.push_back(uniformBlock);
}
for (GLuint bindingIndex = 0; bindingIndex < state->mUniformBlockBindings.size(); state->mActiveUniformBlockBindings.set(uniformBlockIndex, uniformBlock.binding != 0);
++bindingIndex)
{
stream.readInt(&state->mUniformBlockBindings[bindingIndex]);
state->mActiveUniformBlockBindings.set(bindingIndex,
state->mUniformBlockBindings[bindingIndex] != 0);
} }
unsigned int transformFeedbackVaryingCount = stream.readInt<unsigned int>(); unsigned int transformFeedbackVaryingCount = stream.readInt<unsigned int>();
...@@ -301,11 +295,6 @@ void MemoryProgramCache::Serialize(const Context *context, ...@@ -301,11 +295,6 @@ void MemoryProgramCache::Serialize(const Context *context,
} }
} }
for (GLuint binding : state.getUniformBlockBindings())
{
stream.writeInt(binding);
}
stream.writeInt(state.getLinkedTransformFeedbackVaryings().size()); stream.writeInt(state.getLinkedTransformFeedbackVaryings().size());
for (const auto &var : state.getLinkedTransformFeedbackVaryings()) for (const auto &var : state.getLinkedTransformFeedbackVaryings())
{ {
......
...@@ -406,7 +406,6 @@ Program::Program(rx::GLImplFactory *factory, ShaderProgramManager *manager, GLui ...@@ -406,7 +406,6 @@ Program::Program(rx::GLImplFactory *factory, ShaderProgramManager *manager, GLui
{ {
ASSERT(mProgram); ASSERT(mProgram);
resetUniformBlockBindings();
unlink(); unlink();
} }
...@@ -618,7 +617,6 @@ Error Program::link(const gl::Context *context) ...@@ -618,7 +617,6 @@ Error Program::link(const gl::Context *context)
unlink(); unlink();
mInfoLog.reset(); mInfoLog.reset();
resetUniformBlockBindings();
const Caps &caps = data.getCaps(); const Caps &caps = data.getCaps();
...@@ -761,6 +759,7 @@ void Program::unlink() ...@@ -761,6 +759,7 @@ void Program::unlink()
mState.mUniforms.clear(); mState.mUniforms.clear();
mState.mUniformLocations.clear(); mState.mUniformLocations.clear();
mState.mUniformBlocks.clear(); mState.mUniformBlocks.clear();
mState.mActiveUniformBlockBindings.reset();
mState.mOutputVariables.clear(); mState.mOutputVariables.clear();
mState.mOutputLocations.clear(); mState.mOutputLocations.clear();
mState.mOutputVariableTypes.clear(); mState.mOutputVariableTypes.clear();
...@@ -1561,7 +1560,7 @@ const UniformBlock &Program::getUniformBlockByIndex(GLuint index) const ...@@ -1561,7 +1560,7 @@ const UniformBlock &Program::getUniformBlockByIndex(GLuint index) const
void Program::bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding) void Program::bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding)
{ {
mState.mUniformBlockBindings[uniformBlockIndex] = uniformBlockBinding; mState.mUniformBlocks[uniformBlockIndex].binding = uniformBlockBinding;
mState.mActiveUniformBlockBindings.set(uniformBlockIndex, uniformBlockBinding != 0); mState.mActiveUniformBlockBindings.set(uniformBlockIndex, uniformBlockBinding != 0);
mProgram->setUniformBlockBinding(uniformBlockIndex, uniformBlockBinding); mProgram->setUniformBlockBinding(uniformBlockIndex, uniformBlockBinding);
} }
...@@ -1571,15 +1570,6 @@ GLuint Program::getUniformBlockBinding(GLuint uniformBlockIndex) const ...@@ -1571,15 +1570,6 @@ GLuint Program::getUniformBlockBinding(GLuint uniformBlockIndex) const
return mState.getUniformBlockBinding(uniformBlockIndex); return mState.getUniformBlockBinding(uniformBlockIndex);
} }
void Program::resetUniformBlockBindings()
{
for (unsigned int blockId = 0; blockId < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; blockId++)
{
mState.mUniformBlockBindings[blockId] = 0;
}
mState.mActiveUniformBlockBindings.reset();
}
void Program::setTransformFeedbackVaryings(GLsizei count, const GLchar *const *varyings, GLenum bufferMode) void Program::setTransformFeedbackVaryings(GLsizei count, const GLchar *const *varyings, GLenum bufferMode)
{ {
mState.mTransformFeedbackVaryingNames.resize(count); mState.mTransformFeedbackVaryingNames.resize(count);
......
...@@ -24,11 +24,12 @@ ...@@ -24,11 +24,12 @@
#include "common/mathutil.h" #include "common/mathutil.h"
#include "common/Optional.h" #include "common/Optional.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/Constants.h" #include "libANGLE/Constants.h"
#include "libANGLE/Debug.h" #include "libANGLE/Debug.h"
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/RefCountObject.h" #include "libANGLE/RefCountObject.h"
#include "libANGLE/Uniform.h"
#include "libANGLE/angletypes.h"
namespace rx namespace rx
{ {
...@@ -48,8 +49,6 @@ class State; ...@@ -48,8 +49,6 @@ class State;
class InfoLog; class InfoLog;
class Buffer; class Buffer;
class Framebuffer; class Framebuffer;
struct UniformBlock;
struct LinkedUniform;
struct PackedVarying; struct PackedVarying;
extern const char * const g_fakepath; extern const char * const g_fakepath;
...@@ -216,8 +215,8 @@ class ProgramState final : angle::NonCopyable ...@@ -216,8 +215,8 @@ class ProgramState final : angle::NonCopyable
GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; } GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const
{ {
ASSERT(uniformBlockIndex < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS); ASSERT(uniformBlockIndex < mUniformBlocks.size());
return mUniformBlockBindings[uniformBlockIndex]; return mUniformBlocks[uniformBlockIndex].binding;
} }
const UniformBlockBindingMask &getActiveUniformBlockBindingsMask() const const UniformBlockBindingMask &getActiveUniformBlockBindingsMask() const
{ {
...@@ -238,12 +237,6 @@ class ProgramState final : angle::NonCopyable ...@@ -238,12 +237,6 @@ class ProgramState final : angle::NonCopyable
const sh::WorkGroupSize &getComputeShaderLocalSize() const { return mComputeShaderLocalSize; } const sh::WorkGroupSize &getComputeShaderLocalSize() const { return mComputeShaderLocalSize; }
const RangeUI &getSamplerUniformRange() const { return mSamplerUniformRange; } const RangeUI &getSamplerUniformRange() const { return mSamplerUniformRange; }
using UniformBlockBindingArray =
std::array<GLuint, IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS>;
const UniformBlockBindingArray &getUniformBlockBindings() const
{
return mUniformBlockBindings;
}
const std::vector<TransformFeedbackVarying> &getLinkedTransformFeedbackVaryings() const const std::vector<TransformFeedbackVarying> &getLinkedTransformFeedbackVaryings() const
{ {
return mLinkedTransformFeedbackVaryings; return mLinkedTransformFeedbackVaryings;
...@@ -273,7 +266,7 @@ class ProgramState final : angle::NonCopyable ...@@ -273,7 +266,7 @@ class ProgramState final : angle::NonCopyable
std::vector<TransformFeedbackVarying> mLinkedTransformFeedbackVaryings; std::vector<TransformFeedbackVarying> mLinkedTransformFeedbackVaryings;
GLenum mTransformFeedbackBufferMode; GLenum mTransformFeedbackBufferMode;
UniformBlockBindingArray mUniformBlockBindings; // For faster iteration on the blocks currently being bound.
UniformBlockBindingMask mActiveUniformBlockBindings; UniformBlockBindingMask mActiveUniformBlockBindings;
std::vector<sh::Attribute> mAttributes; std::vector<sh::Attribute> mAttributes;
......
...@@ -76,10 +76,10 @@ gl::LinkResult ProgramGL::load(const gl::Context *context, ...@@ -76,10 +76,10 @@ gl::LinkResult ProgramGL::load(const gl::Context *context,
const WorkaroundsGL &workaroundsGL = GetImplAs<ContextGL>(context)->getWorkaroundsGL(); const WorkaroundsGL &workaroundsGL = GetImplAs<ContextGL>(context)->getWorkaroundsGL();
if (workaroundsGL.reapplyUBOBindingsAfterLoadingBinaryProgram) if (workaroundsGL.reapplyUBOBindingsAfterLoadingBinaryProgram)
{ {
for (size_t bindingIndex : mState.getActiveUniformBlockBindingsMask()) const auto &blocks = mState.getUniformBlocks();
for (size_t blockIndex : mState.getActiveUniformBlockBindingsMask())
{ {
GLuint uintIndex = static_cast<GLuint>(bindingIndex); setUniformBlockBinding(static_cast<GLuint>(blockIndex), blocks[blockIndex].binding);
setUniformBlockBinding(uintIndex, mState.getUniformBlockBinding(uintIndex));
} }
} }
......
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