Commit 57193e8b by Jamie Madill Committed by Commit Bot

Vulkan: Optimize Attribute Change Perf (5/5)

This patch series optimizes programs that use the pattern: for (;;) { glVertexAttribPointer(...) glDraw(...) } Change 5: Re-check fragment opts on necessary changes. Check on a program binding change and on a sample coverage enabled chagne. This likely could be optimized further for program binding changes. In total the patch series reduces test iteration time by 25%. Test: DrawCallPerfBenchmark.Run/vulkan_attrib_change Bug: angleproject:5045 Bug: b/168493024 Change-Id: I5116f228d5eeef6606136a9a0cc81a4545df9d33 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2409177 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCharlie Lao <cclao@google.com> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com>
parent a9dcf0ea
...@@ -1306,7 +1306,6 @@ angle::Result ContextVk::handleDirtyGraphicsPipeline(const gl::Context *context, ...@@ -1306,7 +1306,6 @@ angle::Result ContextVk::handleDirtyGraphicsPipeline(const gl::Context *context,
vk::CommandBuffer *commandBuffer) vk::CommandBuffer *commandBuffer)
{ {
ASSERT(mExecutable); ASSERT(mExecutable);
mExecutable->updateEarlyFragmentTestsOptimization(this);
if (!mCurrentGraphicsPipeline) if (!mCurrentGraphicsPipeline)
{ {
...@@ -2791,6 +2790,7 @@ void ContextVk::invalidateProgramBindingHelper(const gl::State &glState) ...@@ -2791,6 +2790,7 @@ void ContextVk::invalidateProgramBindingHelper(const gl::State &glState)
angle::Result ContextVk::invalidateProgramExecutableHelper(const gl::Context *context) angle::Result ContextVk::invalidateProgramExecutableHelper(const gl::Context *context)
{ {
const gl::State &glState = context->getState(); const gl::State &glState = context->getState();
const gl::ProgramExecutable *executable = glState.getProgramExecutable();
if (glState.getProgramExecutable()->isCompute()) if (glState.getProgramExecutable()->isCompute())
{ {
...@@ -2802,11 +2802,14 @@ angle::Result ContextVk::invalidateProgramExecutableHelper(const gl::Context *co ...@@ -2802,11 +2802,14 @@ angle::Result ContextVk::invalidateProgramExecutableHelper(const gl::Context *co
// later. // later.
invalidateDefaultAttributes(context->getStateCache().getActiveDefaultAttribsMask()); invalidateDefaultAttributes(context->getStateCache().getActiveDefaultAttribsMask());
invalidateVertexAndIndexBuffers(); invalidateVertexAndIndexBuffers();
bool useVertexBuffer = (glState.getProgramExecutable()->getMaxActiveAttribLocation() > 0); bool useVertexBuffer = (executable->getMaxActiveAttribLocation() > 0);
mNonIndexedDirtyBitsMask.set(DIRTY_BIT_VERTEX_BUFFERS, useVertexBuffer); mNonIndexedDirtyBitsMask.set(DIRTY_BIT_VERTEX_BUFFERS, useVertexBuffer);
mIndexedDirtyBitsMask.set(DIRTY_BIT_VERTEX_BUFFERS, useVertexBuffer); mIndexedDirtyBitsMask.set(DIRTY_BIT_VERTEX_BUFFERS, useVertexBuffer);
mCurrentGraphicsPipeline = nullptr; mCurrentGraphicsPipeline = nullptr;
mGraphicsPipelineTransition.reset(); mGraphicsPipelineTransition.reset();
ASSERT(mExecutable);
mExecutable->updateEarlyFragmentTestsOptimization(this);
} }
return angle::Result::Continue; return angle::Result::Continue;
......
...@@ -621,7 +621,7 @@ void ProgramExecutableVk::updateEarlyFragmentTestsOptimization(ContextVk *contex ...@@ -621,7 +621,7 @@ void ProgramExecutableVk::updateEarlyFragmentTestsOptimization(ContextVk *contex
if (!glState.canEnableEarlyFragmentTestsOptimization()) if (!glState.canEnableEarlyFragmentTestsOptimization())
{ {
ProgramVk *programVk = getShaderProgram(glState, gl::ShaderType::Fragment); ProgramVk *programVk = getShaderProgram(glState, gl::ShaderType::Fragment);
if (programVk->getState().hasEarlyFragmentTestsOptimization()) if (programVk && programVk->getState().hasEarlyFragmentTestsOptimization())
{ {
mTransformOptionBits[ProgramTransformOption::RemoveEarlyFragmentTestsOptimization] = mTransformOptionBits[ProgramTransformOption::RemoveEarlyFragmentTestsOptimization] =
true; true;
......
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