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,
}
state->mUniformBlocks.push_back(uniformBlock);
}
for (GLuint bindingIndex = 0; bindingIndex < state->mUniformBlockBindings.size();
++bindingIndex)
{
stream.readInt(&state->mUniformBlockBindings[bindingIndex]);
state->mActiveUniformBlockBindings.set(bindingIndex,
state->mUniformBlockBindings[bindingIndex] != 0);
state->mActiveUniformBlockBindings.set(uniformBlockIndex, uniformBlock.binding != 0);
}
unsigned int transformFeedbackVaryingCount = stream.readInt<unsigned int>();
......@@ -301,11 +295,6 @@ void MemoryProgramCache::Serialize(const Context *context,
}
}
for (GLuint binding : state.getUniformBlockBindings())
{
stream.writeInt(binding);
}
stream.writeInt(state.getLinkedTransformFeedbackVaryings().size());
for (const auto &var : state.getLinkedTransformFeedbackVaryings())
{
......
......@@ -406,7 +406,6 @@ Program::Program(rx::GLImplFactory *factory, ShaderProgramManager *manager, GLui
{
ASSERT(mProgram);
resetUniformBlockBindings();
unlink();
}
......@@ -618,7 +617,6 @@ Error Program::link(const gl::Context *context)
unlink();
mInfoLog.reset();
resetUniformBlockBindings();
const Caps &caps = data.getCaps();
......@@ -761,6 +759,7 @@ void Program::unlink()
mState.mUniforms.clear();
mState.mUniformLocations.clear();
mState.mUniformBlocks.clear();
mState.mActiveUniformBlockBindings.reset();
mState.mOutputVariables.clear();
mState.mOutputLocations.clear();
mState.mOutputVariableTypes.clear();
......@@ -1561,7 +1560,7 @@ const UniformBlock &Program::getUniformBlockByIndex(GLuint index) const
void Program::bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding)
{
mState.mUniformBlockBindings[uniformBlockIndex] = uniformBlockBinding;
mState.mUniformBlocks[uniformBlockIndex].binding = uniformBlockBinding;
mState.mActiveUniformBlockBindings.set(uniformBlockIndex, uniformBlockBinding != 0);
mProgram->setUniformBlockBinding(uniformBlockIndex, uniformBlockBinding);
}
......@@ -1571,15 +1570,6 @@ GLuint Program::getUniformBlockBinding(GLuint uniformBlockIndex) const
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)
{
mState.mTransformFeedbackVaryingNames.resize(count);
......
......@@ -24,11 +24,12 @@
#include "common/mathutil.h"
#include "common/Optional.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/Constants.h"
#include "libANGLE/Debug.h"
#include "libANGLE/Error.h"
#include "libANGLE/RefCountObject.h"
#include "libANGLE/Uniform.h"
#include "libANGLE/angletypes.h"
namespace rx
{
......@@ -48,8 +49,6 @@ class State;
class InfoLog;
class Buffer;
class Framebuffer;
struct UniformBlock;
struct LinkedUniform;
struct PackedVarying;
extern const char * const g_fakepath;
......@@ -216,8 +215,8 @@ class ProgramState final : angle::NonCopyable
GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const
{
ASSERT(uniformBlockIndex < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS);
return mUniformBlockBindings[uniformBlockIndex];
ASSERT(uniformBlockIndex < mUniformBlocks.size());
return mUniformBlocks[uniformBlockIndex].binding;
}
const UniformBlockBindingMask &getActiveUniformBlockBindingsMask() const
{
......@@ -238,12 +237,6 @@ class ProgramState final : angle::NonCopyable
const sh::WorkGroupSize &getComputeShaderLocalSize() const { return mComputeShaderLocalSize; }
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
{
return mLinkedTransformFeedbackVaryings;
......@@ -273,7 +266,7 @@ class ProgramState final : angle::NonCopyable
std::vector<TransformFeedbackVarying> mLinkedTransformFeedbackVaryings;
GLenum mTransformFeedbackBufferMode;
UniformBlockBindingArray mUniformBlockBindings;
// For faster iteration on the blocks currently being bound.
UniformBlockBindingMask mActiveUniformBlockBindings;
std::vector<sh::Attribute> mAttributes;
......
......@@ -76,10 +76,10 @@ gl::LinkResult ProgramGL::load(const gl::Context *context,
const WorkaroundsGL &workaroundsGL = GetImplAs<ContextGL>(context)->getWorkaroundsGL();
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(uintIndex, mState.getUniformBlockBinding(uintIndex));
setUniformBlockBinding(static_cast<GLuint>(blockIndex), blocks[blockIndex].binding);
}
}
......
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