blob: 2f97e8eba95e7910d42252fe9d56c7512649266d [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
Kenneth Russelle0a2d1c2014-10-06 17:45:59 -070035 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), nextIndex.type);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040036 EXPECT_EQ(mip, nextIndex.mipIndex);
37 EXPECT_FALSE(nextIndex.hasLayer());
38
39 // Also test current
40 EXPECT_EQ(current.type, nextIndex.type);
41 EXPECT_EQ(current.mipIndex, nextIndex.mipIndex);
42 EXPECT_EQ(current.layerIndex, nextIndex.layerIndex);
43 }
Jamie Madill96f4f452016-09-02 16:20:11 -040044
45 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040046}
47
48TEST(ImageIndexTest, IteratorCube)
49{
Jamie Madillef4ac5b2014-09-29 10:46:11 -040050 ImageIndexIterator iter = ImageIndexIterator::MakeCube(0, 4);
51
Jamie Madill1ea53502014-10-06 12:54:10 -040052 ASSERT_GE(0, minMip);
53
Jamie Madillef4ac5b2014-09-29 10:46:11 -040054 for (GLint mip = minMip; mip < maxMip; mip++)
55 {
56 for (GLint layer = 0; layer < 6; layer++)
57 {
58 EXPECT_TRUE(iter.hasNext());
59 ImageIndex nextIndex = iter.next();
60
Geoff Lang691e58c2014-12-19 17:03:25 -050061 GLenum cubeTarget = LayerIndexToCubeMapTextureTarget(layer);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040062
63 EXPECT_EQ(cubeTarget, nextIndex.type);
64 EXPECT_EQ(mip, nextIndex.mipIndex);
65 EXPECT_EQ(layer, nextIndex.layerIndex);
66 EXPECT_TRUE(nextIndex.hasLayer());
67 }
68 }
Jamie Madill96f4f452016-09-02 16:20:11 -040069
70 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040071}
72
73TEST(ImageIndexTest, Iterator3D)
74{
Jamie Madillef4ac5b2014-09-29 10:46:11 -040075 ImageIndexIterator iter = ImageIndexIterator::Make3D(minMip, maxMip, minLayer, maxLayer);
76
Jamie Madill1ea53502014-10-06 12:54:10 -040077 ASSERT_GE(0, minMip);
78
Jamie Madillef4ac5b2014-09-29 10:46:11 -040079 for (GLint mip = minMip; mip < maxMip; mip++)
80 {
81 for (GLint layer = minLayer; layer < maxLayer; layer++)
82 {
83 EXPECT_TRUE(iter.hasNext());
84 ImageIndex nextIndex = iter.next();
85
Kenneth Russelle0a2d1c2014-10-06 17:45:59 -070086 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_3D), nextIndex.type);
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
Kenneth Russelle0a2d1c2014-10-06 17:45:59 -0700112 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D_ARRAY), nextIndex.type);
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400113 EXPECT_EQ(mip, nextIndex.mipIndex);
114 EXPECT_EQ(layer, nextIndex.layerIndex);
115 EXPECT_TRUE(nextIndex.hasLayer());
116 }
117 }
Jamie Madill96f4f452016-09-02 16:20:11 -0400118
119 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400120}
121
122} // namespace