xref: /aosp_15_r20/external/angle/src/libANGLE/ImageIndexIterator_unittest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker #include "gmock/gmock.h"
8*8975f5c5SAndroid Build Coastguard Worker #include "gtest/gtest.h"
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include "common/utilities.h"
11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/ImageIndex.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker using namespace gl;
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker namespace
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker static const GLint minMip   = 0;
19*8975f5c5SAndroid Build Coastguard Worker static const GLint maxMip   = 4;
20*8975f5c5SAndroid Build Coastguard Worker static const GLint minLayer = 1;
21*8975f5c5SAndroid Build Coastguard Worker static const GLint maxLayer = 3;
22*8975f5c5SAndroid Build Coastguard Worker 
TEST(ImageIndexTest,Iterator2D)23*8975f5c5SAndroid Build Coastguard Worker TEST(ImageIndexTest, Iterator2D)
24*8975f5c5SAndroid Build Coastguard Worker {
25*8975f5c5SAndroid Build Coastguard Worker     ImageIndexIterator iter = ImageIndexIterator::Make2D(minMip, maxMip);
26*8975f5c5SAndroid Build Coastguard Worker 
27*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GE(0, minMip);
28*8975f5c5SAndroid Build Coastguard Worker 
29*8975f5c5SAndroid Build Coastguard Worker     for (GLint mip = minMip; mip < maxMip; mip++)
30*8975f5c5SAndroid Build Coastguard Worker     {
31*8975f5c5SAndroid Build Coastguard Worker         EXPECT_TRUE(iter.hasNext());
32*8975f5c5SAndroid Build Coastguard Worker         ImageIndex current   = iter.current();
33*8975f5c5SAndroid Build Coastguard Worker         ImageIndex nextIndex = iter.next();
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(TextureType::_2D, nextIndex.getType());
36*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(TextureTarget::_2D, nextIndex.getTarget());
37*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(mip, nextIndex.getLevelIndex());
38*8975f5c5SAndroid Build Coastguard Worker         EXPECT_FALSE(nextIndex.hasLayer());
39*8975f5c5SAndroid Build Coastguard Worker         EXPECT_FALSE(nextIndex.has3DLayer());
40*8975f5c5SAndroid Build Coastguard Worker 
41*8975f5c5SAndroid Build Coastguard Worker         // Also test current
42*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(current.getType(), nextIndex.getType());
43*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(current.getLevelIndex(), nextIndex.getLevelIndex());
44*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(current.getLayerIndex(), nextIndex.getLayerIndex());
45*8975f5c5SAndroid Build Coastguard Worker     }
46*8975f5c5SAndroid Build Coastguard Worker 
47*8975f5c5SAndroid Build Coastguard Worker     EXPECT_FALSE(iter.hasNext());
48*8975f5c5SAndroid Build Coastguard Worker }
49*8975f5c5SAndroid Build Coastguard Worker 
TEST(ImageIndexTest,IteratorCube)50*8975f5c5SAndroid Build Coastguard Worker TEST(ImageIndexTest, IteratorCube)
51*8975f5c5SAndroid Build Coastguard Worker {
52*8975f5c5SAndroid Build Coastguard Worker     ImageIndexIterator iter = ImageIndexIterator::MakeCube(minMip, maxMip);
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GE(0, minMip);
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker     for (GLint mip = minMip; mip < maxMip; mip++)
57*8975f5c5SAndroid Build Coastguard Worker     {
58*8975f5c5SAndroid Build Coastguard Worker         for (TextureTarget target : AllCubeFaceTextureTargets())
59*8975f5c5SAndroid Build Coastguard Worker         {
60*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(iter.hasNext());
61*8975f5c5SAndroid Build Coastguard Worker             ImageIndex nextIndex = iter.next();
62*8975f5c5SAndroid Build Coastguard Worker 
63*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureType::CubeMap, nextIndex.getType());
64*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(target, nextIndex.getTarget());
65*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(mip, nextIndex.getLevelIndex());
66*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.hasLayer());
67*8975f5c5SAndroid Build Coastguard Worker             EXPECT_FALSE(nextIndex.has3DLayer());
68*8975f5c5SAndroid Build Coastguard Worker         }
69*8975f5c5SAndroid Build Coastguard Worker     }
70*8975f5c5SAndroid Build Coastguard Worker 
71*8975f5c5SAndroid Build Coastguard Worker     EXPECT_FALSE(iter.hasNext());
72*8975f5c5SAndroid Build Coastguard Worker }
73*8975f5c5SAndroid Build Coastguard Worker 
TEST(ImageIndexTest,Iterator3D)74*8975f5c5SAndroid Build Coastguard Worker TEST(ImageIndexTest, Iterator3D)
75*8975f5c5SAndroid Build Coastguard Worker {
76*8975f5c5SAndroid Build Coastguard Worker     ImageIndexIterator iter = ImageIndexIterator::Make3D(minMip, maxMip, minLayer, maxLayer);
77*8975f5c5SAndroid Build Coastguard Worker 
78*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GE(0, minMip);
79*8975f5c5SAndroid Build Coastguard Worker 
80*8975f5c5SAndroid Build Coastguard Worker     for (GLint mip = minMip; mip < maxMip; mip++)
81*8975f5c5SAndroid Build Coastguard Worker     {
82*8975f5c5SAndroid Build Coastguard Worker         for (GLint layer = minLayer; layer < maxLayer; layer++)
83*8975f5c5SAndroid Build Coastguard Worker         {
84*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(iter.hasNext());
85*8975f5c5SAndroid Build Coastguard Worker             ImageIndex nextIndex = iter.next();
86*8975f5c5SAndroid Build Coastguard Worker 
87*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureType::_3D, nextIndex.getType());
88*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureTarget::_3D, nextIndex.getTarget());
89*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(mip, nextIndex.getLevelIndex());
90*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(layer, nextIndex.getLayerIndex());
91*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.hasLayer());
92*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.has3DLayer());
93*8975f5c5SAndroid Build Coastguard Worker         }
94*8975f5c5SAndroid Build Coastguard Worker     }
95*8975f5c5SAndroid Build Coastguard Worker 
96*8975f5c5SAndroid Build Coastguard Worker     EXPECT_FALSE(iter.hasNext());
97*8975f5c5SAndroid Build Coastguard Worker }
98*8975f5c5SAndroid Build Coastguard Worker 
TEST(ImageIndexTest,Iterator2DArray)99*8975f5c5SAndroid Build Coastguard Worker TEST(ImageIndexTest, Iterator2DArray)
100*8975f5c5SAndroid Build Coastguard Worker {
101*8975f5c5SAndroid Build Coastguard Worker     GLsizei layerCounts[] = {1, 3, 5, 2};
102*8975f5c5SAndroid Build Coastguard Worker 
103*8975f5c5SAndroid Build Coastguard Worker     ImageIndexIterator iter = ImageIndexIterator::Make2DArray(minMip, maxMip, layerCounts);
104*8975f5c5SAndroid Build Coastguard Worker 
105*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GE(0, minMip);
106*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
107*8975f5c5SAndroid Build Coastguard Worker 
108*8975f5c5SAndroid Build Coastguard Worker     for (GLint mip = minMip; mip < maxMip; mip++)
109*8975f5c5SAndroid Build Coastguard Worker     {
110*8975f5c5SAndroid Build Coastguard Worker         for (GLint layer = 0; layer < layerCounts[mip]; layer++)
111*8975f5c5SAndroid Build Coastguard Worker         {
112*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(iter.hasNext());
113*8975f5c5SAndroid Build Coastguard Worker             ImageIndex nextIndex = iter.next();
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureType::_2DArray, nextIndex.getType());
116*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureTarget::_2DArray, nextIndex.getTarget());
117*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(mip, nextIndex.getLevelIndex());
118*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(layer, nextIndex.getLayerIndex());
119*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.hasLayer());
120*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.has3DLayer());
121*8975f5c5SAndroid Build Coastguard Worker         }
122*8975f5c5SAndroid Build Coastguard Worker     }
123*8975f5c5SAndroid Build Coastguard Worker 
124*8975f5c5SAndroid Build Coastguard Worker     EXPECT_FALSE(iter.hasNext());
125*8975f5c5SAndroid Build Coastguard Worker }
126*8975f5c5SAndroid Build Coastguard Worker 
TEST(ImageIndexTest,LayerIterator2DArray)127*8975f5c5SAndroid Build Coastguard Worker TEST(ImageIndexTest, LayerIterator2DArray)
128*8975f5c5SAndroid Build Coastguard Worker {
129*8975f5c5SAndroid Build Coastguard Worker     GLsizei layerCounts[] = {1, 3, 5, 2};
130*8975f5c5SAndroid Build Coastguard Worker 
131*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GE(0, minMip);
132*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
133*8975f5c5SAndroid Build Coastguard Worker 
134*8975f5c5SAndroid Build Coastguard Worker     for (GLint mip = minMip; mip < maxMip; mip++)
135*8975f5c5SAndroid Build Coastguard Worker     {
136*8975f5c5SAndroid Build Coastguard Worker         // Make a layer iterator.
137*8975f5c5SAndroid Build Coastguard Worker         ImageIndex mipImageIndex = ImageIndex::Make2DArray(mip, ImageIndex::kEntireLevel);
138*8975f5c5SAndroid Build Coastguard Worker         ImageIndexIterator iter  = mipImageIndex.getLayerIterator(layerCounts[mip]);
139*8975f5c5SAndroid Build Coastguard Worker 
140*8975f5c5SAndroid Build Coastguard Worker         for (GLint layer = 0; layer < layerCounts[mip]; layer++)
141*8975f5c5SAndroid Build Coastguard Worker         {
142*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(iter.hasNext());
143*8975f5c5SAndroid Build Coastguard Worker             ImageIndex nextIndex = iter.next();
144*8975f5c5SAndroid Build Coastguard Worker 
145*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureType::_2DArray, nextIndex.getType());
146*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(TextureTarget::_2DArray, nextIndex.getTarget());
147*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(mip, nextIndex.getLevelIndex());
148*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(layer, nextIndex.getLayerIndex());
149*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.hasLayer());
150*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(nextIndex.has3DLayer());
151*8975f5c5SAndroid Build Coastguard Worker             EXPECT_LT(nextIndex.getLayerIndex(), layerCounts[mip]);
152*8975f5c5SAndroid Build Coastguard Worker         }
153*8975f5c5SAndroid Build Coastguard Worker 
154*8975f5c5SAndroid Build Coastguard Worker         EXPECT_FALSE(iter.hasNext());
155*8975f5c5SAndroid Build Coastguard Worker     }
156*8975f5c5SAndroid Build Coastguard Worker }
157*8975f5c5SAndroid Build Coastguard Worker 
158*8975f5c5SAndroid Build Coastguard Worker }  // namespace
159