xref: /aosp_15_r20/external/angle/src/tests/gl_tests/TextureRectangleTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2017 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // TextureRectangleTest: Tests of GL_ANGLE_texture_rectangle
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
10*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker namespace
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker 
17*8975f5c5SAndroid Build Coastguard Worker class TextureRectangleTest : public ANGLETest<>
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker   protected:
TextureRectangleTest()20*8975f5c5SAndroid Build Coastguard Worker     TextureRectangleTest()
21*8975f5c5SAndroid Build Coastguard Worker     {
22*8975f5c5SAndroid Build Coastguard Worker         setWindowWidth(64);
23*8975f5c5SAndroid Build Coastguard Worker         setWindowHeight(64);
24*8975f5c5SAndroid Build Coastguard Worker         setConfigRedBits(8);
25*8975f5c5SAndroid Build Coastguard Worker         setConfigGreenBits(8);
26*8975f5c5SAndroid Build Coastguard Worker         setConfigBlueBits(8);
27*8975f5c5SAndroid Build Coastguard Worker         setConfigAlphaBits(8);
28*8975f5c5SAndroid Build Coastguard Worker     }
29*8975f5c5SAndroid Build Coastguard Worker 
checkExtensionSupported() const30*8975f5c5SAndroid Build Coastguard Worker     bool checkExtensionSupported() const
31*8975f5c5SAndroid Build Coastguard Worker     {
32*8975f5c5SAndroid Build Coastguard Worker         if (!IsGLExtensionEnabled("GL_ANGLE_texture_rectangle"))
33*8975f5c5SAndroid Build Coastguard Worker         {
34*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Test skipped because GL_ANGLE_texture_rectangle is not available."
35*8975f5c5SAndroid Build Coastguard Worker                       << std::endl;
36*8975f5c5SAndroid Build Coastguard Worker             return false;
37*8975f5c5SAndroid Build Coastguard Worker         }
38*8975f5c5SAndroid Build Coastguard Worker         return true;
39*8975f5c5SAndroid Build Coastguard Worker     }
40*8975f5c5SAndroid Build Coastguard Worker };
41*8975f5c5SAndroid Build Coastguard Worker 
42*8975f5c5SAndroid Build Coastguard Worker class TextureRectangleTestES3 : public TextureRectangleTest
43*8975f5c5SAndroid Build Coastguard Worker {};
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker class TextureRectangleTestES31 : public TextureRectangleTest
46*8975f5c5SAndroid Build Coastguard Worker {};
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker // Test using TexImage2D to define a rectangle texture
TEST_P(TextureRectangleTest,TexImage2D)49*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, TexImage2D)
50*8975f5c5SAndroid Build Coastguard Worker {
51*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
52*8975f5c5SAndroid Build Coastguard Worker 
53*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42264188
54*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsLinux() && IsNVIDIA() && IsOpenGL());
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
57*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker     // Defining level 0 is allowed
60*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
61*8975f5c5SAndroid Build Coastguard Worker                  nullptr);
62*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
63*8975f5c5SAndroid Build Coastguard Worker 
64*8975f5c5SAndroid Build Coastguard Worker     // Defining level other than 0 is not allowed
65*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
66*8975f5c5SAndroid Build Coastguard Worker                  nullptr);
67*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker     GLint maxSize = 0;
70*8975f5c5SAndroid Build Coastguard Worker     glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE, &maxSize);
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker     // Defining a texture of the max size is allowed
73*8975f5c5SAndroid Build Coastguard Worker     {
74*8975f5c5SAndroid Build Coastguard Worker         ScopedIgnorePlatformMessages ignore;
75*8975f5c5SAndroid Build Coastguard Worker 
76*8975f5c5SAndroid Build Coastguard Worker         glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, maxSize, maxSize, 0, GL_RGBA,
77*8975f5c5SAndroid Build Coastguard Worker                      GL_UNSIGNED_BYTE, nullptr);
78*8975f5c5SAndroid Build Coastguard Worker         GLenum error = glGetError();
79*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(error == GL_NO_ERROR || error == GL_OUT_OF_MEMORY);
80*8975f5c5SAndroid Build Coastguard Worker     }
81*8975f5c5SAndroid Build Coastguard Worker 
82*8975f5c5SAndroid Build Coastguard Worker     // Defining a texture of the max size is allowed
83*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, maxSize + 1, maxSize, 0, GL_RGBA,
84*8975f5c5SAndroid Build Coastguard Worker                  GL_UNSIGNED_BYTE, nullptr);
85*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
86*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, maxSize, maxSize + 1, 0, GL_RGBA,
87*8975f5c5SAndroid Build Coastguard Worker                  GL_UNSIGNED_BYTE, nullptr);
88*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
89*8975f5c5SAndroid Build Coastguard Worker }
90*8975f5c5SAndroid Build Coastguard Worker 
91*8975f5c5SAndroid Build Coastguard Worker // Test using CompressedTexImage2D cannot be used on a retangle texture
TEST_P(TextureRectangleTest,CompressedTexImage2DDisallowed)92*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, CompressedTexImage2DDisallowed)
93*8975f5c5SAndroid Build Coastguard Worker {
94*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
95*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_compression_dxt1"));
96*8975f5c5SAndroid Build Coastguard Worker 
97*8975f5c5SAndroid Build Coastguard Worker     const char data[128] = {0};
98*8975f5c5SAndroid Build Coastguard Worker 
99*8975f5c5SAndroid Build Coastguard Worker     // Control case: 2D texture
100*8975f5c5SAndroid Build Coastguard Worker     {
101*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
102*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_2D, tex);
103*8975f5c5SAndroid Build Coastguard Worker         glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 16, 16, 0, 128,
104*8975f5c5SAndroid Build Coastguard Worker                                data);
105*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
106*8975f5c5SAndroid Build Coastguard Worker     }
107*8975f5c5SAndroid Build Coastguard Worker 
108*8975f5c5SAndroid Build Coastguard Worker     // Rectangle textures cannot be compressed
109*8975f5c5SAndroid Build Coastguard Worker     {
110*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
111*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
112*8975f5c5SAndroid Build Coastguard Worker         glCompressedTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 16,
113*8975f5c5SAndroid Build Coastguard Worker                                16, 0, 128, data);
114*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_ERROR(GL_INVALID_ENUM);
115*8975f5c5SAndroid Build Coastguard Worker     }
116*8975f5c5SAndroid Build Coastguard Worker }
117*8975f5c5SAndroid Build Coastguard Worker 
118*8975f5c5SAndroid Build Coastguard Worker // Test using TexStorage2D to define a rectangle texture
TEST_P(TextureRectangleTest,TexStorage2D)119*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, TexStorage2D)
120*8975f5c5SAndroid Build Coastguard Worker {
121*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
122*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 &&
123*8975f5c5SAndroid Build Coastguard Worker                        !IsGLExtensionEnabled("GL_EXT_texture_storage"));
124*8975f5c5SAndroid Build Coastguard Worker 
125*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42264188
126*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsLinux() && IsNVIDIA() && IsOpenGL());
127*8975f5c5SAndroid Build Coastguard Worker 
128*8975f5c5SAndroid Build Coastguard Worker     bool useES3       = getClientMajorVersion() >= 3;
129*8975f5c5SAndroid Build Coastguard Worker     auto TexStorage2D = [useES3](GLenum target, GLint levels, GLenum format, GLint width,
130*8975f5c5SAndroid Build Coastguard Worker                                  GLint height) {
131*8975f5c5SAndroid Build Coastguard Worker         if (useES3)
132*8975f5c5SAndroid Build Coastguard Worker         {
133*8975f5c5SAndroid Build Coastguard Worker             glTexStorage2D(target, levels, format, width, height);
134*8975f5c5SAndroid Build Coastguard Worker         }
135*8975f5c5SAndroid Build Coastguard Worker         else
136*8975f5c5SAndroid Build Coastguard Worker         {
137*8975f5c5SAndroid Build Coastguard Worker             glTexStorage2DEXT(target, levels, format, width, height);
138*8975f5c5SAndroid Build Coastguard Worker         }
139*8975f5c5SAndroid Build Coastguard Worker     };
140*8975f5c5SAndroid Build Coastguard Worker 
141*8975f5c5SAndroid Build Coastguard Worker     // Defining one level is allowed
142*8975f5c5SAndroid Build Coastguard Worker     {
143*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
144*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
145*8975f5c5SAndroid Build Coastguard Worker         TexStorage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_RGBA8, 16, 16);
146*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
147*8975f5c5SAndroid Build Coastguard Worker     }
148*8975f5c5SAndroid Build Coastguard Worker 
149*8975f5c5SAndroid Build Coastguard Worker     // Having more than one level is not allowed
150*8975f5c5SAndroid Build Coastguard Worker     {
151*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
152*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
153*8975f5c5SAndroid Build Coastguard Worker         // Use 5 levels because the EXT_texture_storage extension requires a mip chain all the way
154*8975f5c5SAndroid Build Coastguard Worker         // to a 1x1 mip.
155*8975f5c5SAndroid Build Coastguard Worker         TexStorage2D(GL_TEXTURE_RECTANGLE_ANGLE, 5, GL_RGBA8, 16, 16);
156*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_ERROR(GL_INVALID_VALUE);
157*8975f5c5SAndroid Build Coastguard Worker     }
158*8975f5c5SAndroid Build Coastguard Worker 
159*8975f5c5SAndroid Build Coastguard Worker     GLint maxSize = 0;
160*8975f5c5SAndroid Build Coastguard Worker     glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE, &maxSize);
161*8975f5c5SAndroid Build Coastguard Worker 
162*8975f5c5SAndroid Build Coastguard Worker     // Defining a texture of the max size is allowed but still allow for OOM
163*8975f5c5SAndroid Build Coastguard Worker     {
164*8975f5c5SAndroid Build Coastguard Worker         ScopedIgnorePlatformMessages ignore;
165*8975f5c5SAndroid Build Coastguard Worker 
166*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
167*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
168*8975f5c5SAndroid Build Coastguard Worker         TexStorage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_RGBA8, maxSize, maxSize);
169*8975f5c5SAndroid Build Coastguard Worker         GLenum error = glGetError();
170*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(error == GL_NO_ERROR || error == GL_OUT_OF_MEMORY);
171*8975f5c5SAndroid Build Coastguard Worker     }
172*8975f5c5SAndroid Build Coastguard Worker 
173*8975f5c5SAndroid Build Coastguard Worker     // Defining a texture of the max size is disallowed
174*8975f5c5SAndroid Build Coastguard Worker     {
175*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
176*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
177*8975f5c5SAndroid Build Coastguard Worker         TexStorage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_RGBA8, maxSize + 1, maxSize);
178*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_ERROR(GL_INVALID_VALUE);
179*8975f5c5SAndroid Build Coastguard Worker         TexStorage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_RGBA8, maxSize, maxSize + 1);
180*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_ERROR(GL_INVALID_VALUE);
181*8975f5c5SAndroid Build Coastguard Worker     }
182*8975f5c5SAndroid Build Coastguard Worker 
183*8975f5c5SAndroid Build Coastguard Worker     // Compressed formats are disallowed
184*8975f5c5SAndroid Build Coastguard Worker     if (IsGLExtensionEnabled("GL_EXT_texture_compression_dxt1"))
185*8975f5c5SAndroid Build Coastguard Worker     {
186*8975f5c5SAndroid Build Coastguard Worker         GLTexture tex;
187*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
188*8975f5c5SAndroid Build Coastguard Worker         TexStorage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 16, 16);
189*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_ERROR(GL_INVALID_ENUM);
190*8975f5c5SAndroid Build Coastguard Worker     }
191*8975f5c5SAndroid Build Coastguard Worker }
192*8975f5c5SAndroid Build Coastguard Worker 
193*8975f5c5SAndroid Build Coastguard Worker // Test validation of disallowed texture parameters
TEST_P(TextureRectangleTest,TexParameterRestriction)194*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, TexParameterRestriction)
195*8975f5c5SAndroid Build Coastguard Worker {
196*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
197*8975f5c5SAndroid Build Coastguard Worker 
198*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
199*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
200*8975f5c5SAndroid Build Coastguard Worker 
201*8975f5c5SAndroid Build Coastguard Worker     // Only wrap mode CLAMP_TO_EDGE is supported
202*8975f5c5SAndroid Build Coastguard Worker     // Wrap S
203*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
204*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
205*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_S, GL_REPEAT);
206*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
207*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
208*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
209*8975f5c5SAndroid Build Coastguard Worker 
210*8975f5c5SAndroid Build Coastguard Worker     // Wrap T
211*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
212*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
213*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_T, GL_REPEAT);
214*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
215*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
216*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
217*8975f5c5SAndroid Build Coastguard Worker 
218*8975f5c5SAndroid Build Coastguard Worker     // Min filter has to be nearest or linear
219*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
220*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
221*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
222*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
223*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
224*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
225*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
226*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
227*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
228*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
229*8975f5c5SAndroid Build Coastguard Worker     glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
230*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_ENUM);
231*8975f5c5SAndroid Build Coastguard Worker 
232*8975f5c5SAndroid Build Coastguard Worker     // Base level has to be 0
233*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3)
234*8975f5c5SAndroid Build Coastguard Worker     {
235*8975f5c5SAndroid Build Coastguard Worker         glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_BASE_LEVEL, 0);
236*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
237*8975f5c5SAndroid Build Coastguard Worker         glTexParameteri(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_BASE_LEVEL, 1);
238*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_ERROR(GL_INVALID_OPERATION);
239*8975f5c5SAndroid Build Coastguard Worker     }
240*8975f5c5SAndroid Build Coastguard Worker }
241*8975f5c5SAndroid Build Coastguard Worker 
242*8975f5c5SAndroid Build Coastguard Worker // Test validation of 'level' in GetTexParameter
TEST_P(TextureRectangleTestES31,GetTexLevelParameter)243*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTestES31, GetTexLevelParameter)
244*8975f5c5SAndroid Build Coastguard Worker {
245*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
246*8975f5c5SAndroid Build Coastguard Worker 
247*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
248*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
249*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
250*8975f5c5SAndroid Build Coastguard Worker                  nullptr);
251*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
252*8975f5c5SAndroid Build Coastguard Worker 
253*8975f5c5SAndroid Build Coastguard Worker     GLint param;
254*8975f5c5SAndroid Build Coastguard Worker     // Control case: level 0 is ok.
255*8975f5c5SAndroid Build Coastguard Worker     glGetTexLevelParameteriv(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_TEXTURE_INTERNAL_FORMAT, &param);
256*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
257*8975f5c5SAndroid Build Coastguard Worker 
258*8975f5c5SAndroid Build Coastguard Worker     // Level 1 is not ok.
259*8975f5c5SAndroid Build Coastguard Worker     glGetTexLevelParameteriv(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_TEXTURE_INTERNAL_FORMAT, &param);
260*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
261*8975f5c5SAndroid Build Coastguard Worker }
262*8975f5c5SAndroid Build Coastguard Worker 
263*8975f5c5SAndroid Build Coastguard Worker // Test validation of "level" in FramebufferTexture2D
TEST_P(TextureRectangleTest,FramebufferTexture2DLevel)264*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, FramebufferTexture2DLevel)
265*8975f5c5SAndroid Build Coastguard Worker {
266*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
267*8975f5c5SAndroid Build Coastguard Worker 
268*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
269*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
270*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
271*8975f5c5SAndroid Build Coastguard Worker                  nullptr);
272*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
273*8975f5c5SAndroid Build Coastguard Worker 
274*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
275*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo);
276*8975f5c5SAndroid Build Coastguard Worker 
277*8975f5c5SAndroid Build Coastguard Worker     // Using level 0 of a rectangle texture is valid.
278*8975f5c5SAndroid Build Coastguard Worker     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ANGLE, tex,
279*8975f5c5SAndroid Build Coastguard Worker                            0);
280*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
281*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
282*8975f5c5SAndroid Build Coastguard Worker 
283*8975f5c5SAndroid Build Coastguard Worker     // Setting level != 0 is invalid
284*8975f5c5SAndroid Build Coastguard Worker     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ANGLE, tex,
285*8975f5c5SAndroid Build Coastguard Worker                            1);
286*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
287*8975f5c5SAndroid Build Coastguard Worker }
288*8975f5c5SAndroid Build Coastguard Worker 
289*8975f5c5SAndroid Build Coastguard Worker // Test sampling from a rectangle texture using texture2DRect in ESSL1
TEST_P(TextureRectangleTest,SamplingFromRectangleESSL1)290*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, SamplingFromRectangleESSL1)
291*8975f5c5SAndroid Build Coastguard Worker {
292*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
293*8975f5c5SAndroid Build Coastguard Worker 
294*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
295*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
296*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
297*8975f5c5SAndroid Build Coastguard Worker                  &GLColor::green);
298*8975f5c5SAndroid Build Coastguard Worker 
299*8975f5c5SAndroid Build Coastguard Worker     constexpr char kFS[] =
300*8975f5c5SAndroid Build Coastguard Worker         "#extension GL_ARB_texture_rectangle : require\n"
301*8975f5c5SAndroid Build Coastguard Worker         "precision mediump float;\n"
302*8975f5c5SAndroid Build Coastguard Worker         "uniform sampler2DRect tex;\n"
303*8975f5c5SAndroid Build Coastguard Worker         "void main()\n"
304*8975f5c5SAndroid Build Coastguard Worker         "{\n"
305*8975f5c5SAndroid Build Coastguard Worker         "    gl_FragColor = texture2DRect(tex, vec2(0, 0));\n"
306*8975f5c5SAndroid Build Coastguard Worker         "}\n";
307*8975f5c5SAndroid Build Coastguard Worker 
308*8975f5c5SAndroid Build Coastguard Worker     ANGLE_GL_PROGRAM(program, essl1_shaders::vs::Simple(), kFS);
309*8975f5c5SAndroid Build Coastguard Worker     glUseProgram(program);
310*8975f5c5SAndroid Build Coastguard Worker 
311*8975f5c5SAndroid Build Coastguard Worker     GLint location = glGetUniformLocation(program, "tex");
312*8975f5c5SAndroid Build Coastguard Worker     ASSERT_NE(-1, location);
313*8975f5c5SAndroid Build Coastguard Worker     glUniform1i(location, 0);
314*8975f5c5SAndroid Build Coastguard Worker 
315*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0.0, 0.0, 0.0, 0.0);
316*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
317*8975f5c5SAndroid Build Coastguard Worker     drawQuad(program, essl1_shaders::PositionAttrib(), 0.5f, 1.0f, false);
318*8975f5c5SAndroid Build Coastguard Worker     EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
319*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
320*8975f5c5SAndroid Build Coastguard Worker }
321*8975f5c5SAndroid Build Coastguard Worker 
322*8975f5c5SAndroid Build Coastguard Worker // Test sampling from a rectangle texture using the texture overload in ESSL3
TEST_P(TextureRectangleTestES3,SamplingFromRectangleESSL3)323*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTestES3, SamplingFromRectangleESSL3)
324*8975f5c5SAndroid Build Coastguard Worker {
325*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
326*8975f5c5SAndroid Build Coastguard Worker 
327*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
328*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
329*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
330*8975f5c5SAndroid Build Coastguard Worker                  &GLColor::green);
331*8975f5c5SAndroid Build Coastguard Worker 
332*8975f5c5SAndroid Build Coastguard Worker     constexpr char kFS[] =
333*8975f5c5SAndroid Build Coastguard Worker         "#version 300 es\n"
334*8975f5c5SAndroid Build Coastguard Worker         "#extension GL_ARB_texture_rectangle : require\n"
335*8975f5c5SAndroid Build Coastguard Worker         "precision mediump float;\n"
336*8975f5c5SAndroid Build Coastguard Worker         "uniform sampler2DRect tex;\n"
337*8975f5c5SAndroid Build Coastguard Worker         "out vec4 fragColor;\n"
338*8975f5c5SAndroid Build Coastguard Worker         "void main()\n"
339*8975f5c5SAndroid Build Coastguard Worker         "{\n"
340*8975f5c5SAndroid Build Coastguard Worker         "    fragColor = texture(tex, vec2(0, 0));\n"
341*8975f5c5SAndroid Build Coastguard Worker         "}\n";
342*8975f5c5SAndroid Build Coastguard Worker 
343*8975f5c5SAndroid Build Coastguard Worker     ANGLE_GL_PROGRAM(program, essl3_shaders::vs::Simple(), kFS);
344*8975f5c5SAndroid Build Coastguard Worker     glUseProgram(program);
345*8975f5c5SAndroid Build Coastguard Worker 
346*8975f5c5SAndroid Build Coastguard Worker     GLint location = glGetUniformLocation(program, "tex");
347*8975f5c5SAndroid Build Coastguard Worker     ASSERT_NE(-1, location);
348*8975f5c5SAndroid Build Coastguard Worker     glUniform1i(location, 0);
349*8975f5c5SAndroid Build Coastguard Worker 
350*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0.0, 0.0, 0.0, 0.0);
351*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
352*8975f5c5SAndroid Build Coastguard Worker     drawQuad(program, essl3_shaders::PositionAttrib(), 0.5f, 1.0f, false);
353*8975f5c5SAndroid Build Coastguard Worker     EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
354*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
355*8975f5c5SAndroid Build Coastguard Worker }
356*8975f5c5SAndroid Build Coastguard Worker 
357*8975f5c5SAndroid Build Coastguard Worker // Test attaching a rectangle texture and rendering to it.
TEST_P(TextureRectangleTest,RenderToRectangle)358*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, RenderToRectangle)
359*8975f5c5SAndroid Build Coastguard Worker {
360*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
361*8975f5c5SAndroid Build Coastguard Worker 
362*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
363*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
364*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
365*8975f5c5SAndroid Build Coastguard Worker                  &GLColor::black);
366*8975f5c5SAndroid Build Coastguard Worker 
367*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
368*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo);
369*8975f5c5SAndroid Build Coastguard Worker     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ANGLE, tex,
370*8975f5c5SAndroid Build Coastguard Worker                            0);
371*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
372*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
373*8975f5c5SAndroid Build Coastguard Worker 
374*8975f5c5SAndroid Build Coastguard Worker     // Clearing a texture is just as good as checking we can render to it, right?
375*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0.0, 1.0, 0.0, 1.0);
376*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
377*8975f5c5SAndroid Build Coastguard Worker     EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
378*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
379*8975f5c5SAndroid Build Coastguard Worker }
380*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(TextureRectangleTest,DefaultSamplerParameters)381*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTest, DefaultSamplerParameters)
382*8975f5c5SAndroid Build Coastguard Worker {
383*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
384*8975f5c5SAndroid Build Coastguard Worker 
385*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
386*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
387*8975f5c5SAndroid Build Coastguard Worker 
388*8975f5c5SAndroid Build Coastguard Worker     GLint minFilter = 0;
389*8975f5c5SAndroid Build Coastguard Worker     glGetTexParameteriv(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_MIN_FILTER, &minFilter);
390*8975f5c5SAndroid Build Coastguard Worker     EXPECT_EQ(GL_LINEAR, minFilter);
391*8975f5c5SAndroid Build Coastguard Worker 
392*8975f5c5SAndroid Build Coastguard Worker     GLint wrapS = 0;
393*8975f5c5SAndroid Build Coastguard Worker     glGetTexParameteriv(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_S, &wrapS);
394*8975f5c5SAndroid Build Coastguard Worker     EXPECT_EQ(GL_CLAMP_TO_EDGE, wrapS);
395*8975f5c5SAndroid Build Coastguard Worker 
396*8975f5c5SAndroid Build Coastguard Worker     GLint wrapT = 0;
397*8975f5c5SAndroid Build Coastguard Worker     glGetTexParameteriv(GL_TEXTURE_RECTANGLE_ANGLE, GL_TEXTURE_WRAP_T, &wrapT);
398*8975f5c5SAndroid Build Coastguard Worker     EXPECT_EQ(GL_CLAMP_TO_EDGE, wrapT);
399*8975f5c5SAndroid Build Coastguard Worker }
400*8975f5c5SAndroid Build Coastguard Worker 
401*8975f5c5SAndroid Build Coastguard Worker // Test glCopyTexImage with rectangle textures
TEST_P(TextureRectangleTestES3,CopyTexImage)402*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTestES3, CopyTexImage)
403*8975f5c5SAndroid Build Coastguard Worker {
404*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
405*8975f5c5SAndroid Build Coastguard Worker 
406*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
407*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
408*8975f5c5SAndroid Build Coastguard Worker 
409*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, 0);
410*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0, 1, 0, 1);
411*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
412*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
413*8975f5c5SAndroid Build Coastguard Worker 
414*8975f5c5SAndroid Build Coastguard Worker     // Error case: level != 0
415*8975f5c5SAndroid Build Coastguard Worker     glCopyTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, GL_RGBA8, 0, 0, 1, 1, 0);
416*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
417*8975f5c5SAndroid Build Coastguard Worker 
418*8975f5c5SAndroid Build Coastguard Worker     // level = 0 works and defines the texture.
419*8975f5c5SAndroid Build Coastguard Worker     glCopyTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA8, 0, 0, 1, 1, 0);
420*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
421*8975f5c5SAndroid Build Coastguard Worker 
422*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
423*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo);
424*8975f5c5SAndroid Build Coastguard Worker     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ANGLE, tex,
425*8975f5c5SAndroid Build Coastguard Worker                            0);
426*8975f5c5SAndroid Build Coastguard Worker     EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
427*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
428*8975f5c5SAndroid Build Coastguard Worker }
429*8975f5c5SAndroid Build Coastguard Worker 
430*8975f5c5SAndroid Build Coastguard Worker // Test glCopyTexSubImage with rectangle textures
TEST_P(TextureRectangleTestES3,CopyTexSubImage)431*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureRectangleTestES3, CopyTexSubImage)
432*8975f5c5SAndroid Build Coastguard Worker {
433*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtensionSupported());
434*8975f5c5SAndroid Build Coastguard Worker 
435*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
436*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_RECTANGLE_ANGLE, tex);
437*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
438*8975f5c5SAndroid Build Coastguard Worker                  &GLColor::black);
439*8975f5c5SAndroid Build Coastguard Worker 
440*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, 0);
441*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0, 1, 0, 1);
442*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
443*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
444*8975f5c5SAndroid Build Coastguard Worker 
445*8975f5c5SAndroid Build Coastguard Worker     // Error case: level != 0
446*8975f5c5SAndroid Build Coastguard Worker     glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 1, 0, 0, 0, 0, 1, 1);
447*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_ERROR(GL_INVALID_VALUE);
448*8975f5c5SAndroid Build Coastguard Worker 
449*8975f5c5SAndroid Build Coastguard Worker     // level = 0 works and defines the texture.
450*8975f5c5SAndroid Build Coastguard Worker     glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_ANGLE, 0, 0, 0, 0, 0, 1, 1);
451*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
452*8975f5c5SAndroid Build Coastguard Worker 
453*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
454*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo);
455*8975f5c5SAndroid Build Coastguard Worker     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ANGLE, tex,
456*8975f5c5SAndroid Build Coastguard Worker                            0);
457*8975f5c5SAndroid Build Coastguard Worker     EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
458*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
459*8975f5c5SAndroid Build Coastguard Worker }
460*8975f5c5SAndroid Build Coastguard Worker 
461*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2(TextureRectangleTest);
462*8975f5c5SAndroid Build Coastguard Worker 
463*8975f5c5SAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(TextureRectangleTestES3);
464*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES3(TextureRectangleTestES3);
465*8975f5c5SAndroid Build Coastguard Worker 
466*8975f5c5SAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(TextureRectangleTestES31);
467*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES31(TextureRectangleTestES31);
468*8975f5c5SAndroid Build Coastguard Worker }  // anonymous namespace
469