Commit 96f4f45e by Jamie Madill Committed by Commit Bot

Fix ImageIndexIterator termination.

There was an off-by-one error preventing proper iteration. BUG=angleproject:1493 BUG=chromium:638323 Change-Id: I8a3907620a1503d16b039606a67fe3471f88e165 Reviewed-on: https://chromium-review.googlesource.com/380325Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 3af2b3b0
...@@ -149,21 +149,29 @@ ImageIndex ImageIndexIterator::next() ...@@ -149,21 +149,29 @@ ImageIndex ImageIndexIterator::next()
if (mCurrentLayer != ImageIndex::ENTIRE_LEVEL) if (mCurrentLayer != ImageIndex::ENTIRE_LEVEL)
{ {
if (mCurrentLayer < maxLayer()-1) if (mCurrentLayer < maxLayer() - 1)
{ {
mCurrentLayer++; mCurrentLayer++;
} }
else if (mCurrentMip < mMipRange.end-1) else if (mCurrentMip < mMipRange.end - 1)
{ {
mCurrentMip++; mCurrentMip++;
mCurrentLayer = mLayerRange.start; mCurrentLayer = mLayerRange.start;
} }
else
{
done();
}
} }
else if (mCurrentMip < mMipRange.end-1) else if (mCurrentMip < mMipRange.end - 1)
{ {
mCurrentMip++; mCurrentMip++;
mCurrentLayer = mLayerRange.start; mCurrentLayer = mLayerRange.start;
} }
else
{
done();
}
return value; return value;
} }
...@@ -185,4 +193,10 @@ bool ImageIndexIterator::hasNext() const ...@@ -185,4 +193,10 @@ bool ImageIndexIterator::hasNext() const
return (mCurrentMip < mMipRange.end || mCurrentLayer < maxLayer()); return (mCurrentMip < mMipRange.end || mCurrentLayer < maxLayer());
} }
void ImageIndexIterator::done()
{
mCurrentMip = mMipRange.end;
mCurrentLayer = maxLayer();
} }
} // namespace gl
...@@ -68,6 +68,7 @@ class ImageIndexIterator ...@@ -68,6 +68,7 @@ class ImageIndexIterator
const Range<GLint> &layerRange, const GLsizei *layerCounts); const Range<GLint> &layerRange, const GLsizei *layerCounts);
GLint maxLayer() const; GLint maxLayer() const;
void done();
GLenum mType; GLenum mType;
Range<GLint> mMipRange; Range<GLint> mMipRange;
......
...@@ -41,6 +41,8 @@ TEST(ImageIndexTest, Iterator2D) ...@@ -41,6 +41,8 @@ TEST(ImageIndexTest, Iterator2D)
EXPECT_EQ(current.mipIndex, nextIndex.mipIndex); EXPECT_EQ(current.mipIndex, nextIndex.mipIndex);
EXPECT_EQ(current.layerIndex, nextIndex.layerIndex); EXPECT_EQ(current.layerIndex, nextIndex.layerIndex);
} }
EXPECT_FALSE(iter.hasNext());
} }
TEST(ImageIndexTest, IteratorCube) TEST(ImageIndexTest, IteratorCube)
...@@ -64,6 +66,8 @@ TEST(ImageIndexTest, IteratorCube) ...@@ -64,6 +66,8 @@ TEST(ImageIndexTest, IteratorCube)
EXPECT_TRUE(nextIndex.hasLayer()); EXPECT_TRUE(nextIndex.hasLayer());
} }
} }
EXPECT_FALSE(iter.hasNext());
} }
TEST(ImageIndexTest, Iterator3D) TEST(ImageIndexTest, Iterator3D)
...@@ -85,6 +89,8 @@ TEST(ImageIndexTest, Iterator3D) ...@@ -85,6 +89,8 @@ TEST(ImageIndexTest, Iterator3D)
EXPECT_TRUE(nextIndex.hasLayer()); EXPECT_TRUE(nextIndex.hasLayer());
} }
} }
EXPECT_FALSE(iter.hasNext());
} }
TEST(ImageIndexTest, Iterator2DArray) TEST(ImageIndexTest, Iterator2DArray)
...@@ -109,6 +115,8 @@ TEST(ImageIndexTest, Iterator2DArray) ...@@ -109,6 +115,8 @@ TEST(ImageIndexTest, Iterator2DArray)
EXPECT_TRUE(nextIndex.hasLayer()); EXPECT_TRUE(nextIndex.hasLayer());
} }
} }
EXPECT_FALSE(iter.hasNext());
} }
} // namespace } // namespace
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