blob: 2dc0b2ab7f825b360e15321c690f6b68fb84076f [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 }
44}
45
46TEST(ImageIndexTest, IteratorCube)
47{
Jamie Madillef4ac5b2014-09-29 10:46:11 -040048 ImageIndexIterator iter = ImageIndexIterator::MakeCube(0, 4);
49
Jamie Madill1ea53502014-10-06 12:54:10 -040050 ASSERT_GE(0, minMip);
51
Jamie Madillef4ac5b2014-09-29 10:46:11 -040052 for (GLint mip = minMip; mip < maxMip; mip++)
53 {
54 for (GLint layer = 0; layer < 6; layer++)
55 {
56 EXPECT_TRUE(iter.hasNext());
57 ImageIndex nextIndex = iter.next();
58
Geoff Lang691e58c2014-12-19 17:03:25 -050059 GLenum cubeTarget = LayerIndexToCubeMapTextureTarget(layer);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040060
61 EXPECT_EQ(cubeTarget, nextIndex.type);
62 EXPECT_EQ(mip, nextIndex.mipIndex);
63 EXPECT_EQ(layer, nextIndex.layerIndex);
64 EXPECT_TRUE(nextIndex.hasLayer());
65 }
66 }
67}
68
69TEST(ImageIndexTest, Iterator3D)
70{
Jamie Madillef4ac5b2014-09-29 10:46:11 -040071 ImageIndexIterator iter = ImageIndexIterator::Make3D(minMip, maxMip, minLayer, maxLayer);
72
Jamie Madill1ea53502014-10-06 12:54:10 -040073 ASSERT_GE(0, minMip);
74
Jamie Madillef4ac5b2014-09-29 10:46:11 -040075 for (GLint mip = minMip; mip < maxMip; mip++)
76 {
77 for (GLint layer = minLayer; layer < maxLayer; layer++)
78 {
79 EXPECT_TRUE(iter.hasNext());
80 ImageIndex nextIndex = iter.next();
81
Kenneth Russelle0a2d1c2014-10-06 17:45:59 -070082 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_3D), nextIndex.type);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040083 EXPECT_EQ(mip, nextIndex.mipIndex);
84 EXPECT_EQ(layer, nextIndex.layerIndex);
85 EXPECT_TRUE(nextIndex.hasLayer());
86 }
87 }
88}
89
90TEST(ImageIndexTest, Iterator2DArray)
91{
Jamie Madill1ea53502014-10-06 12:54:10 -040092 GLsizei layerCounts[] = { 1, 3, 5, 2 };
Jamie Madillef4ac5b2014-09-29 10:46:11 -040093
94 ImageIndexIterator iter = ImageIndexIterator::Make2DArray(minMip, maxMip, layerCounts);
95
Jamie Madill1ea53502014-10-06 12:54:10 -040096 ASSERT_GE(0, minMip);
97 ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
98
Jamie Madillef4ac5b2014-09-29 10:46:11 -040099 for (GLint mip = minMip; mip < maxMip; mip++)
100 {
101 for (GLint layer = 0; layer < layerCounts[mip]; layer++)
102 {
103 EXPECT_TRUE(iter.hasNext());
104 ImageIndex nextIndex = iter.next();
105
Kenneth Russelle0a2d1c2014-10-06 17:45:59 -0700106 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D_ARRAY), nextIndex.type);
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400107 EXPECT_EQ(mip, nextIndex.mipIndex);
108 EXPECT_EQ(layer, nextIndex.layerIndex);
109 EXPECT_TRUE(nextIndex.hasLayer());
110 }
111 }
112}
113
114} // namespace