Commit d79db259 by Jamie Madill Committed by Commit Bot

Vulkan: Optimize Attribute Change Perf (3/5)

This patch series optimizes programs that use the pattern: for (;;) { glVertexAttribPointer(...) glDraw(...) } Change 3: Use FastUnorderedSet for RP XFB buffers. Most of the time this list is empty. This speeds up the count check for empty and non-empty sets considerably. 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: Ia43eb11bdd62aa3bf425069b591f9318f519fd4c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2409175 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent d6806d73
......@@ -3460,7 +3460,7 @@ angle::Result ContextVk::onBeginTransformFeedback(
for (size_t bufferIndex = 0; bufferIndex < bufferCount; ++bufferIndex)
{
const vk::BufferHelper *buffer = buffers[bufferIndex];
if (mCurrentTransformFeedbackBuffers.count(buffer) != 0 ||
if (mCurrentTransformFeedbackBuffers.contains(buffer) ||
mRenderPassCommands->usesBuffer(*buffer))
{
ANGLE_TRY(flushCommandsAndEndRenderPass());
......@@ -3484,7 +3484,11 @@ void ContextVk::populateTransformFeedbackBufferSet(
{
for (size_t bufferIndex = 0; bufferIndex < bufferCount; ++bufferIndex)
{
mCurrentTransformFeedbackBuffers.insert(buffers[bufferIndex]);
vk::BufferHelper *buffer = buffers[bufferIndex];
if (!mCurrentTransformFeedbackBuffers.contains(buffer))
{
mCurrentTransformFeedbackBuffers.insert(buffer);
}
}
}
......
......@@ -1063,7 +1063,9 @@ class ContextVk : public ContextImpl, public vk::Context
bool mHasPrimaryCommands;
// Transform feedback buffers.
std::unordered_set<const vk::BufferHelper *> mCurrentTransformFeedbackBuffers;
angle::FastUnorderedSet<const vk::BufferHelper *,
gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS>
mCurrentTransformFeedbackBuffers;
// Internal shader library.
vk::ShaderLibrary mShaderLibrary;
......@@ -1131,7 +1133,7 @@ class ContextVk : public ContextImpl, public vk::Context
ANGLE_INLINE angle::Result ContextVk::endRenderPassIfTransformFeedbackBuffer(
const vk::BufferHelper *buffer)
{
if (!buffer || mCurrentTransformFeedbackBuffers.count(buffer) == 0)
if (!buffer || !mCurrentTransformFeedbackBuffers.contains(buffer))
{
return angle::Result::Continue;
}
......
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