| // | |
| // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| #include "gmock/gmock.h" | |
| #include "gtest/gtest.h" | |
| #include "common/utilities.h" | |
| #include "libANGLE/ImageIndex.h" | |
| using namespace gl; | |
| namespace | |
| { | |
| static const GLint minMip = 0; | |
| static const GLint maxMip = 4; | |
| static const GLint minLayer = 1; | |
| static const GLint maxLayer = 3; | |
| TEST(ImageIndexTest, Iterator2D) | |
| { | |
| ImageIndexIterator iter = ImageIndexIterator::Make2D(minMip, maxMip); | |
| ASSERT_GE(0, minMip); | |
| for (GLint mip = minMip; mip < maxMip; mip++) | |
| { | |
| EXPECT_TRUE(iter.hasNext()); | |
| ImageIndex current = iter.current(); | |
| ImageIndex nextIndex = iter.next(); | |
| EXPECT_EQ(TextureType::_2D, nextIndex.getType()); | |
| EXPECT_EQ(TextureTarget::_2D, nextIndex.getTarget()); | |
| EXPECT_EQ(mip, nextIndex.getLevelIndex()); | |
| EXPECT_FALSE(nextIndex.hasLayer()); | |
| EXPECT_FALSE(nextIndex.has3DLayer()); | |
| // Also test current | |
| EXPECT_EQ(current.getType(), nextIndex.getType()); | |
| EXPECT_EQ(current.getLevelIndex(), nextIndex.getLevelIndex()); | |
| EXPECT_EQ(current.getLayerIndex(), nextIndex.getLayerIndex()); | |
| } | |
| EXPECT_FALSE(iter.hasNext()); | |
| } | |
| TEST(ImageIndexTest, IteratorCube) | |
| { | |
| ImageIndexIterator iter = ImageIndexIterator::MakeCube(minMip, maxMip); | |
| ASSERT_GE(0, minMip); | |
| for (GLint mip = minMip; mip < maxMip; mip++) | |
| { | |
| for (TextureTarget target : AllCubeFaceTextureTargets()) | |
| { | |
| EXPECT_TRUE(iter.hasNext()); | |
| ImageIndex nextIndex = iter.next(); | |
| EXPECT_EQ(TextureType::CubeMap, nextIndex.getType()); | |
| EXPECT_EQ(target, nextIndex.getTarget()); | |
| EXPECT_EQ(mip, nextIndex.getLevelIndex()); | |
| EXPECT_TRUE(nextIndex.hasLayer()); | |
| EXPECT_FALSE(nextIndex.has3DLayer()); | |
| } | |
| } | |
| EXPECT_FALSE(iter.hasNext()); | |
| } | |
| TEST(ImageIndexTest, Iterator3D) | |
| { | |
| ImageIndexIterator iter = ImageIndexIterator::Make3D(minMip, maxMip, minLayer, maxLayer); | |
| ASSERT_GE(0, minMip); | |
| for (GLint mip = minMip; mip < maxMip; mip++) | |
| { | |
| for (GLint layer = minLayer; layer < maxLayer; layer++) | |
| { | |
| EXPECT_TRUE(iter.hasNext()); | |
| ImageIndex nextIndex = iter.next(); | |
| EXPECT_EQ(TextureType::_3D, nextIndex.getType()); | |
| EXPECT_EQ(TextureTarget::_3D, nextIndex.getTarget()); | |
| EXPECT_EQ(mip, nextIndex.getLevelIndex()); | |
| EXPECT_EQ(layer, nextIndex.getLayerIndex()); | |
| EXPECT_TRUE(nextIndex.hasLayer()); | |
| EXPECT_TRUE(nextIndex.has3DLayer()); | |
| } | |
| } | |
| EXPECT_FALSE(iter.hasNext()); | |
| } | |
| TEST(ImageIndexTest, Iterator2DArray) | |
| { | |
| GLsizei layerCounts[] = { 1, 3, 5, 2 }; | |
| ImageIndexIterator iter = ImageIndexIterator::Make2DArray(minMip, maxMip, layerCounts); | |
| ASSERT_GE(0, minMip); | |
| ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip)); | |
| for (GLint mip = minMip; mip < maxMip; mip++) | |
| { | |
| for (GLint layer = 0; layer < layerCounts[mip]; layer++) | |
| { | |
| EXPECT_TRUE(iter.hasNext()); | |
| ImageIndex nextIndex = iter.next(); | |
| EXPECT_EQ(TextureType::_2DArray, nextIndex.getType()); | |
| EXPECT_EQ(TextureTarget::_2DArray, nextIndex.getTarget()); | |
| EXPECT_EQ(mip, nextIndex.getLevelIndex()); | |
| EXPECT_EQ(layer, nextIndex.getLayerIndex()); | |
| EXPECT_TRUE(nextIndex.hasLayer()); | |
| EXPECT_TRUE(nextIndex.has3DLayer()); | |
| } | |
| } | |
| EXPECT_FALSE(iter.hasNext()); | |
| } | |
| TEST(ImageIndexTest, LayerIterator2DArray) | |
| { | |
| GLsizei layerCounts[] = {1, 3, 5, 2}; | |
| ASSERT_GE(0, minMip); | |
| ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip)); | |
| for (GLint mip = minMip; mip < maxMip; mip++) | |
| { | |
| // Make a layer iterator. | |
| ImageIndex mipImageIndex = ImageIndex::Make2DArray(mip, ImageIndex::kEntireLevel); | |
| ImageIndexIterator iter = mipImageIndex.getLayerIterator(layerCounts[mip]); | |
| for (GLint layer = 0; layer < layerCounts[mip]; layer++) | |
| { | |
| EXPECT_TRUE(iter.hasNext()); | |
| ImageIndex nextIndex = iter.next(); | |
| EXPECT_EQ(TextureType::_2DArray, nextIndex.getType()); | |
| EXPECT_EQ(TextureTarget::_2DArray, nextIndex.getTarget()); | |
| EXPECT_EQ(mip, nextIndex.getLevelIndex()); | |
| EXPECT_EQ(layer, nextIndex.getLayerIndex()); | |
| EXPECT_TRUE(nextIndex.hasLayer()); | |
| EXPECT_TRUE(nextIndex.has3DLayer()); | |
| EXPECT_LT(nextIndex.getLayerIndex(), layerCounts[mip]); | |
| } | |
| EXPECT_FALSE(iter.hasNext()); | |
| } | |
| } | |
| } // namespace |