blob: 2b656e239cb1c8928797d6a10cc2324e1d0505fa [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
Corentin Wallez99d492c2018-02-27 15:17:10 -050035 EXPECT_EQ(TextureType::_2D, nextIndex.type);
36 EXPECT_EQ(TextureTarget::_2D, nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040037 EXPECT_EQ(mip, nextIndex.mipIndex);
38 EXPECT_FALSE(nextIndex.hasLayer());
39
40 // Also test current
41 EXPECT_EQ(current.type, nextIndex.type);
42 EXPECT_EQ(current.mipIndex, nextIndex.mipIndex);
43 EXPECT_EQ(current.layerIndex, nextIndex.layerIndex);
44 }
Jamie Madill96f4f452016-09-02 16:20:11 -040045
46 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040047}
48
49TEST(ImageIndexTest, IteratorCube)
50{
Geoff Langb52fac02018-02-21 15:45:35 -050051 ImageIndexIterator iter = ImageIndexIterator::MakeCube(minMip, maxMip);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040052
Jamie Madill1ea53502014-10-06 12:54:10 -040053 ASSERT_GE(0, minMip);
54
Jamie Madillef4ac5b2014-09-29 10:46:11 -040055 for (GLint mip = minMip; mip < maxMip; mip++)
56 {
Corentin Wallez99d492c2018-02-27 15:17:10 -050057 for (TextureTarget target : AllCubeFaceTextureTargets())
Jamie Madillef4ac5b2014-09-29 10:46:11 -040058 {
59 EXPECT_TRUE(iter.hasNext());
60 ImageIndex nextIndex = iter.next();
61
Corentin Wallez99d492c2018-02-27 15:17:10 -050062 EXPECT_EQ(TextureType::CubeMap, nextIndex.type);
Geoff Langb52fac02018-02-21 15:45:35 -050063 EXPECT_EQ(target, nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040064 EXPECT_EQ(mip, nextIndex.mipIndex);
Geoff Langb52fac02018-02-21 15:45:35 -050065 EXPECT_FALSE(nextIndex.hasLayer());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040066 }
67 }
Jamie Madill96f4f452016-09-02 16:20:11 -040068
69 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040070}
71
72TEST(ImageIndexTest, Iterator3D)
73{
Jamie Madillef4ac5b2014-09-29 10:46:11 -040074 ImageIndexIterator iter = ImageIndexIterator::Make3D(minMip, maxMip, minLayer, maxLayer);
75
Jamie Madill1ea53502014-10-06 12:54:10 -040076 ASSERT_GE(0, minMip);
77
Jamie Madillef4ac5b2014-09-29 10:46:11 -040078 for (GLint mip = minMip; mip < maxMip; mip++)
79 {
80 for (GLint layer = minLayer; layer < maxLayer; layer++)
81 {
82 EXPECT_TRUE(iter.hasNext());
83 ImageIndex nextIndex = iter.next();
84
Corentin Wallez99d492c2018-02-27 15:17:10 -050085 EXPECT_EQ(TextureType::_3D, nextIndex.type);
86 EXPECT_EQ(TextureTarget::_3D, nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040087 EXPECT_EQ(mip, nextIndex.mipIndex);
88 EXPECT_EQ(layer, nextIndex.layerIndex);
89 EXPECT_TRUE(nextIndex.hasLayer());
90 }
91 }
Jamie Madill96f4f452016-09-02 16:20:11 -040092
93 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040094}
95
96TEST(ImageIndexTest, Iterator2DArray)
97{
Jamie Madill1ea53502014-10-06 12:54:10 -040098 GLsizei layerCounts[] = { 1, 3, 5, 2 };
Jamie Madillef4ac5b2014-09-29 10:46:11 -040099
100 ImageIndexIterator iter = ImageIndexIterator::Make2DArray(minMip, maxMip, layerCounts);
101
Jamie Madill1ea53502014-10-06 12:54:10 -0400102 ASSERT_GE(0, minMip);
103 ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
104
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400105 for (GLint mip = minMip; mip < maxMip; mip++)
106 {
107 for (GLint layer = 0; layer < layerCounts[mip]; layer++)
108 {
109 EXPECT_TRUE(iter.hasNext());
110 ImageIndex nextIndex = iter.next();
111
Corentin Wallez99d492c2018-02-27 15:17:10 -0500112 EXPECT_EQ(TextureType::_2DArray, nextIndex.type);
113 EXPECT_EQ(TextureTarget::_2DArray, nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400114 EXPECT_EQ(mip, nextIndex.mipIndex);
115 EXPECT_EQ(layer, nextIndex.layerIndex);
116 EXPECT_TRUE(nextIndex.hasLayer());
117 }
118 }
Jamie Madill96f4f452016-09-02 16:20:11 -0400119
120 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400121}
122
123} // namespace