blob: 9ffb19537f7bb7a59543caa5d9571ace3a7f8152 [file] [log] [blame]
Jamie Madillef4ac5b2014-09-29 10:46:11 -04001//
2// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#include "gmock/gmock.h"
8#include "gtest/gtest.h"
Geoff Lang691e58c2014-12-19 17:03:25 -05009
10#include "common/utilities.h"
Geoff Lang2b5420c2014-11-19 14:20:15 -050011#include "libANGLE/ImageIndex.h"
Jamie Madillef4ac5b2014-09-29 10:46:11 -040012
13using namespace gl;
14
15namespace
16{
17
18static const GLint minMip = 0;
19static const GLint maxMip = 4;
20static const GLint minLayer = 1;
21static const GLint maxLayer = 3;
22
23TEST(ImageIndexTest, Iterator2D)
24{
25 ImageIndexIterator iter = ImageIndexIterator::Make2D(minMip, maxMip);
26
Jamie Madill1ea53502014-10-06 12:54:10 -040027 ASSERT_GE(0, minMip);
28
Jamie Madillef4ac5b2014-09-29 10:46:11 -040029 for (GLint mip = minMip; mip < maxMip; mip++)
30 {
31 EXPECT_TRUE(iter.hasNext());
32 ImageIndex current = iter.current();
33 ImageIndex nextIndex = iter.next();
34
Jamie Madillcc129372018-04-12 09:13:18 -040035 EXPECT_EQ(TextureType::_2D, nextIndex.getType());
36 EXPECT_EQ(TextureTarget::_2D, nextIndex.getTarget());
37 EXPECT_EQ(mip, nextIndex.getLevelIndex());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040038 EXPECT_FALSE(nextIndex.hasLayer());
Jamie Madillcc129372018-04-12 09:13:18 -040039 EXPECT_FALSE(nextIndex.has3DLayer());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040040
41 // Also test current
Jamie Madillcc129372018-04-12 09:13:18 -040042 EXPECT_EQ(current.getType(), nextIndex.getType());
43 EXPECT_EQ(current.getLevelIndex(), nextIndex.getLevelIndex());
44 EXPECT_EQ(current.getLayerIndex(), nextIndex.getLayerIndex());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040045 }
Jamie Madill96f4f452016-09-02 16:20:11 -040046
47 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040048}
49
50TEST(ImageIndexTest, IteratorCube)
51{
Geoff Langb52fac02018-02-21 15:45:35 -050052 ImageIndexIterator iter = ImageIndexIterator::MakeCube(minMip, maxMip);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040053
Jamie Madill1ea53502014-10-06 12:54:10 -040054 ASSERT_GE(0, minMip);
55
Jamie Madillef4ac5b2014-09-29 10:46:11 -040056 for (GLint mip = minMip; mip < maxMip; mip++)
57 {
Corentin Wallez99d492c2018-02-27 15:17:10 -050058 for (TextureTarget target : AllCubeFaceTextureTargets())
Jamie Madillef4ac5b2014-09-29 10:46:11 -040059 {
60 EXPECT_TRUE(iter.hasNext());
61 ImageIndex nextIndex = iter.next();
62
Jamie Madillcc129372018-04-12 09:13:18 -040063 EXPECT_EQ(TextureType::CubeMap, nextIndex.getType());
64 EXPECT_EQ(target, nextIndex.getTarget());
65 EXPECT_EQ(mip, nextIndex.getLevelIndex());
66 EXPECT_TRUE(nextIndex.hasLayer());
67 EXPECT_FALSE(nextIndex.has3DLayer());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040068 }
69 }
Jamie Madill96f4f452016-09-02 16:20:11 -040070
71 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040072}
73
74TEST(ImageIndexTest, Iterator3D)
75{
Jamie Madillef4ac5b2014-09-29 10:46:11 -040076 ImageIndexIterator iter = ImageIndexIterator::Make3D(minMip, maxMip, minLayer, maxLayer);
77
Jamie Madill1ea53502014-10-06 12:54:10 -040078 ASSERT_GE(0, minMip);
79
Jamie Madillef4ac5b2014-09-29 10:46:11 -040080 for (GLint mip = minMip; mip < maxMip; mip++)
81 {
82 for (GLint layer = minLayer; layer < maxLayer; layer++)
83 {
84 EXPECT_TRUE(iter.hasNext());
85 ImageIndex nextIndex = iter.next();
86
Jamie Madillcc129372018-04-12 09:13:18 -040087 EXPECT_EQ(TextureType::_3D, nextIndex.getType());
88 EXPECT_EQ(TextureTarget::_3D, nextIndex.getTarget());
89 EXPECT_EQ(mip, nextIndex.getLevelIndex());
90 EXPECT_EQ(layer, nextIndex.getLayerIndex());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040091 EXPECT_TRUE(nextIndex.hasLayer());
Jamie Madillcc129372018-04-12 09:13:18 -040092 EXPECT_TRUE(nextIndex.has3DLayer());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040093 }
94 }
Jamie Madill96f4f452016-09-02 16:20:11 -040095
96 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040097}
98
99TEST(ImageIndexTest, Iterator2DArray)
100{
Jamie Madill1ea53502014-10-06 12:54:10 -0400101 GLsizei layerCounts[] = { 1, 3, 5, 2 };
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400102
103 ImageIndexIterator iter = ImageIndexIterator::Make2DArray(minMip, maxMip, layerCounts);
104
Jamie Madill1ea53502014-10-06 12:54:10 -0400105 ASSERT_GE(0, minMip);
106 ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
107
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400108 for (GLint mip = minMip; mip < maxMip; mip++)
109 {
110 for (GLint layer = 0; layer < layerCounts[mip]; layer++)
111 {
112 EXPECT_TRUE(iter.hasNext());
113 ImageIndex nextIndex = iter.next();
114
Jamie Madillcc129372018-04-12 09:13:18 -0400115 EXPECT_EQ(TextureType::_2DArray, nextIndex.getType());
116 EXPECT_EQ(TextureTarget::_2DArray, nextIndex.getTarget());
117 EXPECT_EQ(mip, nextIndex.getLevelIndex());
118 EXPECT_EQ(layer, nextIndex.getLayerIndex());
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400119 EXPECT_TRUE(nextIndex.hasLayer());
Jamie Madillcc129372018-04-12 09:13:18 -0400120 EXPECT_TRUE(nextIndex.has3DLayer());
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400121 }
122 }
Jamie Madill96f4f452016-09-02 16:20:11 -0400123
124 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400125}
126
Jamie Madillcc129372018-04-12 09:13:18 -0400127TEST(ImageIndexTest, LayerIterator2DArray)
128{
129 GLsizei layerCounts[] = {1, 3, 5, 2};
130
131 ASSERT_GE(0, minMip);
132 ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
133
134 for (GLint mip = minMip; mip < maxMip; mip++)
135 {
136 // Make a layer iterator.
137 ImageIndex mipImageIndex = ImageIndex::Make2DArray(mip, ImageIndex::kEntireLevel);
138 ImageIndexIterator iter = mipImageIndex.getLayerIterator(layerCounts[mip]);
139
140 for (GLint layer = 0; layer < layerCounts[mip]; layer++)
141 {
142 EXPECT_TRUE(iter.hasNext());
143 ImageIndex nextIndex = iter.next();
144
145 EXPECT_EQ(TextureType::_2DArray, nextIndex.getType());
146 EXPECT_EQ(TextureTarget::_2DArray, nextIndex.getTarget());
147 EXPECT_EQ(mip, nextIndex.getLevelIndex());
148 EXPECT_EQ(layer, nextIndex.getLayerIndex());
149 EXPECT_TRUE(nextIndex.hasLayer());
150 EXPECT_TRUE(nextIndex.has3DLayer());
151 EXPECT_LT(nextIndex.getLayerIndex(), layerCounts[mip]);
152 }
153
154 EXPECT_FALSE(iter.hasNext());
155 }
156}
157
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400158} // namespace