xref: /aosp_15_r20/external/angle/src/tests/gl_tests/GetTexLevelParameterTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2020 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 // GetTexLevelParameterTest.cpp : Tests of the GL_ANGLE_get_tex_level_parameter extension.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include "common/gl_enum_utils.h"
10*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker namespace angle
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker 
17*8975f5c5SAndroid Build Coastguard Worker class GetTexLevelParameterTest : public ANGLETest<>
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker   protected:
GetTexLevelParameterTest()20*8975f5c5SAndroid Build Coastguard Worker     GetTexLevelParameterTest()
21*8975f5c5SAndroid Build Coastguard Worker     {
22*8975f5c5SAndroid Build Coastguard Worker         setWindowWidth(128);
23*8975f5c5SAndroid Build Coastguard Worker         setWindowHeight(128);
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         setExtensionsEnabled(false);
29*8975f5c5SAndroid Build Coastguard Worker     }
30*8975f5c5SAndroid Build Coastguard Worker };
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker // Extension is requestable so it should be disabled by default.
TEST_P(GetTexLevelParameterTest,ExtensionStringExposed)33*8975f5c5SAndroid Build Coastguard Worker TEST_P(GetTexLevelParameterTest, ExtensionStringExposed)
34*8975f5c5SAndroid Build Coastguard Worker {
35*8975f5c5SAndroid Build Coastguard Worker     EXPECT_FALSE(IsGLExtensionEnabled("GL_ANGLE_get_tex_level_parameter"));
36*8975f5c5SAndroid Build Coastguard Worker 
37*8975f5c5SAndroid Build Coastguard Worker     if (IsGLExtensionRequestable("GL_ANGLE_get_tex_level_parameter"))
38*8975f5c5SAndroid Build Coastguard Worker     {
39*8975f5c5SAndroid Build Coastguard Worker         glRequestExtensionANGLE("GL_ANGLE_get_tex_level_parameter");
40*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
41*8975f5c5SAndroid Build Coastguard Worker 
42*8975f5c5SAndroid Build Coastguard Worker         EXPECT_TRUE(IsGLExtensionEnabled("GL_ANGLE_get_tex_level_parameter"));
43*8975f5c5SAndroid Build Coastguard Worker     }
44*8975f5c5SAndroid Build Coastguard Worker }
45*8975f5c5SAndroid Build Coastguard Worker 
46*8975f5c5SAndroid Build Coastguard Worker // Test that extension entry points are rejected with extension disabled
TEST_P(GetTexLevelParameterTest,NoExtension)47*8975f5c5SAndroid Build Coastguard Worker TEST_P(GetTexLevelParameterTest, NoExtension)
48*8975f5c5SAndroid Build Coastguard Worker {
49*8975f5c5SAndroid Build Coastguard Worker     GLint resulti = 0;
50*8975f5c5SAndroid Build Coastguard Worker     glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &resulti);
51*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
52*8975f5c5SAndroid Build Coastguard Worker 
53*8975f5c5SAndroid Build Coastguard Worker     GLfloat resultf = 0;
54*8975f5c5SAndroid Build Coastguard Worker     glGetTexLevelParameterfvANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &resultf);
55*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
56*8975f5c5SAndroid Build Coastguard Worker }
57*8975f5c5SAndroid Build Coastguard Worker 
58*8975f5c5SAndroid Build Coastguard Worker // Test valid targets for level queries
TEST_P(GetTexLevelParameterTest,Targets)59*8975f5c5SAndroid Build Coastguard Worker TEST_P(GetTexLevelParameterTest, Targets)
60*8975f5c5SAndroid Build Coastguard Worker {
61*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_get_tex_level_parameter"));
62*8975f5c5SAndroid Build Coastguard Worker 
63*8975f5c5SAndroid Build Coastguard Worker     GLint result = 0;
64*8975f5c5SAndroid Build Coastguard Worker 
65*8975f5c5SAndroid Build Coastguard Worker     // These tests use default texture objects.
66*8975f5c5SAndroid Build Coastguard Worker 
67*8975f5c5SAndroid Build Coastguard Worker     {
68*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &result);
69*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
70*8975f5c5SAndroid Build Coastguard Worker     }
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker     {
73*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_TEXTURE_WIDTH, &result);
74*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
75*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_TEXTURE_WIDTH, &result);
76*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
77*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_TEXTURE_WIDTH, &result);
78*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
79*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_TEXTURE_WIDTH, &result);
80*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
81*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_TEXTURE_WIDTH, &result);
82*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
83*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_TEXTURE_WIDTH, &result);
84*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
85*8975f5c5SAndroid Build Coastguard Worker     }
86*8975f5c5SAndroid Build Coastguard Worker 
87*8975f5c5SAndroid Build Coastguard Worker     {
88*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D_ARRAY, 0, GL_TEXTURE_WIDTH, &result);
89*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3)
90*8975f5c5SAndroid Build Coastguard Worker         {
91*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
92*8975f5c5SAndroid Build Coastguard Worker         }
93*8975f5c5SAndroid Build Coastguard Worker         else
94*8975f5c5SAndroid Build Coastguard Worker         {
95*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
96*8975f5c5SAndroid Build Coastguard Worker         }
97*8975f5c5SAndroid Build Coastguard Worker     }
98*8975f5c5SAndroid Build Coastguard Worker 
99*8975f5c5SAndroid Build Coastguard Worker     {
100*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D_MULTISAMPLE, 0, GL_TEXTURE_WIDTH, &result);
101*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3 || getClientMinorVersion() < 1)
102*8975f5c5SAndroid Build Coastguard Worker         {
103*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
104*8975f5c5SAndroid Build Coastguard Worker             if (EnsureGLExtensionEnabled("GL_ANGLE_texture_multisample"))
105*8975f5c5SAndroid Build Coastguard Worker             {
106*8975f5c5SAndroid Build Coastguard Worker                 glGetTexLevelParameterivANGLE(GL_TEXTURE_2D_MULTISAMPLE, 0, GL_TEXTURE_WIDTH,
107*8975f5c5SAndroid Build Coastguard Worker                                               &result);
108*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_GL_NO_ERROR();
109*8975f5c5SAndroid Build Coastguard Worker             }
110*8975f5c5SAndroid Build Coastguard Worker         }
111*8975f5c5SAndroid Build Coastguard Worker         else
112*8975f5c5SAndroid Build Coastguard Worker         {
113*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
114*8975f5c5SAndroid Build Coastguard Worker         }
115*8975f5c5SAndroid Build Coastguard Worker     }
116*8975f5c5SAndroid Build Coastguard Worker 
117*8975f5c5SAndroid Build Coastguard Worker     {
118*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0, GL_TEXTURE_WIDTH,
119*8975f5c5SAndroid Build Coastguard Worker                                       &result);
120*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3 || getClientMinorVersion() < 2)
121*8975f5c5SAndroid Build Coastguard Worker         {
122*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
123*8975f5c5SAndroid Build Coastguard Worker             if (EnsureGLExtensionEnabled("GL_OES_texture_storage_multisample_2d_array"))
124*8975f5c5SAndroid Build Coastguard Worker             {
125*8975f5c5SAndroid Build Coastguard Worker                 glGetTexLevelParameterivANGLE(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0, GL_TEXTURE_WIDTH,
126*8975f5c5SAndroid Build Coastguard Worker                                               &result);
127*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_GL_NO_ERROR();
128*8975f5c5SAndroid Build Coastguard Worker             }
129*8975f5c5SAndroid Build Coastguard Worker         }
130*8975f5c5SAndroid Build Coastguard Worker         else
131*8975f5c5SAndroid Build Coastguard Worker         {
132*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
133*8975f5c5SAndroid Build Coastguard Worker         }
134*8975f5c5SAndroid Build Coastguard Worker     }
135*8975f5c5SAndroid Build Coastguard Worker 
136*8975f5c5SAndroid Build Coastguard Worker     {
137*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, &result);
138*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3)
139*8975f5c5SAndroid Build Coastguard Worker         {
140*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
141*8975f5c5SAndroid Build Coastguard Worker             if (EnsureGLExtensionEnabled("GL_OES_texture_3d"))
142*8975f5c5SAndroid Build Coastguard Worker             {
143*8975f5c5SAndroid Build Coastguard Worker                 glGetTexLevelParameterivANGLE(GL_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, &result);
144*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_GL_NO_ERROR();
145*8975f5c5SAndroid Build Coastguard Worker             }
146*8975f5c5SAndroid Build Coastguard Worker         }
147*8975f5c5SAndroid Build Coastguard Worker         else
148*8975f5c5SAndroid Build Coastguard Worker         {
149*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
150*8975f5c5SAndroid Build Coastguard Worker         }
151*8975f5c5SAndroid Build Coastguard Worker     }
152*8975f5c5SAndroid Build Coastguard Worker 
153*8975f5c5SAndroid Build Coastguard Worker     {
154*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_TEXTURE_WIDTH, &result);
155*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3 || getClientMinorVersion() < 2)
156*8975f5c5SAndroid Build Coastguard Worker         {
157*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
158*8975f5c5SAndroid Build Coastguard Worker             if (EnsureGLExtensionEnabled("GL_EXT_texture_cube_map_array") ||
159*8975f5c5SAndroid Build Coastguard Worker                 EnsureGLExtensionEnabled("GL_OES_texture_cube_map_array"))
160*8975f5c5SAndroid Build Coastguard Worker             {
161*8975f5c5SAndroid Build Coastguard Worker                 glGetTexLevelParameterivANGLE(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_TEXTURE_WIDTH,
162*8975f5c5SAndroid Build Coastguard Worker                                               &result);
163*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_GL_NO_ERROR();
164*8975f5c5SAndroid Build Coastguard Worker             }
165*8975f5c5SAndroid Build Coastguard Worker         }
166*8975f5c5SAndroid Build Coastguard Worker         else
167*8975f5c5SAndroid Build Coastguard Worker         {
168*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
169*8975f5c5SAndroid Build Coastguard Worker         }
170*8975f5c5SAndroid Build Coastguard Worker     }
171*8975f5c5SAndroid Build Coastguard Worker 
172*8975f5c5SAndroid Build Coastguard Worker     {
173*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_BUFFER, 0, GL_TEXTURE_WIDTH, &result);
174*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3 || getClientMinorVersion() < 2)
175*8975f5c5SAndroid Build Coastguard Worker         {
176*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
177*8975f5c5SAndroid Build Coastguard Worker             if (EnsureGLExtensionEnabled("GL_EXT_texture_buffer") ||
178*8975f5c5SAndroid Build Coastguard Worker                 EnsureGLExtensionEnabled("GL_OES_texture_buffer"))
179*8975f5c5SAndroid Build Coastguard Worker             {
180*8975f5c5SAndroid Build Coastguard Worker                 glGetTexLevelParameterivANGLE(GL_TEXTURE_BUFFER, 0, GL_TEXTURE_WIDTH, &result);
181*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_GL_NO_ERROR();
182*8975f5c5SAndroid Build Coastguard Worker             }
183*8975f5c5SAndroid Build Coastguard Worker         }
184*8975f5c5SAndroid Build Coastguard Worker         else
185*8975f5c5SAndroid Build Coastguard Worker         {
186*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
187*8975f5c5SAndroid Build Coastguard Worker         }
188*8975f5c5SAndroid Build Coastguard Worker     }
189*8975f5c5SAndroid Build Coastguard Worker }
190*8975f5c5SAndroid Build Coastguard Worker 
191*8975f5c5SAndroid Build Coastguard Worker // Test various queries exposed by GL_ANGLE_get_tex_level_parameter
TEST_P(GetTexLevelParameterTest,Queries)192*8975f5c5SAndroid Build Coastguard Worker TEST_P(GetTexLevelParameterTest, Queries)
193*8975f5c5SAndroid Build Coastguard Worker {
194*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_get_tex_level_parameter"));
195*8975f5c5SAndroid Build Coastguard Worker 
196*8975f5c5SAndroid Build Coastguard Worker     GLTexture texture;
197*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_2D, texture);
198*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
199*8975f5c5SAndroid Build Coastguard Worker 
200*8975f5c5SAndroid Build Coastguard Worker     {
201*8975f5c5SAndroid Build Coastguard Worker         GLint width = 0;
202*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
203*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
204*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(1, width);
205*8975f5c5SAndroid Build Coastguard Worker     }
206*8975f5c5SAndroid Build Coastguard Worker 
207*8975f5c5SAndroid Build Coastguard Worker     {
208*8975f5c5SAndroid Build Coastguard Worker         GLint height = 0;
209*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
210*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
211*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(2, height);
212*8975f5c5SAndroid Build Coastguard Worker     }
213*8975f5c5SAndroid Build Coastguard Worker 
214*8975f5c5SAndroid Build Coastguard Worker     {
215*8975f5c5SAndroid Build Coastguard Worker         GLint internalFormat = 0;
216*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT,
217*8975f5c5SAndroid Build Coastguard Worker                                       &internalFormat);
218*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
219*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GLENUM_EQ(GL_RGBA, internalFormat);
220*8975f5c5SAndroid Build Coastguard Worker     }
221*8975f5c5SAndroid Build Coastguard Worker 
222*8975f5c5SAndroid Build Coastguard Worker     {
223*8975f5c5SAndroid Build Coastguard Worker         GLint depth = -1;
224*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_DEPTH, &depth);
225*8975f5c5SAndroid Build Coastguard Worker         if (getClientMajorVersion() < 3)
226*8975f5c5SAndroid Build Coastguard Worker         {
227*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
228*8975f5c5SAndroid Build Coastguard Worker             if (EnsureGLExtensionEnabled("GL_OES_texture_3d"))
229*8975f5c5SAndroid Build Coastguard Worker             {
230*8975f5c5SAndroid Build Coastguard Worker                 glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_DEPTH, &depth);
231*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_GL_NO_ERROR();
232*8975f5c5SAndroid Build Coastguard Worker                 EXPECT_EQ(depth, 1);
233*8975f5c5SAndroid Build Coastguard Worker             }
234*8975f5c5SAndroid Build Coastguard Worker         }
235*8975f5c5SAndroid Build Coastguard Worker         else
236*8975f5c5SAndroid Build Coastguard Worker         {
237*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
238*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(depth, 1);
239*8975f5c5SAndroid Build Coastguard Worker         }
240*8975f5c5SAndroid Build Coastguard Worker     }
241*8975f5c5SAndroid Build Coastguard Worker 
242*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3)
243*8975f5c5SAndroid Build Coastguard Worker     {
244*8975f5c5SAndroid Build Coastguard Worker         GLint samples = -1;
245*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_SAMPLES, &samples);
246*8975f5c5SAndroid Build Coastguard Worker         if (getClientMinorVersion() < 1)
247*8975f5c5SAndroid Build Coastguard Worker         {
248*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
249*8975f5c5SAndroid Build Coastguard Worker         }
250*8975f5c5SAndroid Build Coastguard Worker         else
251*8975f5c5SAndroid Build Coastguard Worker         {
252*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
253*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(samples, 0);
254*8975f5c5SAndroid Build Coastguard Worker         }
255*8975f5c5SAndroid Build Coastguard Worker 
256*8975f5c5SAndroid Build Coastguard Worker         GLint fixedLocations = 0;
257*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_FIXED_SAMPLE_LOCATIONS,
258*8975f5c5SAndroid Build Coastguard Worker                                       &fixedLocations);
259*8975f5c5SAndroid Build Coastguard Worker         if (getClientMinorVersion() < 1)
260*8975f5c5SAndroid Build Coastguard Worker         {
261*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_ERROR(GL_INVALID_ENUM);
262*8975f5c5SAndroid Build Coastguard Worker         }
263*8975f5c5SAndroid Build Coastguard Worker         else
264*8975f5c5SAndroid Build Coastguard Worker         {
265*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
266*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(fixedLocations);
267*8975f5c5SAndroid Build Coastguard Worker         }
268*8975f5c5SAndroid Build Coastguard Worker 
269*8975f5c5SAndroid Build Coastguard Worker         if (getClientMinorVersion() < 1 && EnsureGLExtensionEnabled("GL_ANGLE_texture_multisample"))
270*8975f5c5SAndroid Build Coastguard Worker         {
271*8975f5c5SAndroid Build Coastguard Worker             glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_SAMPLES, &samples);
272*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
273*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(samples, 0);
274*8975f5c5SAndroid Build Coastguard Worker 
275*8975f5c5SAndroid Build Coastguard Worker             glGetTexLevelParameterivANGLE(GL_TEXTURE_2D, 0, GL_TEXTURE_FIXED_SAMPLE_LOCATIONS,
276*8975f5c5SAndroid Build Coastguard Worker                                           &fixedLocations);
277*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
278*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(fixedLocations);
279*8975f5c5SAndroid Build Coastguard Worker         }
280*8975f5c5SAndroid Build Coastguard Worker     }
281*8975f5c5SAndroid Build Coastguard Worker }
282*8975f5c5SAndroid Build Coastguard Worker 
283*8975f5c5SAndroid Build Coastguard Worker // Test level validation
TEST_P(GetTexLevelParameterTest,Levels)284*8975f5c5SAndroid Build Coastguard Worker TEST_P(GetTexLevelParameterTest, Levels)
285*8975f5c5SAndroid Build Coastguard Worker {
286*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_get_tex_level_parameter"));
287*8975f5c5SAndroid Build Coastguard Worker 
288*8975f5c5SAndroid Build Coastguard Worker     const auto getMaxLevel = [](GLenum type, int *level) {
289*8975f5c5SAndroid Build Coastguard Worker         int tmp = 0;
290*8975f5c5SAndroid Build Coastguard Worker         glGetIntegerv(type, &tmp);
291*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
292*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GT(tmp, 0);
293*8975f5c5SAndroid Build Coastguard Worker         *level = gl::log2(tmp);
294*8975f5c5SAndroid Build Coastguard Worker     };
295*8975f5c5SAndroid Build Coastguard Worker 
296*8975f5c5SAndroid Build Coastguard Worker     int maxLevel2D   = 0;
297*8975f5c5SAndroid Build Coastguard Worker     int maxLevel3D   = 0;
298*8975f5c5SAndroid Build Coastguard Worker     int maxLevelCube = 0;
299*8975f5c5SAndroid Build Coastguard Worker     getMaxLevel(GL_MAX_TEXTURE_SIZE, &maxLevel2D);
300*8975f5c5SAndroid Build Coastguard Worker     getMaxLevel(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxLevelCube);
301*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3)
302*8975f5c5SAndroid Build Coastguard Worker     {
303*8975f5c5SAndroid Build Coastguard Worker         getMaxLevel(GL_MAX_3D_TEXTURE_SIZE, &maxLevel3D);
304*8975f5c5SAndroid Build Coastguard Worker     }
305*8975f5c5SAndroid Build Coastguard Worker 
306*8975f5c5SAndroid Build Coastguard Worker     const auto test = [](GLenum target, int maxValid) {
307*8975f5c5SAndroid Build Coastguard Worker         GLint result = 0;
308*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(target, 0, GL_TEXTURE_WIDTH, &result);
309*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR() << "Target " << gl::GLenumToString(gl::GLESEnum::TextureTarget, target)
310*8975f5c5SAndroid Build Coastguard Worker                              << " Level " << 0;
311*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(target, maxValid, GL_TEXTURE_WIDTH, &result);
312*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR() << "Target " << gl::GLenumToString(gl::GLESEnum::TextureTarget, target)
313*8975f5c5SAndroid Build Coastguard Worker                              << " Level " << maxValid;
314*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(target, -1, GL_TEXTURE_WIDTH, &result);
315*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_ERROR(GL_INVALID_VALUE)
316*8975f5c5SAndroid Build Coastguard Worker             << "Target " << gl::GLenumToString(gl::GLESEnum::TextureTarget, target) << " Level "
317*8975f5c5SAndroid Build Coastguard Worker             << -1;
318*8975f5c5SAndroid Build Coastguard Worker         glGetTexLevelParameterivANGLE(target, maxValid + 1, GL_TEXTURE_WIDTH, &result);
319*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_ERROR(GL_INVALID_VALUE)
320*8975f5c5SAndroid Build Coastguard Worker             << "Target " << gl::GLenumToString(gl::GLESEnum::TextureTarget, target) << " Level "
321*8975f5c5SAndroid Build Coastguard Worker             << (maxValid + 1);
322*8975f5c5SAndroid Build Coastguard Worker     };
323*8975f5c5SAndroid Build Coastguard Worker 
324*8975f5c5SAndroid Build Coastguard Worker     test(GL_TEXTURE_2D, maxLevel2D);
325*8975f5c5SAndroid Build Coastguard Worker     test(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, maxLevelCube);
326*8975f5c5SAndroid Build Coastguard Worker 
327*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3)
328*8975f5c5SAndroid Build Coastguard Worker     {
329*8975f5c5SAndroid Build Coastguard Worker         test(GL_TEXTURE_2D_ARRAY, maxLevel2D);
330*8975f5c5SAndroid Build Coastguard Worker     }
331*8975f5c5SAndroid Build Coastguard Worker 
332*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3 || EnsureGLExtensionEnabled("GL_OES_texture_3d"))
333*8975f5c5SAndroid Build Coastguard Worker     {
334*8975f5c5SAndroid Build Coastguard Worker         test(GL_TEXTURE_3D, maxLevel3D);
335*8975f5c5SAndroid Build Coastguard Worker     }
336*8975f5c5SAndroid Build Coastguard Worker 
337*8975f5c5SAndroid Build Coastguard Worker     if ((getClientMajorVersion() >= 3 && getClientMinorVersion() >= 1) ||
338*8975f5c5SAndroid Build Coastguard Worker         EnsureGLExtensionEnabled("GL_ANGLE_texture_multisample"))
339*8975f5c5SAndroid Build Coastguard Worker     {
340*8975f5c5SAndroid Build Coastguard Worker         test(GL_TEXTURE_2D_MULTISAMPLE, 0);
341*8975f5c5SAndroid Build Coastguard Worker     }
342*8975f5c5SAndroid Build Coastguard Worker 
343*8975f5c5SAndroid Build Coastguard Worker     if ((getClientMajorVersion() >= 3 && getClientMinorVersion() >= 2) ||
344*8975f5c5SAndroid Build Coastguard Worker         EnsureGLExtensionEnabled("GL_OES_texture_storage_multisample_2d_array"))
345*8975f5c5SAndroid Build Coastguard Worker     {
346*8975f5c5SAndroid Build Coastguard Worker         test(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0);
347*8975f5c5SAndroid Build Coastguard Worker     }
348*8975f5c5SAndroid Build Coastguard Worker 
349*8975f5c5SAndroid Build Coastguard Worker     if ((getClientMajorVersion() >= 3 && getClientMinorVersion() >= 2) ||
350*8975f5c5SAndroid Build Coastguard Worker         (EnsureGLExtensionEnabled("GL_EXT_texture_buffer") ||
351*8975f5c5SAndroid Build Coastguard Worker          EnsureGLExtensionEnabled("GL_OES_texture_buffer")))
352*8975f5c5SAndroid Build Coastguard Worker     {
353*8975f5c5SAndroid Build Coastguard Worker         test(GL_TEXTURE_BUFFER, 0);
354*8975f5c5SAndroid Build Coastguard Worker     }
355*8975f5c5SAndroid Build Coastguard Worker 
356*8975f5c5SAndroid Build Coastguard Worker     if ((getClientMajorVersion() >= 3 && getClientMinorVersion() >= 2) ||
357*8975f5c5SAndroid Build Coastguard Worker         (EnsureGLExtensionEnabled("GL_EXT_texture_cube_map_array") ||
358*8975f5c5SAndroid Build Coastguard Worker          EnsureGLExtensionEnabled("GL_OES_texture_cube_map_array")))
359*8975f5c5SAndroid Build Coastguard Worker     {
360*8975f5c5SAndroid Build Coastguard Worker         test(GL_TEXTURE_CUBE_MAP_ARRAY, maxLevelCube);
361*8975f5c5SAndroid Build Coastguard Worker     }
362*8975f5c5SAndroid Build Coastguard Worker }
363*8975f5c5SAndroid Build Coastguard Worker 
364*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
365*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
366*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2_AND_ES3_AND_ES31_AND_ES32(GetTexLevelParameterTest);
367*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
368