Commit caaff169 by Jamie Madill Committed by Commit Bot

Vulkan: Fix releasing Programs that are in use.

The bug would only manifest after a glUseProgram(0) at a specific time. Fix the bug by releasing the uniform buffer to the Renderer instead. Bug: angleproject:2397 Change-Id: Ia071da5af00dfc740e0fc20864d41f7b3e0afda4 Reviewed-on: https://chromium-review.googlesource.com/1110712 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarLuc Ferron <lucferron@chromium.org>
parent 8a4c49fb
......@@ -176,13 +176,15 @@ vk::Error ProgramVk::reset(ContextVk *contextVk)
}
mPipelineLayout.reset();
RendererVk *renderer = contextVk->getRenderer();
for (auto &uniformBlock : mDefaultUniformBlocks)
{
uniformBlock.storage.destroy(device);
uniformBlock.storage.release(renderer);
}
mEmptyUniformBlockStorage.memory.destroy(device);
mEmptyUniformBlockStorage.buffer.destroy(device);
Serial currentSerial = renderer->getCurrentQueueSerial();
renderer->releaseObject(currentSerial, &mEmptyUniformBlockStorage.memory);
renderer->releaseObject(currentSerial, &mEmptyUniformBlockStorage.buffer);
mLinkedFragmentModule.destroy(device);
mLinkedVertexModule.destroy(device);
......
......@@ -2054,6 +2054,8 @@ TEST_P(SimpleStateChangeTest, ReleaseShaderInUseThatReadsFromUniforms)
glDisableVertexAttribArray(positionLocation);
glUseProgram(0);
// Verify we drew red in the end since thats the last draw.
EXPECT_PIXEL_COLOR_EQ(getWindowWidth() / 2, 0, GLColor::red);
}
......
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