Revert "Minor inlining optimization to Context draw calls."
This reverts commit d9ee8bf9620748a65df8f97ae89879eef676caff.
Reason for revert: Slightly regresses tests that have dirty objects.
See https://chromeperf.appspot.com/report?sid=abdb797da7149beffa29dc8a0869c15d96794749eff50bcb36c07d85fe509096
Original change's description:
> Minor inlining optimization to Context draw calls.
>
> Reduces draw call overhead by up to 3%.
>
> Bug: angleproject:2966
> Change-Id: Ie7ddb61b905fefe59a06a1528f0a3fde4accaf74
> Reviewed-on: https://chromium-review.googlesource.com/c/1333608
> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Jamie Madill <jmadill@chromium.org>
TBR=ynovikov@chromium.org,geofflang@chromium.org,jmadill@chromium.org
Change-Id: I6fdd34880a711ecc89d407ae90f3991584f65272
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:2966
Reviewed-on: https://chromium-review.googlesource.com/c/1340199
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 7af3e66..1a092e2 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -3523,27 +3523,6 @@
return (instanceCount == 0) || noopDraw(mode, count);
}
-ANGLE_INLINE angle::Result Context::syncDirtyBits()
-{
- const State::DirtyBits &dirtyBits = mGLState.getDirtyBits();
- ANGLE_TRY(mImplementation->syncState(this, dirtyBits, mAllDirtyBits));
- mGLState.clearDirtyBits();
- return angle::Result::Continue();
-}
-
-ANGLE_INLINE angle::Result Context::syncDirtyBits(const State::DirtyBits &bitMask)
-{
- const State::DirtyBits &dirtyBits = (mGLState.getDirtyBits() & bitMask);
- ANGLE_TRY(mImplementation->syncState(this, dirtyBits, bitMask));
- mGLState.clearDirtyBits(dirtyBits);
- return angle::Result::Continue();
-}
-
-ANGLE_INLINE angle::Result Context::syncDirtyObjects(const State::DirtyObjects &objectMask)
-{
- return mGLState.syncDirtyObjects(this, objectMask);
-}
-
angle::Result Context::prepareForDraw(PrimitiveMode mode)
{
if (mGLES1Renderer)
@@ -3559,7 +3538,8 @@
ANGLE_TRY(mGLState.getDrawFramebuffer()->ensureDrawAttachmentsInitialized(this));
}
- return syncDirtyBits();
+ ANGLE_TRY(syncDirtyBits());
+ return angle::Result::Continue();
}
Error Context::prepareForClear(GLbitfield mask)
@@ -3586,6 +3566,27 @@
return NoError();
}
+angle::Result Context::syncDirtyBits()
+{
+ const State::DirtyBits &dirtyBits = mGLState.getDirtyBits();
+ ANGLE_TRY(mImplementation->syncState(this, dirtyBits, mAllDirtyBits));
+ mGLState.clearDirtyBits();
+ return angle::Result::Continue();
+}
+
+angle::Result Context::syncDirtyBits(const State::DirtyBits &bitMask)
+{
+ const State::DirtyBits &dirtyBits = (mGLState.getDirtyBits() & bitMask);
+ ANGLE_TRY(mImplementation->syncState(this, dirtyBits, bitMask));
+ mGLState.clearDirtyBits(dirtyBits);
+ return angle::Result::Continue();
+}
+
+angle::Result Context::syncDirtyObjects(const State::DirtyObjects &objectMask)
+{
+ return mGLState.syncDirtyObjects(this, objectMask);
+}
+
void Context::blitFramebuffer(GLint srcX0,
GLint srcY0,
GLint srcX1,
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index ff834ad..bd94e84 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -2774,10 +2774,10 @@
}
}
-angle::Result State::syncDirtyObjectsImpl(const Context *context, const DirtyObjects &dirtyObjects)
+angle::Result State::syncDirtyObjects(const Context *context, const DirtyObjects &bitset)
{
- ASSERT(dirtyObjects.any());
- for (size_t dirtyObject : dirtyObjects)
+ const DirtyObjects &dirtyObjects = mDirtyObjects & bitset;
+ for (auto dirtyObject : dirtyObjects)
{
switch (dirtyObject)
{
diff --git a/src/libANGLE/State.h b/src/libANGLE/State.h
index 38da01c..d997a37 100644
--- a/src/libANGLE/State.h
+++ b/src/libANGLE/State.h
@@ -486,20 +486,7 @@
using DirtyObjects = angle::BitSet<DIRTY_OBJECT_MAX>;
void clearDirtyObjects() { mDirtyObjects.reset(); }
void setAllDirtyObjects() { mDirtyObjects.set(); }
-
- ANGLE_INLINE angle::Result syncDirtyObjects(const Context *context, const DirtyObjects &bitset)
- {
- const DirtyObjects &dirtyObjects = mDirtyObjects & bitset;
- if (dirtyObjects.any())
- {
- return syncDirtyObjectsImpl(context, dirtyObjects);
- }
- else
- {
- return angle::Result::Continue();
- }
- }
-
+ angle::Result syncDirtyObjects(const Context *context, const DirtyObjects &bitset);
angle::Result syncDirtyObject(const Context *context, GLenum target);
void setObjectDirty(GLenum target);
void setSamplerDirty(size_t samplerIndex);
@@ -550,7 +537,6 @@
angle::Result updateActiveTexture(const Context *context,
size_t textureIndex,
Texture *texture);
- angle::Result syncDirtyObjectsImpl(const Context *context, const DirtyObjects &dirtyObjects);
// Dispatch table for buffer update functions.
static const angle::PackedEnumMap<BufferBinding, BufferBindingSetter> kBufferSetters;