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