Vulkan: Use minimal dirty bits in VertexArrayVk.
This should slightly reduce draw call overhead.
BUG=angleproject:1898
Change-Id: I0e515bf2868f237f1d6948c12942f8cb6637c0c0
Reviewed-on: https://chromium-review.googlesource.com/707690
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Program.cpp b/src/libANGLE/Program.cpp
index 3b0d904..2762c04 100644
--- a/src/libANGLE/Program.cpp
+++ b/src/libANGLE/Program.cpp
@@ -341,6 +341,7 @@
mAttachedVertexShader(nullptr),
mAttachedComputeShader(nullptr),
mTransformFeedbackBufferMode(GL_INTERLEAVED_ATTRIBS),
+ mMaxActiveAttribLocation(0),
mSamplerUniformRange(0, 0),
mImageUniformRange(0, 0),
mAtomicCounterUniformRange(0, 0),
@@ -847,6 +848,7 @@
{
mState.mAttributes.clear();
mState.mActiveAttribLocationsMask.reset();
+ mState.mMaxActiveAttribLocation = 0;
mState.mLinkedTransformFeedbackVaryings.clear();
mState.mUniforms.clear();
mState.mUniformLocations.clear();
@@ -2134,11 +2136,14 @@
for (const sh::Attribute &attribute : mState.mAttributes)
{
ASSERT(attribute.location != -1);
- int regs = VariableRegisterCount(attribute.type);
+ unsigned int regs = static_cast<unsigned int>(VariableRegisterCount(attribute.type));
- for (int r = 0; r < regs; r++)
+ for (unsigned int r = 0; r < regs; r++)
{
- mState.mActiveAttribLocationsMask.set(attribute.location + r);
+ unsigned int location = static_cast<unsigned int>(attribute.location) + r;
+ mState.mActiveAttribLocationsMask.set(location);
+ mState.mMaxActiveAttribLocation =
+ std::max(mState.mMaxActiveAttribLocation, location + 1);
}
}