Commit 9e63a813 by Jamie Madill Committed by Commit Bot

Revert "Minor inlining optimization to Context draw calls."

This reverts commit d9ee8bf9. 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/1340199Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent c30f45d3
...@@ -3523,27 +3523,6 @@ bool Context::noopDrawInstanced(PrimitiveMode mode, GLsizei count, GLsizei insta ...@@ -3523,27 +3523,6 @@ bool Context::noopDrawInstanced(PrimitiveMode mode, GLsizei count, GLsizei insta
return (instanceCount == 0) || noopDraw(mode, count); 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) angle::Result Context::prepareForDraw(PrimitiveMode mode)
{ {
if (mGLES1Renderer) if (mGLES1Renderer)
...@@ -3559,7 +3538,8 @@ angle::Result Context::prepareForDraw(PrimitiveMode mode) ...@@ -3559,7 +3538,8 @@ angle::Result Context::prepareForDraw(PrimitiveMode mode)
ANGLE_TRY(mGLState.getDrawFramebuffer()->ensureDrawAttachmentsInitialized(this)); ANGLE_TRY(mGLState.getDrawFramebuffer()->ensureDrawAttachmentsInitialized(this));
} }
return syncDirtyBits(); ANGLE_TRY(syncDirtyBits());
return angle::Result::Continue();
} }
Error Context::prepareForClear(GLbitfield mask) Error Context::prepareForClear(GLbitfield mask)
...@@ -3586,6 +3566,27 @@ Error Context::syncState(const State::DirtyBits &bitMask, const State::DirtyObje ...@@ -3586,6 +3566,27 @@ Error Context::syncState(const State::DirtyBits &bitMask, const State::DirtyObje
return NoError(); 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, void Context::blitFramebuffer(GLint srcX0,
GLint srcY0, GLint srcY0,
GLint srcX1, GLint srcX1,
......
...@@ -2774,10 +2774,10 @@ void State::getBooleani_v(GLenum target, GLuint index, GLboolean *data) ...@@ -2774,10 +2774,10 @@ void State::getBooleani_v(GLenum target, GLuint index, GLboolean *data)
} }
} }
angle::Result State::syncDirtyObjectsImpl(const Context *context, const DirtyObjects &dirtyObjects) angle::Result State::syncDirtyObjects(const Context *context, const DirtyObjects &bitset)
{ {
ASSERT(dirtyObjects.any()); const DirtyObjects &dirtyObjects = mDirtyObjects & bitset;
for (size_t dirtyObject : dirtyObjects) for (auto dirtyObject : dirtyObjects)
{ {
switch (dirtyObject) switch (dirtyObject)
{ {
......
...@@ -486,20 +486,7 @@ class State : angle::NonCopyable ...@@ -486,20 +486,7 @@ class State : angle::NonCopyable
using DirtyObjects = angle::BitSet<DIRTY_OBJECT_MAX>; using DirtyObjects = angle::BitSet<DIRTY_OBJECT_MAX>;
void clearDirtyObjects() { mDirtyObjects.reset(); } void clearDirtyObjects() { mDirtyObjects.reset(); }
void setAllDirtyObjects() { mDirtyObjects.set(); } void setAllDirtyObjects() { mDirtyObjects.set(); }
angle::Result syncDirtyObjects(const Context *context, const DirtyObjects &bitset);
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 syncDirtyObject(const Context *context, GLenum target); angle::Result syncDirtyObject(const Context *context, GLenum target);
void setObjectDirty(GLenum target); void setObjectDirty(GLenum target);
void setSamplerDirty(size_t samplerIndex); void setSamplerDirty(size_t samplerIndex);
...@@ -550,7 +537,6 @@ class State : angle::NonCopyable ...@@ -550,7 +537,6 @@ class State : angle::NonCopyable
angle::Result updateActiveTexture(const Context *context, angle::Result updateActiveTexture(const Context *context,
size_t textureIndex, size_t textureIndex,
Texture *texture); Texture *texture);
angle::Result syncDirtyObjectsImpl(const Context *context, const DirtyObjects &dirtyObjects);
// Dispatch table for buffer update functions. // Dispatch table for buffer update functions.
static const angle::PackedEnumMap<BufferBinding, BufferBindingSetter> kBufferSetters; static const angle::PackedEnumMap<BufferBinding, BufferBindingSetter> kBufferSetters;
......
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