Commit 85334dcb by Olli Etuaho Committed by Commit Bot

Refactor shader state setting in the GL backend

This is needed in preparation of implementing DispatchCompute, which will need to set some of the same state as draw calls, but not everything. Also move setTextureCubemapSeamlessEnabled to onMakeCurrent, this way it doesn't need to be called on every draw call. Overall this patch doesn't have a measurable performance impact. BUG=angleproject:1442 TEST=angle_perftests, angle_end2end_tests Change-Id: I9958bfe7bf895b3cd805e3146a8f74d28ff2835e Reviewed-on: https://chromium-review.googlesource.com/438349Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent 3ed50a1d
......@@ -755,10 +755,14 @@ gl::Error StateManagerGL::onMakeCurrent(const gl::ContextState &data)
}
}
// Seamless cubemaps are required for ES3 and higher contexts. It should be the cheapest to set
// this state here since MakeCurrent is expected to be called less frequently than draw calls.
setTextureCubemapSeamlessEnabled(data.getClientMajorVersion() >= 3);
return gl::NoError();
}
gl::Error StateManagerGL::setGenericDrawState(const gl::ContextState &data)
void StateManagerGL::setGenericShaderState(const gl::ContextState &data)
{
const gl::State &state = data.getState();
......@@ -832,14 +836,18 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::ContextState &data)
}
}
}
}
gl::Error StateManagerGL::setGenericDrawState(const gl::ContextState &data)
{
setGenericShaderState(data);
const gl::State &state = data.getState();
const gl::Framebuffer *framebuffer = state.getDrawFramebuffer();
const FramebufferGL *framebufferGL = GetImplAs<FramebufferGL>(framebuffer);
bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferGL->getFramebufferID());
// Seamless cubemaps are required for ES3 and higher contexts.
setTextureCubemapSeamlessEnabled(data.getClientMajorVersion() >= 3);
// Set the current transform feedback state
gl::TransformFeedback *transformFeedback = state.getCurrentTransformFeedback();
if (transformFeedback)
......
......@@ -163,6 +163,10 @@ class StateManagerGL final : angle::NonCopyable
GLuint getBoundBuffer(GLenum type);
private:
// Set state that's common among draw commands and compute invocations.
void setGenericShaderState(const gl::ContextState &data);
// Set state that's common among draw commands.
gl::Error setGenericDrawState(const gl::ContextState &data);
void setTextureCubemapSeamlessEnabled(bool enabled);
......
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