xref: /aosp_15_r20/external/deqp/modules/gles2/functional/es2fNegativeStateApiTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief Negative GL State API tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es2fNegativeStateApiTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "es2fApiCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "deMemory.h"
28*35238bceSAndroid Build Coastguard Worker 
29*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "glwDefs.hpp"
31*35238bceSAndroid Build Coastguard Worker 
32*35238bceSAndroid Build Coastguard Worker using namespace glw; // GL types
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker namespace deqp
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker namespace gles2
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker namespace Functional
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker 
41*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
42*35238bceSAndroid Build Coastguard Worker 
43*35238bceSAndroid Build Coastguard Worker static const char *uniformTestVertSource = "uniform mediump vec4 vTest;\n"
44*35238bceSAndroid Build Coastguard Worker                                            "void main (void)\n"
45*35238bceSAndroid Build Coastguard Worker                                            "{\n"
46*35238bceSAndroid Build Coastguard Worker                                            "    gl_Position = vTest;\n"
47*35238bceSAndroid Build Coastguard Worker                                            "}\n\0";
48*35238bceSAndroid Build Coastguard Worker static const char *uniformTestFragSource = "uniform mediump ivec4 fTest;\n"
49*35238bceSAndroid Build Coastguard Worker                                            "void main (void)\n"
50*35238bceSAndroid Build Coastguard Worker                                            "{\n"
51*35238bceSAndroid Build Coastguard Worker                                            "    gl_FragColor = vec4(fTest);\n"
52*35238bceSAndroid Build Coastguard Worker                                            "}\n\0";
53*35238bceSAndroid Build Coastguard Worker 
NegativeStateApiTests(Context & context)54*35238bceSAndroid Build Coastguard Worker NegativeStateApiTests::NegativeStateApiTests(Context &context)
55*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "state", "Negative GL State API Cases")
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker }
58*35238bceSAndroid Build Coastguard Worker 
~NegativeStateApiTests(void)59*35238bceSAndroid Build Coastguard Worker NegativeStateApiTests::~NegativeStateApiTests(void)
60*35238bceSAndroid Build Coastguard Worker {
61*35238bceSAndroid Build Coastguard Worker }
62*35238bceSAndroid Build Coastguard Worker 
init(void)63*35238bceSAndroid Build Coastguard Worker void NegativeStateApiTests::init(void)
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker     // Enabling & disabling states
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(enable, "Invalid glEnable() usage", {
68*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
69*35238bceSAndroid Build Coastguard Worker         glEnable(-1);
70*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
71*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
72*35238bceSAndroid Build Coastguard Worker     });
73*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(disable, "Invalid glDisable() usage", {
74*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
75*35238bceSAndroid Build Coastguard Worker         glDisable(-1);
76*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
77*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
78*35238bceSAndroid Build Coastguard Worker     });
79*35238bceSAndroid Build Coastguard Worker 
80*35238bceSAndroid Build Coastguard Worker     // Simple state queries
81*35238bceSAndroid Build Coastguard Worker 
82*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_booleanv, "Invalid glGetBooleanv() usage", {
83*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
84*35238bceSAndroid Build Coastguard Worker         GLboolean params[1] = {GL_FALSE};
85*35238bceSAndroid Build Coastguard Worker         glGetBooleanv(-1, &params[0]);
86*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
87*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
88*35238bceSAndroid Build Coastguard Worker     });
89*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_floatv, "Invalid glGetFloatv() usage", {
90*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
91*35238bceSAndroid Build Coastguard Worker         GLfloat params[1] = {0.0f};
92*35238bceSAndroid Build Coastguard Worker         glGetFloatv(-1, &params[0]);
93*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
94*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
95*35238bceSAndroid Build Coastguard Worker     });
96*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_integerv, "Invalid glGetIntegerv() usage", {
97*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
98*35238bceSAndroid Build Coastguard Worker         GLint params[1] = {0};
99*35238bceSAndroid Build Coastguard Worker         glGetIntegerv(-1, &params[0]);
100*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
101*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
102*35238bceSAndroid Build Coastguard Worker     });
103*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_string, "Invalid glGetString() usage", {
104*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
105*35238bceSAndroid Build Coastguard Worker         glGetString(0);
106*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
107*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
108*35238bceSAndroid Build Coastguard Worker     });
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker     // Enumerated state queries: Shaders
111*35238bceSAndroid Build Coastguard Worker 
112*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_attached_shaders, "Invalid glGetAttachedShaders() usage", {
113*35238bceSAndroid Build Coastguard Worker         GLuint shaders[1]   = {0};
114*35238bceSAndroid Build Coastguard Worker         GLuint shaderObject = glCreateShader(GL_VERTEX_SHADER);
115*35238bceSAndroid Build Coastguard Worker         GLuint program      = glCreateProgram();
116*35238bceSAndroid Build Coastguard Worker         GLsizei count[1]    = {-1};
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
119*35238bceSAndroid Build Coastguard Worker         glGetAttachedShaders(-1, 1, &count[0], &shaders[0]);
120*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
121*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
122*35238bceSAndroid Build Coastguard Worker 
123*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
124*35238bceSAndroid Build Coastguard Worker         glGetAttachedShaders(shaderObject, 1, &count[0], &shaders[0]);
125*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
126*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
127*35238bceSAndroid Build Coastguard Worker 
128*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxCount is less than 0.");
129*35238bceSAndroid Build Coastguard Worker         glGetAttachedShaders(program, -1, &count[0], &shaders[0]);
130*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
131*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
132*35238bceSAndroid Build Coastguard Worker 
133*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shaderObject);
134*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
135*35238bceSAndroid Build Coastguard Worker     });
136*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_shaderiv, "Invalid glGetShaderiv() usage", {
137*35238bceSAndroid Build Coastguard Worker         GLboolean shaderCompilerSupported;
138*35238bceSAndroid Build Coastguard Worker         glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
139*35238bceSAndroid Build Coastguard Worker         if (!shaderCompilerSupported)
140*35238bceSAndroid Build Coastguard Worker             m_log << TestLog::Message << "// Shader compiler not supported, always expect GL_INVALID_OPERATION"
141*35238bceSAndroid Build Coastguard Worker                   << TestLog::EndMessage;
142*35238bceSAndroid Build Coastguard Worker         else
143*35238bceSAndroid Build Coastguard Worker             m_log << TestLog::Message << "// Shader compiler supported" << TestLog::EndMessage;
144*35238bceSAndroid Build Coastguard Worker 
145*35238bceSAndroid Build Coastguard Worker         GLuint shader  = glCreateShader(GL_VERTEX_SHADER);
146*35238bceSAndroid Build Coastguard Worker         GLuint program = glCreateProgram();
147*35238bceSAndroid Build Coastguard Worker         GLint param[1] = {-1};
148*35238bceSAndroid Build Coastguard Worker 
149*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
150*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(shader, -1, &param[0]);
151*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
152*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
153*35238bceSAndroid Build Coastguard Worker 
154*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
155*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(-1, GL_SHADER_TYPE, &param[0]);
156*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
157*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
158*35238bceSAndroid Build Coastguard Worker 
159*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
160*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_OPERATION is generated if pname is GL_COMPILE_STATUS, GL_INFO_LOG_LENGTH, or "
161*35238bceSAndroid Build Coastguard Worker                 "GL_SHADER_SOURCE_LENGTH but a shader compiler is not supported.");
162*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(shader, GL_COMPILE_STATUS, &param[0]);
163*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION);
164*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &param[0]);
165*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION);
166*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &param[0]);
167*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION);
168*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
169*35238bceSAndroid Build Coastguard Worker 
170*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader does not refer to a shader object.");
171*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(program, GL_SHADER_TYPE, &param[0]);
172*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
173*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
174*35238bceSAndroid Build Coastguard Worker 
175*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
176*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
177*35238bceSAndroid Build Coastguard Worker     });
178*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_shader_info_log, "Invalid glGetShaderInfoLog() usage", {
179*35238bceSAndroid Build Coastguard Worker         GLuint shader     = glCreateShader(GL_VERTEX_SHADER);
180*35238bceSAndroid Build Coastguard Worker         GLuint program    = glCreateProgram();
181*35238bceSAndroid Build Coastguard Worker         GLsizei length[1] = {-1};
182*35238bceSAndroid Build Coastguard Worker         char infoLog[128];
183*35238bceSAndroid Build Coastguard Worker 
184*35238bceSAndroid Build Coastguard Worker         deMemset(&infoLog[0], 0, sizeof(infoLog));
185*35238bceSAndroid Build Coastguard Worker 
186*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
187*35238bceSAndroid Build Coastguard Worker         glGetShaderInfoLog(-1, 128, &length[0], &infoLog[0]);
188*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
189*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
190*35238bceSAndroid Build Coastguard Worker 
191*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object.");
192*35238bceSAndroid Build Coastguard Worker         glGetShaderInfoLog(program, 128, &length[0], &infoLog[0]);
193*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
194*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
195*35238bceSAndroid Build Coastguard Worker 
196*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0.");
197*35238bceSAndroid Build Coastguard Worker         glGetShaderInfoLog(shader, -1, &length[0], &infoLog[0]);
198*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
199*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
200*35238bceSAndroid Build Coastguard Worker 
201*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
202*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
203*35238bceSAndroid Build Coastguard Worker     });
204*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_shader_precision_format, "Invalid glGetShaderPrecisionFormat() usage", {
205*35238bceSAndroid Build Coastguard Worker         GLboolean shaderCompilerSupported;
206*35238bceSAndroid Build Coastguard Worker         glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
207*35238bceSAndroid Build Coastguard Worker         if (!shaderCompilerSupported)
208*35238bceSAndroid Build Coastguard Worker             m_log << TestLog::Message << "// Shader compiler not supported, always expect GL_INVALID_OPERATION"
209*35238bceSAndroid Build Coastguard Worker                   << TestLog::EndMessage;
210*35238bceSAndroid Build Coastguard Worker         else
211*35238bceSAndroid Build Coastguard Worker             m_log << TestLog::Message << "// Shader compiler supported" << TestLog::EndMessage;
212*35238bceSAndroid Build Coastguard Worker 
213*35238bceSAndroid Build Coastguard Worker         GLint range[2];
214*35238bceSAndroid Build Coastguard Worker         range[0]           = -1;
215*35238bceSAndroid Build Coastguard Worker         range[1]           = -1;
216*35238bceSAndroid Build Coastguard Worker         GLint precision[1] = {-1};
217*35238bceSAndroid Build Coastguard Worker 
218*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
219*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_ENUM is generated if shaderType or precisionType is not an accepted value.");
220*35238bceSAndroid Build Coastguard Worker         glGetShaderPrecisionFormat(-1, GL_MEDIUM_FLOAT, &range[0], &precision[0]);
221*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_INVALID_ENUM : GL_INVALID_OPERATION);
222*35238bceSAndroid Build Coastguard Worker         glGetShaderPrecisionFormat(GL_VERTEX_SHADER, -1, &range[0], &precision[0]);
223*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_INVALID_ENUM : GL_INVALID_OPERATION);
224*35238bceSAndroid Build Coastguard Worker         glGetShaderPrecisionFormat(-1, -1, &range[0], &precision[0]);
225*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_INVALID_ENUM : GL_INVALID_OPERATION);
226*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
227*35238bceSAndroid Build Coastguard Worker 
228*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if a shader compiler is not supported.");
229*35238bceSAndroid Build Coastguard Worker         glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_MEDIUM_FLOAT, &range[0], &precision[0]);
230*35238bceSAndroid Build Coastguard Worker         expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION);
231*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
232*35238bceSAndroid Build Coastguard Worker     });
233*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_shader_source, "Invalid glGetShaderSource() usage", {
234*35238bceSAndroid Build Coastguard Worker         GLsizei length[1] = {-1};
235*35238bceSAndroid Build Coastguard Worker         char source[1]    = {0};
236*35238bceSAndroid Build Coastguard Worker         GLuint program    = glCreateProgram();
237*35238bceSAndroid Build Coastguard Worker         GLuint shader     = glCreateShader(GL_VERTEX_SHADER);
238*35238bceSAndroid Build Coastguard Worker 
239*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
240*35238bceSAndroid Build Coastguard Worker         glGetShaderSource(-1, 1, &length[0], &source[0]);
241*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
242*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
243*35238bceSAndroid Build Coastguard Worker 
244*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object.");
245*35238bceSAndroid Build Coastguard Worker         glGetShaderSource(program, 1, &length[0], &source[0]);
246*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
247*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
248*35238bceSAndroid Build Coastguard Worker 
249*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
250*35238bceSAndroid Build Coastguard Worker         glGetShaderSource(shader, -1, &length[0], &source[0]);
251*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
252*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
253*35238bceSAndroid Build Coastguard Worker 
254*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
255*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
256*35238bceSAndroid Build Coastguard Worker     });
257*35238bceSAndroid Build Coastguard Worker 
258*35238bceSAndroid Build Coastguard Worker     // Enumerated state queries: Programs
259*35238bceSAndroid Build Coastguard Worker 
260*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_programiv, "Invalid glGetProgramiv() usage", {
261*35238bceSAndroid Build Coastguard Worker         GLuint program  = glCreateProgram();
262*35238bceSAndroid Build Coastguard Worker         GLuint shader   = glCreateShader(GL_VERTEX_SHADER);
263*35238bceSAndroid Build Coastguard Worker         GLint params[1] = {-1};
264*35238bceSAndroid Build Coastguard Worker 
265*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
266*35238bceSAndroid Build Coastguard Worker         glGetProgramiv(program, -1, &params[0]);
267*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
268*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
269*35238bceSAndroid Build Coastguard Worker 
270*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
271*35238bceSAndroid Build Coastguard Worker         glGetProgramiv(-1, GL_LINK_STATUS, &params[0]);
272*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
273*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
274*35238bceSAndroid Build Coastguard Worker 
275*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("",
276*35238bceSAndroid Build Coastguard Worker                                   "GL_INVALID_OPERATION is generated if program does not refer to a program object.");
277*35238bceSAndroid Build Coastguard Worker         glGetProgramiv(shader, GL_LINK_STATUS, &params[0]);
278*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
279*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
280*35238bceSAndroid Build Coastguard Worker 
281*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
282*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
283*35238bceSAndroid Build Coastguard Worker     });
284*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_program_info_log, "Invalid glGetProgramInfoLog() usage", {
285*35238bceSAndroid Build Coastguard Worker         GLuint program    = glCreateProgram();
286*35238bceSAndroid Build Coastguard Worker         GLuint shader     = glCreateShader(GL_VERTEX_SHADER);
287*35238bceSAndroid Build Coastguard Worker         GLsizei length[1] = {-1};
288*35238bceSAndroid Build Coastguard Worker         char infoLog[1]   = {0};
289*35238bceSAndroid Build Coastguard Worker 
290*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
291*35238bceSAndroid Build Coastguard Worker         glGetProgramInfoLog(-1, 1, &length[0], &infoLog[0]);
292*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
293*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
294*35238bceSAndroid Build Coastguard Worker 
295*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
296*35238bceSAndroid Build Coastguard Worker         glGetProgramInfoLog(shader, 1, &length[0], &infoLog[0]);
297*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
298*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
299*35238bceSAndroid Build Coastguard Worker 
300*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0.");
301*35238bceSAndroid Build Coastguard Worker         glGetProgramInfoLog(program, -1, &length[0], &infoLog[0]);
302*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
303*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
304*35238bceSAndroid Build Coastguard Worker 
305*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
306*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
307*35238bceSAndroid Build Coastguard Worker     });
308*35238bceSAndroid Build Coastguard Worker 
309*35238bceSAndroid Build Coastguard Worker     // Enumerated state queries: Shader variables
310*35238bceSAndroid Build Coastguard Worker 
311*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_tex_parameterfv, "Invalid glGetTexParameterfv() usage", {
312*35238bceSAndroid Build Coastguard Worker         GLfloat params[1] = {0.0f};
313*35238bceSAndroid Build Coastguard Worker 
314*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
315*35238bceSAndroid Build Coastguard Worker         glGetTexParameterfv(-1, GL_TEXTURE_MAG_FILTER, &params[0]);
316*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
317*35238bceSAndroid Build Coastguard Worker         glGetTexParameterfv(GL_TEXTURE_2D, -1, &params[0]);
318*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
319*35238bceSAndroid Build Coastguard Worker         glGetTexParameterfv(-1, -1, &params[0]);
320*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
321*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
322*35238bceSAndroid Build Coastguard Worker     });
323*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_tex_parameteriv, "Invalid glGetTexParameteriv() usage", {
324*35238bceSAndroid Build Coastguard Worker         GLint params[1] = {-1};
325*35238bceSAndroid Build Coastguard Worker 
326*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
327*35238bceSAndroid Build Coastguard Worker         glGetTexParameteriv(-1, GL_TEXTURE_MAG_FILTER, &params[0]);
328*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
329*35238bceSAndroid Build Coastguard Worker         glGetTexParameteriv(GL_TEXTURE_2D, -1, &params[0]);
330*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
331*35238bceSAndroid Build Coastguard Worker         glGetTexParameteriv(-1, -1, &params[0]);
332*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
333*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
334*35238bceSAndroid Build Coastguard Worker     });
335*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_uniformfv, "Invalid glGetUniformfv() usage", {
336*35238bceSAndroid Build Coastguard Worker         glu::ShaderProgram program(m_context.getRenderContext(),
337*35238bceSAndroid Build Coastguard Worker                                    glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
338*35238bceSAndroid Build Coastguard Worker         glUseProgram(program.getProgram());
339*35238bceSAndroid Build Coastguard Worker 
340*35238bceSAndroid Build Coastguard Worker         GLint vUnif = glGetUniformLocation(program.getProgram(), "vTest"); // vec4
341*35238bceSAndroid Build Coastguard Worker         GLint fUnif = glGetUniformLocation(program.getProgram(), "fTest"); // ivec4
342*35238bceSAndroid Build Coastguard Worker         if (vUnif == -1 || fUnif == -1)
343*35238bceSAndroid Build Coastguard Worker             m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
344*35238bceSAndroid Build Coastguard Worker 
345*35238bceSAndroid Build Coastguard Worker         GLuint shader       = glCreateShader(GL_VERTEX_SHADER);
346*35238bceSAndroid Build Coastguard Worker         GLuint programEmpty = glCreateProgram();
347*35238bceSAndroid Build Coastguard Worker         GLfloat params[4];
348*35238bceSAndroid Build Coastguard Worker 
349*35238bceSAndroid Build Coastguard Worker         deMemset(&params[0], 0, sizeof(params));
350*35238bceSAndroid Build Coastguard Worker 
351*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
352*35238bceSAndroid Build Coastguard Worker         glGetUniformfv(-1, vUnif, &params[0]);
353*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
354*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
355*35238bceSAndroid Build Coastguard Worker 
356*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
357*35238bceSAndroid Build Coastguard Worker         glGetUniformfv(shader, vUnif, &params[0]);
358*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
359*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
360*35238bceSAndroid Build Coastguard Worker 
361*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
362*35238bceSAndroid Build Coastguard Worker         glGetUniformfv(programEmpty, vUnif, &params[0]);
363*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
364*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
365*35238bceSAndroid Build Coastguard Worker 
366*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid "
367*35238bceSAndroid Build Coastguard Worker                                       "uniform variable location for the specified program object.");
368*35238bceSAndroid Build Coastguard Worker         glGetUniformfv(program.getProgram(), de::max(vUnif, fUnif) + 1, &params[0]);
369*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
370*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
371*35238bceSAndroid Build Coastguard Worker 
372*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
373*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(programEmpty);
374*35238bceSAndroid Build Coastguard Worker     });
375*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_uniformiv, "Invalid glGetUniformiv() usage", {
376*35238bceSAndroid Build Coastguard Worker         glu::ShaderProgram program(m_context.getRenderContext(),
377*35238bceSAndroid Build Coastguard Worker                                    glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
378*35238bceSAndroid Build Coastguard Worker         glUseProgram(program.getProgram());
379*35238bceSAndroid Build Coastguard Worker 
380*35238bceSAndroid Build Coastguard Worker         GLint vUnif = glGetUniformLocation(program.getProgram(), "vTest"); // vec4
381*35238bceSAndroid Build Coastguard Worker         GLint fUnif = glGetUniformLocation(program.getProgram(), "fTest"); // ivec4
382*35238bceSAndroid Build Coastguard Worker         if (vUnif == -1 || fUnif == -1)
383*35238bceSAndroid Build Coastguard Worker             m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
384*35238bceSAndroid Build Coastguard Worker 
385*35238bceSAndroid Build Coastguard Worker         GLuint shader       = glCreateShader(GL_VERTEX_SHADER);
386*35238bceSAndroid Build Coastguard Worker         GLuint programEmpty = glCreateProgram();
387*35238bceSAndroid Build Coastguard Worker         GLint params[4];
388*35238bceSAndroid Build Coastguard Worker 
389*35238bceSAndroid Build Coastguard Worker         deMemset(&params[0], 0, sizeof(params));
390*35238bceSAndroid Build Coastguard Worker 
391*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
392*35238bceSAndroid Build Coastguard Worker         glGetUniformiv(-1, vUnif, &params[0]);
393*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
394*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
395*35238bceSAndroid Build Coastguard Worker 
396*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
397*35238bceSAndroid Build Coastguard Worker         glGetUniformiv(shader, vUnif, &params[0]);
398*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
399*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
400*35238bceSAndroid Build Coastguard Worker 
401*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
402*35238bceSAndroid Build Coastguard Worker         glGetUniformiv(programEmpty, vUnif, &params[0]);
403*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
404*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
405*35238bceSAndroid Build Coastguard Worker 
406*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid "
407*35238bceSAndroid Build Coastguard Worker                                       "uniform variable location for the specified program object.");
408*35238bceSAndroid Build Coastguard Worker         glGetUniformiv(program.getProgram(), de::max(vUnif, fUnif) + 1, &params[0]);
409*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
410*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
411*35238bceSAndroid Build Coastguard Worker 
412*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
413*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(programEmpty);
414*35238bceSAndroid Build Coastguard Worker     });
415*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_vertex_attribfv, "Invalid glGetVertexAttribfv() usage", {
416*35238bceSAndroid Build Coastguard Worker         GLfloat params[1];
417*35238bceSAndroid Build Coastguard Worker 
418*35238bceSAndroid Build Coastguard Worker         deMemset(&params[0], 0, sizeof(params));
419*35238bceSAndroid Build Coastguard Worker 
420*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
421*35238bceSAndroid Build Coastguard Worker         glGetVertexAttribfv(0, -1, &params[0]);
422*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
423*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
424*35238bceSAndroid Build Coastguard Worker 
425*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
426*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
427*35238bceSAndroid Build Coastguard Worker         GLint maxVertexAttribs;
428*35238bceSAndroid Build Coastguard Worker         glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
429*35238bceSAndroid Build Coastguard Worker         glGetVertexAttribfv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params[0]);
430*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
431*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
432*35238bceSAndroid Build Coastguard Worker     });
433*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_vertex_attribiv, "Invalid glGetVertexAttribiv() usage", {
434*35238bceSAndroid Build Coastguard Worker         GLint params[1];
435*35238bceSAndroid Build Coastguard Worker 
436*35238bceSAndroid Build Coastguard Worker         deMemset(&params[0], 0, sizeof(params));
437*35238bceSAndroid Build Coastguard Worker 
438*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
439*35238bceSAndroid Build Coastguard Worker         glGetVertexAttribiv(0, -1, &params[0]);
440*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
441*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
442*35238bceSAndroid Build Coastguard Worker 
443*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
444*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
445*35238bceSAndroid Build Coastguard Worker         GLint maxVertexAttribs;
446*35238bceSAndroid Build Coastguard Worker         glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
447*35238bceSAndroid Build Coastguard Worker         glGetVertexAttribiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params[0]);
448*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
449*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
450*35238bceSAndroid Build Coastguard Worker     });
451*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_vertex_attrib_pointerv, "Invalid glGetVertexAttribPointerv() usage", {
452*35238bceSAndroid Build Coastguard Worker         GLvoid *ptr[1] = {DE_NULL};
453*35238bceSAndroid Build Coastguard Worker 
454*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
455*35238bceSAndroid Build Coastguard Worker         glGetVertexAttribPointerv(0, -1, &ptr[0]);
456*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
457*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
458*35238bceSAndroid Build Coastguard Worker 
459*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
460*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
461*35238bceSAndroid Build Coastguard Worker         GLint maxVertexAttribs;
462*35238bceSAndroid Build Coastguard Worker         glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
463*35238bceSAndroid Build Coastguard Worker         glGetVertexAttribPointerv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_POINTER, &ptr[0]);
464*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_VALUE);
465*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
466*35238bceSAndroid Build Coastguard Worker     });
467*35238bceSAndroid Build Coastguard Worker 
468*35238bceSAndroid Build Coastguard Worker     // Enumerated state queries: Buffers
469*35238bceSAndroid Build Coastguard Worker 
470*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_buffer_parameteriv, "Invalid glGetBufferParameteriv() usage", {
471*35238bceSAndroid Build Coastguard Worker         GLint params[1];
472*35238bceSAndroid Build Coastguard Worker         GLuint buf;
473*35238bceSAndroid Build Coastguard Worker         glGenBuffers(1, &buf);
474*35238bceSAndroid Build Coastguard Worker         glBindBuffer(GL_ARRAY_BUFFER, buf);
475*35238bceSAndroid Build Coastguard Worker 
476*35238bceSAndroid Build Coastguard Worker         deMemset(&params[0], 0, sizeof(params));
477*35238bceSAndroid Build Coastguard Worker 
478*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or value is not an accepted value.");
479*35238bceSAndroid Build Coastguard Worker         glGetBufferParameteriv(-1, GL_BUFFER_SIZE, &params[0]);
480*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
481*35238bceSAndroid Build Coastguard Worker         glGetBufferParameteriv(GL_ARRAY_BUFFER, -1, &params[0]);
482*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
483*35238bceSAndroid Build Coastguard Worker         glGetBufferParameteriv(-1, -1, &params[0]);
484*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
485*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
486*35238bceSAndroid Build Coastguard Worker 
487*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
488*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
489*35238bceSAndroid Build Coastguard Worker         glBindBuffer(GL_ARRAY_BUFFER, 0);
490*35238bceSAndroid Build Coastguard Worker         glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &params[0]);
491*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
492*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
493*35238bceSAndroid Build Coastguard Worker 
494*35238bceSAndroid Build Coastguard Worker         glDeleteBuffers(1, &buf);
495*35238bceSAndroid Build Coastguard Worker     });
496*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_framebuffer_attachment_parameteriv, "Invalid glGetFramebufferAttachmentParameteriv() usage", {
497*35238bceSAndroid Build Coastguard Worker         // GL_MAJOR_VERSION query does not exist on GLES2
498*35238bceSAndroid Build Coastguard Worker         // so succeeding query implies GLES3+ hardware.
499*35238bceSAndroid Build Coastguard Worker         bool isES3Compatible    = false;
500*35238bceSAndroid Build Coastguard Worker         glw::GLint majorVersion = 0;
501*35238bceSAndroid Build Coastguard Worker         glGetIntegerv(GL_MAJOR_VERSION, &majorVersion);
502*35238bceSAndroid Build Coastguard Worker         if (glGetError() == GL_NO_ERROR)
503*35238bceSAndroid Build Coastguard Worker             isES3Compatible = true;
504*35238bceSAndroid Build Coastguard Worker 
505*35238bceSAndroid Build Coastguard Worker         GLint params[1] = {-1};
506*35238bceSAndroid Build Coastguard Worker         GLuint fbo;
507*35238bceSAndroid Build Coastguard Worker         glGenFramebuffers(1, &fbo);
508*35238bceSAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, fbo);
509*35238bceSAndroid Build Coastguard Worker 
510*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER.");
511*35238bceSAndroid Build Coastguard Worker         glGetFramebufferAttachmentParameteriv(-1, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
512*35238bceSAndroid Build Coastguard Worker                                               &params[0]);
513*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
514*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
515*35238bceSAndroid Build Coastguard Worker 
516*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if there is no attached object at the named "
517*35238bceSAndroid Build Coastguard Worker                                       "attachment point and pname is not GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE.");
518*35238bceSAndroid Build Coastguard Worker         if (isES3Compatible)
519*35238bceSAndroid Build Coastguard Worker         {
520*35238bceSAndroid Build Coastguard Worker             glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
521*35238bceSAndroid Build Coastguard Worker                                                   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]); // TYPE is GL_NONE
522*35238bceSAndroid Build Coastguard Worker             expectError(GL_NO_ERROR);
523*35238bceSAndroid Build Coastguard Worker             glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
524*35238bceSAndroid Build Coastguard Worker                                                   GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,
525*35238bceSAndroid Build Coastguard Worker                                                   &params[0]); // TYPE is GL_NONE
526*35238bceSAndroid Build Coastguard Worker             expectError(GL_INVALID_OPERATION);
527*35238bceSAndroid Build Coastguard Worker         }
528*35238bceSAndroid Build Coastguard Worker         else
529*35238bceSAndroid Build Coastguard Worker         {
530*35238bceSAndroid Build Coastguard Worker             glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
531*35238bceSAndroid Build Coastguard Worker                                                   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);
532*35238bceSAndroid Build Coastguard Worker             expectError(GL_INVALID_ENUM);
533*35238bceSAndroid Build Coastguard Worker         }
534*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
535*35238bceSAndroid Build Coastguard Worker 
536*35238bceSAndroid Build Coastguard Worker         if (!isES3Compatible)
537*35238bceSAndroid Build Coastguard Worker         {
538*35238bceSAndroid Build Coastguard Worker             m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if the attached object at the named attachment "
539*35238bceSAndroid Build Coastguard Worker                                           "point is incompatible with pname.");
540*35238bceSAndroid Build Coastguard Worker             GLint attachmentObjectType = -1;
541*35238bceSAndroid Build Coastguard Worker             glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
542*35238bceSAndroid Build Coastguard Worker                                                   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &attachmentObjectType);
543*35238bceSAndroid Build Coastguard Worker             expectError(GL_NO_ERROR);
544*35238bceSAndroid Build Coastguard Worker 
545*35238bceSAndroid Build Coastguard Worker             if (attachmentObjectType == GL_RENDERBUFFER)
546*35238bceSAndroid Build Coastguard Worker                 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
547*35238bceSAndroid Build Coastguard Worker                                                       GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &params[0]);
548*35238bceSAndroid Build Coastguard Worker             else if (attachmentObjectType == GL_TEXTURE)
549*35238bceSAndroid Build Coastguard Worker                 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, &params[0]);
550*35238bceSAndroid Build Coastguard Worker             else if (attachmentObjectType == GL_NONE)
551*35238bceSAndroid Build Coastguard Worker                 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
552*35238bceSAndroid Build Coastguard Worker                                                       GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);
553*35238bceSAndroid Build Coastguard Worker             else
554*35238bceSAndroid Build Coastguard Worker                 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL,
555*35238bceSAndroid Build Coastguard Worker                                         "Invalid return value from glGetFramebufferAttachmentParameteriv()");
556*35238bceSAndroid Build Coastguard Worker 
557*35238bceSAndroid Build Coastguard Worker             expectError(GL_INVALID_ENUM);
558*35238bceSAndroid Build Coastguard Worker             m_log << TestLog::EndSection;
559*35238bceSAndroid Build Coastguard Worker         }
560*35238bceSAndroid Build Coastguard Worker 
561*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
562*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_OPERATION is generated if the default framebuffer object name 0 is bound.");
563*35238bceSAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, 0);
564*35238bceSAndroid Build Coastguard Worker         glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
565*35238bceSAndroid Build Coastguard Worker                                               GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &params[0]);
566*35238bceSAndroid Build Coastguard Worker         if (isES3Compatible)
567*35238bceSAndroid Build Coastguard Worker             expectError(GL_INVALID_OPERATION, GL_INVALID_ENUM);
568*35238bceSAndroid Build Coastguard Worker         else
569*35238bceSAndroid Build Coastguard Worker             expectError(GL_INVALID_OPERATION);
570*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
571*35238bceSAndroid Build Coastguard Worker 
572*35238bceSAndroid Build Coastguard Worker         glDeleteFramebuffers(1, &fbo);
573*35238bceSAndroid Build Coastguard Worker     });
574*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_renderbuffer_parameteriv, "Invalid glGetRenderbufferParameteriv() usage", {
575*35238bceSAndroid Build Coastguard Worker         GLint params[1];
576*35238bceSAndroid Build Coastguard Worker         GLuint rbo;
577*35238bceSAndroid Build Coastguard Worker         glGenRenderbuffers(1, &rbo);
578*35238bceSAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, rbo);
579*35238bceSAndroid Build Coastguard Worker 
580*35238bceSAndroid Build Coastguard Worker         deMemset(&params[0], 0, sizeof(params));
581*35238bceSAndroid Build Coastguard Worker 
582*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
583*35238bceSAndroid Build Coastguard Worker         glGetRenderbufferParameteriv(-1, GL_RENDERBUFFER_WIDTH, &params[0]);
584*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
585*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
586*35238bceSAndroid Build Coastguard Worker 
587*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
588*35238bceSAndroid Build Coastguard Worker         glGetRenderbufferParameteriv(GL_RENDERBUFFER, -1, &params[0]);
589*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
590*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
591*35238bceSAndroid Build Coastguard Worker 
592*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
593*35238bceSAndroid Build Coastguard Worker             "", "GL_INVALID_OPERATION is generated if the reserved renderbuffer object name 0 is bound.");
594*35238bceSAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, 0);
595*35238bceSAndroid Build Coastguard Worker         glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &params[0]);
596*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_OPERATION);
597*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
598*35238bceSAndroid Build Coastguard Worker 
599*35238bceSAndroid Build Coastguard Worker         glDeleteRenderbuffers(1, &rbo);
600*35238bceSAndroid Build Coastguard Worker     });
601*35238bceSAndroid Build Coastguard Worker 
602*35238bceSAndroid Build Coastguard Worker     // Enumerated boolean state queries
603*35238bceSAndroid Build Coastguard Worker 
604*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(get_is_enabled, "Invalid glIsEnabled() usage", {
605*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not an accepted value.");
606*35238bceSAndroid Build Coastguard Worker         glIsEnabled(-1);
607*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
608*35238bceSAndroid Build Coastguard Worker         glIsEnabled(GL_TRIANGLES);
609*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
610*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
611*35238bceSAndroid Build Coastguard Worker     });
612*35238bceSAndroid Build Coastguard Worker 
613*35238bceSAndroid Build Coastguard Worker     // Hints
614*35238bceSAndroid Build Coastguard Worker 
615*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(hint, "Invalid glHint() usage", {
616*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("",
617*35238bceSAndroid Build Coastguard Worker                                   "GL_INVALID_ENUM is generated if either target or mode is not an accepted value.");
618*35238bceSAndroid Build Coastguard Worker         glHint(GL_GENERATE_MIPMAP_HINT, -1);
619*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
620*35238bceSAndroid Build Coastguard Worker         glHint(-1, GL_FASTEST);
621*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
622*35238bceSAndroid Build Coastguard Worker         glHint(-1, -1);
623*35238bceSAndroid Build Coastguard Worker         expectError(GL_INVALID_ENUM);
624*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
625*35238bceSAndroid Build Coastguard Worker     });
626*35238bceSAndroid Build Coastguard Worker 
627*35238bceSAndroid Build Coastguard Worker     // Named object usage
628*35238bceSAndroid Build Coastguard Worker 
629*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(is_buffer, "Invalid glIsBuffer() usage", {
630*35238bceSAndroid Build Coastguard Worker         GLuint buffer = 0;
631*35238bceSAndroid Build Coastguard Worker         GLboolean isBuffer;
632*35238bceSAndroid Build Coastguard Worker 
633*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "A name returned by glGenBuffers, but not yet associated with a buffer object by "
634*35238bceSAndroid Build Coastguard Worker                                       "calling glBindBuffer, is not the name of a buffer object.");
635*35238bceSAndroid Build Coastguard Worker         isBuffer = glIsBuffer(buffer);
636*35238bceSAndroid Build Coastguard Worker         checkBooleans(isBuffer, GL_FALSE);
637*35238bceSAndroid Build Coastguard Worker 
638*35238bceSAndroid Build Coastguard Worker         glGenBuffers(1, &buffer);
639*35238bceSAndroid Build Coastguard Worker         isBuffer = glIsBuffer(buffer);
640*35238bceSAndroid Build Coastguard Worker         checkBooleans(isBuffer, GL_FALSE);
641*35238bceSAndroid Build Coastguard Worker 
642*35238bceSAndroid Build Coastguard Worker         glBindBuffer(GL_ARRAY_BUFFER, buffer);
643*35238bceSAndroid Build Coastguard Worker         isBuffer = glIsBuffer(buffer);
644*35238bceSAndroid Build Coastguard Worker         checkBooleans(isBuffer, GL_TRUE);
645*35238bceSAndroid Build Coastguard Worker 
646*35238bceSAndroid Build Coastguard Worker         glBindBuffer(GL_ARRAY_BUFFER, 0);
647*35238bceSAndroid Build Coastguard Worker         glDeleteBuffers(1, &buffer);
648*35238bceSAndroid Build Coastguard Worker         isBuffer = glIsBuffer(buffer);
649*35238bceSAndroid Build Coastguard Worker         checkBooleans(isBuffer, GL_FALSE);
650*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
651*35238bceSAndroid Build Coastguard Worker 
652*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
653*35238bceSAndroid Build Coastguard Worker     });
654*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(is_framebuffer, "Invalid glIsFramebuffer() usage", {
655*35238bceSAndroid Build Coastguard Worker         GLuint fbo = 0;
656*35238bceSAndroid Build Coastguard Worker         GLboolean isFbo;
657*35238bceSAndroid Build Coastguard Worker 
658*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "A name returned by glGenFramebuffers, but not yet bound through a call to "
659*35238bceSAndroid Build Coastguard Worker                                       "glBindFramebuffer is not the name of a framebuffer object.");
660*35238bceSAndroid Build Coastguard Worker         isFbo = glIsFramebuffer(fbo);
661*35238bceSAndroid Build Coastguard Worker         checkBooleans(isFbo, GL_FALSE);
662*35238bceSAndroid Build Coastguard Worker 
663*35238bceSAndroid Build Coastguard Worker         glGenFramebuffers(1, &fbo);
664*35238bceSAndroid Build Coastguard Worker         isFbo = glIsFramebuffer(fbo);
665*35238bceSAndroid Build Coastguard Worker         checkBooleans(isFbo, GL_FALSE);
666*35238bceSAndroid Build Coastguard Worker 
667*35238bceSAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, fbo);
668*35238bceSAndroid Build Coastguard Worker         isFbo = glIsFramebuffer(fbo);
669*35238bceSAndroid Build Coastguard Worker         checkBooleans(isFbo, GL_TRUE);
670*35238bceSAndroid Build Coastguard Worker 
671*35238bceSAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, 0);
672*35238bceSAndroid Build Coastguard Worker         glDeleteFramebuffers(1, &fbo);
673*35238bceSAndroid Build Coastguard Worker         isFbo = glIsFramebuffer(fbo);
674*35238bceSAndroid Build Coastguard Worker         checkBooleans(isFbo, GL_FALSE);
675*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
676*35238bceSAndroid Build Coastguard Worker 
677*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
678*35238bceSAndroid Build Coastguard Worker     });
679*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(is_program, "Invalid glIsProgram() usage", {
680*35238bceSAndroid Build Coastguard Worker         GLuint program = 0;
681*35238bceSAndroid Build Coastguard Worker         GLboolean isProgram;
682*35238bceSAndroid Build Coastguard Worker 
683*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "A name created with glCreateProgram, and not yet deleted with glDeleteProgram "
684*35238bceSAndroid Build Coastguard Worker                                       "is a name of a program object.");
685*35238bceSAndroid Build Coastguard Worker         isProgram = glIsProgram(program);
686*35238bceSAndroid Build Coastguard Worker         checkBooleans(isProgram, GL_FALSE);
687*35238bceSAndroid Build Coastguard Worker 
688*35238bceSAndroid Build Coastguard Worker         program   = glCreateProgram();
689*35238bceSAndroid Build Coastguard Worker         isProgram = glIsProgram(program);
690*35238bceSAndroid Build Coastguard Worker         checkBooleans(isProgram, GL_TRUE);
691*35238bceSAndroid Build Coastguard Worker 
692*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(program);
693*35238bceSAndroid Build Coastguard Worker         isProgram = glIsProgram(program);
694*35238bceSAndroid Build Coastguard Worker         checkBooleans(isProgram, GL_FALSE);
695*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
696*35238bceSAndroid Build Coastguard Worker 
697*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
698*35238bceSAndroid Build Coastguard Worker     });
699*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(is_renderbuffer, "Invalid glIsRenderbuffer() usage", {
700*35238bceSAndroid Build Coastguard Worker         GLuint rbo = 0;
701*35238bceSAndroid Build Coastguard Worker         GLboolean isRbo;
702*35238bceSAndroid Build Coastguard Worker 
703*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(
704*35238bceSAndroid Build Coastguard Worker             "", "A name returned by glGenRenderbuffers, but not yet bound through a call to glBindRenderbuffer or "
705*35238bceSAndroid Build Coastguard Worker                 "glFramebufferRenderbuffer is not the name of a renderbuffer object.");
706*35238bceSAndroid Build Coastguard Worker         isRbo = glIsRenderbuffer(rbo);
707*35238bceSAndroid Build Coastguard Worker         checkBooleans(isRbo, GL_FALSE);
708*35238bceSAndroid Build Coastguard Worker 
709*35238bceSAndroid Build Coastguard Worker         glGenRenderbuffers(1, &rbo);
710*35238bceSAndroid Build Coastguard Worker         isRbo = glIsRenderbuffer(rbo);
711*35238bceSAndroid Build Coastguard Worker         checkBooleans(isRbo, GL_FALSE);
712*35238bceSAndroid Build Coastguard Worker 
713*35238bceSAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, rbo);
714*35238bceSAndroid Build Coastguard Worker         isRbo = glIsRenderbuffer(rbo);
715*35238bceSAndroid Build Coastguard Worker         checkBooleans(isRbo, GL_TRUE);
716*35238bceSAndroid Build Coastguard Worker 
717*35238bceSAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, 0);
718*35238bceSAndroid Build Coastguard Worker         glDeleteRenderbuffers(1, &rbo);
719*35238bceSAndroid Build Coastguard Worker         isRbo = glIsRenderbuffer(rbo);
720*35238bceSAndroid Build Coastguard Worker         checkBooleans(isRbo, GL_FALSE);
721*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
722*35238bceSAndroid Build Coastguard Worker 
723*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
724*35238bceSAndroid Build Coastguard Worker     });
725*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(is_shader, "Invalid glIsShader() usage", {
726*35238bceSAndroid Build Coastguard Worker         GLuint shader = 0;
727*35238bceSAndroid Build Coastguard Worker         GLboolean isShader;
728*35238bceSAndroid Build Coastguard Worker 
729*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "A name created with glCreateShader, and not yet deleted with glDeleteShader is "
730*35238bceSAndroid Build Coastguard Worker                                       "a name of a shader object.");
731*35238bceSAndroid Build Coastguard Worker         isShader = glIsProgram(shader);
732*35238bceSAndroid Build Coastguard Worker         checkBooleans(isShader, GL_FALSE);
733*35238bceSAndroid Build Coastguard Worker 
734*35238bceSAndroid Build Coastguard Worker         shader   = glCreateShader(GL_VERTEX_SHADER);
735*35238bceSAndroid Build Coastguard Worker         isShader = glIsShader(shader);
736*35238bceSAndroid Build Coastguard Worker         checkBooleans(isShader, GL_TRUE);
737*35238bceSAndroid Build Coastguard Worker 
738*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shader);
739*35238bceSAndroid Build Coastguard Worker         isShader = glIsShader(shader);
740*35238bceSAndroid Build Coastguard Worker         checkBooleans(isShader, GL_FALSE);
741*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
742*35238bceSAndroid Build Coastguard Worker 
743*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
744*35238bceSAndroid Build Coastguard Worker     });
745*35238bceSAndroid Build Coastguard Worker     ES2F_ADD_API_CASE(is_texture, "Invalid glIsTexture() usage", {
746*35238bceSAndroid Build Coastguard Worker         GLuint texture = 0;
747*35238bceSAndroid Build Coastguard Worker         GLboolean isTexture;
748*35238bceSAndroid Build Coastguard Worker 
749*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section("", "A name returned by glGenTextures, but not yet bound through a call to "
750*35238bceSAndroid Build Coastguard Worker                                       "glBindTexture is not the name of a texture.");
751*35238bceSAndroid Build Coastguard Worker         isTexture = glIsTexture(texture);
752*35238bceSAndroid Build Coastguard Worker         checkBooleans(isTexture, GL_FALSE);
753*35238bceSAndroid Build Coastguard Worker 
754*35238bceSAndroid Build Coastguard Worker         glGenTextures(1, &texture);
755*35238bceSAndroid Build Coastguard Worker         isTexture = glIsTexture(texture);
756*35238bceSAndroid Build Coastguard Worker         checkBooleans(isTexture, GL_FALSE);
757*35238bceSAndroid Build Coastguard Worker 
758*35238bceSAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_2D, texture);
759*35238bceSAndroid Build Coastguard Worker         isTexture = glIsTexture(texture);
760*35238bceSAndroid Build Coastguard Worker         checkBooleans(isTexture, GL_TRUE);
761*35238bceSAndroid Build Coastguard Worker 
762*35238bceSAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_2D, 0);
763*35238bceSAndroid Build Coastguard Worker         glDeleteTextures(1, &texture);
764*35238bceSAndroid Build Coastguard Worker         isTexture = glIsTexture(texture);
765*35238bceSAndroid Build Coastguard Worker         checkBooleans(isTexture, GL_FALSE);
766*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
767*35238bceSAndroid Build Coastguard Worker 
768*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
769*35238bceSAndroid Build Coastguard Worker     });
770*35238bceSAndroid Build Coastguard Worker }
771*35238bceSAndroid Build Coastguard Worker 
772*35238bceSAndroid Build Coastguard Worker } // namespace Functional
773*35238bceSAndroid Build Coastguard Worker } // namespace gles2
774*35238bceSAndroid Build Coastguard Worker } // namespace deqp
775