Commit f3acaf9e by Shannon Woods

Use a caps-dependent sized vector to store Uniform Buffers

BUG=angle:685 Change-Id: I3f2e9fcccf27aebbb4ec5485286eec9828851887 Reviewed-on: https://chromium-review.googlesource.com/219805Tested-by: 's avatarShannon Woods <shannonwoods@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 23e0500d
...@@ -91,7 +91,7 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere ...@@ -91,7 +91,7 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere
bindRenderbuffer(0); bindRenderbuffer(0);
bindGenericUniformBuffer(0); bindGenericUniformBuffer(0);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++) for (unsigned int i = 0; i < mCaps.maxCombinedUniformBlocks; i++)
{ {
bindIndexedUniformBuffer(0, i, 0, -1); bindIndexedUniformBuffer(0, i, 0, -1);
} }
......
...@@ -120,6 +120,8 @@ void State::initialize(const Caps& caps, GLuint clientVersion) ...@@ -120,6 +120,8 @@ void State::initialize(const Caps& caps, GLuint clientVersion)
mVertexAttribCurrentValues[attribIndex].setFloatValues(defaultFloatValues); mVertexAttribCurrentValues[attribIndex].setFloatValues(defaultFloatValues);
} }
mUniformBuffers.resize(caps.maxCombinedUniformBlocks);
mSamplerTextures[GL_TEXTURE_2D].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[GL_TEXTURE_2D].resize(caps.maxCombinedTextureImageUnits);
mSamplerTextures[GL_TEXTURE_CUBE_MAP].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[GL_TEXTURE_CUBE_MAP].resize(caps.maxCombinedTextureImageUnits);
if (clientVersion >= 3) if (clientVersion >= 3)
...@@ -168,12 +170,12 @@ void State::reset() ...@@ -168,12 +170,12 @@ void State::reset()
} }
mGenericUniformBuffer.set(NULL); mGenericUniformBuffer.set(NULL);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++) mGenericTransformFeedbackBuffer.set(NULL);
for (UniformBufferVector::iterator bufItr = mUniformBuffers.begin(); bufItr != mUniformBuffers.end(); ++bufItr)
{ {
mUniformBuffers[i].set(NULL); bufItr->set(NULL);
} }
mGenericTransformFeedbackBuffer.set(NULL);
for (int i = 0; i < IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS; i++) for (int i = 0; i < IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS; i++)
{ {
mTransformFeedbackBuffers[i].set(NULL); mTransformFeedbackBuffers[i].set(NULL);
...@@ -945,14 +947,14 @@ void State::setIndexedUniformBufferBinding(GLuint index, Buffer *buffer, GLintpt ...@@ -945,14 +947,14 @@ void State::setIndexedUniformBufferBinding(GLuint index, Buffer *buffer, GLintpt
GLuint State::getIndexedUniformBufferId(GLuint index) const GLuint State::getIndexedUniformBufferId(GLuint index) const
{ {
ASSERT(index < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS); ASSERT(static_cast<size_t>(index) < mUniformBuffers.size());
return mUniformBuffers[index].id(); return mUniformBuffers[index].id();
} }
Buffer *State::getIndexedUniformBuffer(GLuint index) const Buffer *State::getIndexedUniformBuffer(GLuint index) const
{ {
ASSERT(index < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS); ASSERT(static_cast<size_t>(index) < mUniformBuffers.size());
return mUniformBuffers[index].get(); return mUniformBuffers[index].get();
} }
...@@ -1375,7 +1377,7 @@ bool State::getIndexedIntegerv(GLenum target, GLuint index, GLint *data) ...@@ -1375,7 +1377,7 @@ bool State::getIndexedIntegerv(GLenum target, GLuint index, GLint *data)
} }
break; break;
case GL_UNIFORM_BUFFER_BINDING: case GL_UNIFORM_BUFFER_BINDING:
if (index < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS) if (static_cast<size_t>(index) < mUniformBuffers.size())
{ {
*data = mUniformBuffers[index].id(); *data = mUniformBuffers[index].id();
} }
...@@ -1404,13 +1406,13 @@ bool State::getIndexedInteger64v(GLenum target, GLuint index, GLint64 *data) ...@@ -1404,13 +1406,13 @@ bool State::getIndexedInteger64v(GLenum target, GLuint index, GLint64 *data)
} }
break; break;
case GL_UNIFORM_BUFFER_START: case GL_UNIFORM_BUFFER_START:
if (index < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS) if (static_cast<size_t>(index) < mUniformBuffers.size())
{ {
*data = mUniformBuffers[index].getOffset(); *data = mUniformBuffers[index].getOffset();
} }
break; break;
case GL_UNIFORM_BUFFER_SIZE: case GL_UNIFORM_BUFFER_SIZE:
if (index < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS) if (static_cast<size_t>(index) < mUniformBuffers.size())
{ {
*data = mUniformBuffers[index].getSize(); *data = mUniformBuffers[index].getSize();
} }
......
...@@ -300,7 +300,8 @@ class State ...@@ -300,7 +300,8 @@ class State
ActiveQueryMap mActiveQueries; ActiveQueryMap mActiveQueries;
BindingPointer<Buffer> mGenericUniformBuffer; BindingPointer<Buffer> mGenericUniformBuffer;
OffsetBindingPointer<Buffer> mUniformBuffers[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS]; typedef std::vector< OffsetBindingPointer<Buffer> > UniformBufferVector;
UniformBufferVector mUniformBuffers;
BindingPointer<TransformFeedback> mTransformFeedback; BindingPointer<TransformFeedback> mTransformFeedback;
BindingPointer<Buffer> mGenericTransformFeedbackBuffer; BindingPointer<Buffer> mGenericTransformFeedbackBuffer;
......
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