Commit d30f0114 by Alexey Knyazev Committed by Commit Bot

Metal: Early loop exit during attachments clear

Added BitSetIteratorTest.IterationOrder Bug: angleproject:2634 Change-Id: I0e9c6ad4d19bbb7d691e46b7ec720e918b170371 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2520956 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 2d964a47
......@@ -7,6 +7,8 @@
// Tests bitset helpers and custom classes.
//
#include <array>
#include <gtest/gtest.h>
#include "common/bitset_utils.h"
......@@ -205,6 +207,28 @@ TYPED_TEST(BitSetIteratorTest, Iterator)
EXPECT_EQ(originalValues.size(), readValues.size());
}
// Ensure lsb->msb iteration order.
TYPED_TEST(BitSetIteratorTest, IterationOrder)
{
TypeParam mStateBits = this->mStateBits;
const std::array<size_t, 8> writeOrder = {20, 25, 16, 31, 10, 14, 36, 19};
const std::array<size_t, 8> fetchOrder = {10, 14, 16, 19, 20, 25, 31, 36};
for (size_t value : writeOrder)
{
mStateBits.set(value);
}
EXPECT_EQ(writeOrder.size(), mStateBits.count());
size_t i = 0;
for (size_t bit : mStateBits)
{
EXPECT_EQ(fetchOrder[i], bit);
i++;
}
EXPECT_EQ(fetchOrder.size(), mStateBits.count());
}
// Test an empty iterator.
TYPED_TEST(BitSetIteratorTest, EmptySet)
{
......
......@@ -1025,7 +1025,8 @@ angle::Result FramebufferMtl::clearWithDraw(const gl::Context *context,
{
if (drawbuffer >= mRenderPassDesc.numColorAttachments)
{
continue;
// Iteration over drawbuffer indices always goes in ascending order
break;
}
RenderTargetMtl *renderTarget = mColorRenderTargets[drawbuffer];
if (!renderTarget || !renderTarget->getTexture())
......
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