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 @@ ...@@ -7,6 +7,8 @@
// Tests bitset helpers and custom classes. // Tests bitset helpers and custom classes.
// //
#include <array>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "common/bitset_utils.h" #include "common/bitset_utils.h"
...@@ -205,6 +207,28 @@ TYPED_TEST(BitSetIteratorTest, Iterator) ...@@ -205,6 +207,28 @@ TYPED_TEST(BitSetIteratorTest, Iterator)
EXPECT_EQ(originalValues.size(), readValues.size()); 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. // Test an empty iterator.
TYPED_TEST(BitSetIteratorTest, EmptySet) TYPED_TEST(BitSetIteratorTest, EmptySet)
{ {
......
...@@ -1025,7 +1025,8 @@ angle::Result FramebufferMtl::clearWithDraw(const gl::Context *context, ...@@ -1025,7 +1025,8 @@ angle::Result FramebufferMtl::clearWithDraw(const gl::Context *context,
{ {
if (drawbuffer >= mRenderPassDesc.numColorAttachments) if (drawbuffer >= mRenderPassDesc.numColorAttachments)
{ {
continue; // Iteration over drawbuffer indices always goes in ascending order
break;
} }
RenderTargetMtl *renderTarget = mColorRenderTargets[drawbuffer]; RenderTargetMtl *renderTarget = mColorRenderTargets[drawbuffer];
if (!renderTarget || !renderTarget->getTexture()) 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