blob: 83894df5bc6857100350a73ff82fac3da7ef5ec0 [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);
Geoff Langb52fac02018-02-21 15:45:35 -050036 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_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 {
Geoff Langb52fac02018-02-21 15:45:35 -050057 for (GLenum target = FirstCubeMapTextureTarget; target <= LastCubeMapTextureTarget;
58 target++)
Jamie Madillef4ac5b2014-09-29 10:46:11 -040059 {
60 EXPECT_TRUE(iter.hasNext());
61 ImageIndex nextIndex = iter.next();
62
Geoff Langb52fac02018-02-21 15:45:35 -050063 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), nextIndex.type);
64 EXPECT_EQ(target, nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040065 EXPECT_EQ(mip, nextIndex.mipIndex);
Geoff Langb52fac02018-02-21 15:45:35 -050066 EXPECT_FALSE(nextIndex.hasLayer());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040067 }
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);
Geoff Langb52fac02018-02-21 15:45:35 -050087 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_3D), nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -040088 EXPECT_EQ(mip, nextIndex.mipIndex);
89 EXPECT_EQ(layer, nextIndex.layerIndex);
90 EXPECT_TRUE(nextIndex.hasLayer());
91 }
92 }
Jamie Madill96f4f452016-09-02 16:20:11 -040093
94 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -040095}
96
97TEST(ImageIndexTest, Iterator2DArray)
98{
Jamie Madill1ea53502014-10-06 12:54:10 -040099 GLsizei layerCounts[] = { 1, 3, 5, 2 };
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400100
101 ImageIndexIterator iter = ImageIndexIterator::Make2DArray(minMip, maxMip, layerCounts);
102
Jamie Madill1ea53502014-10-06 12:54:10 -0400103 ASSERT_GE(0, minMip);
104 ASSERT_EQ(ArraySize(layerCounts), static_cast<size_t>(maxMip));
105
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400106 for (GLint mip = minMip; mip < maxMip; mip++)
107 {
108 for (GLint layer = 0; layer < layerCounts[mip]; layer++)
109 {
110 EXPECT_TRUE(iter.hasNext());
111 ImageIndex nextIndex = iter.next();
112
Kenneth Russelle0a2d1c2014-10-06 17:45:59 -0700113 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D_ARRAY), nextIndex.type);
Geoff Langb52fac02018-02-21 15:45:35 -0500114 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D_ARRAY), nextIndex.target);
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400115 EXPECT_EQ(mip, nextIndex.mipIndex);
116 EXPECT_EQ(layer, nextIndex.layerIndex);
117 EXPECT_TRUE(nextIndex.hasLayer());
118 }
119 }
Jamie Madill96f4f452016-09-02 16:20:11 -0400120
121 EXPECT_FALSE(iter.hasNext());
Jamie Madillef4ac5b2014-09-29 10:46:11 -0400122}
123
124} // namespace