1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.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 "es3fNegativeStateApiTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "es3fApiCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "deMemory.h"
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard Worker #include "glwDefs.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
32*35238bceSAndroid Build Coastguard Worker
33*35238bceSAndroid Build Coastguard Worker using namespace glw; // GL types
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Worker namespace deqp
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker namespace gles3
38*35238bceSAndroid Build Coastguard Worker {
39*35238bceSAndroid Build Coastguard Worker namespace Functional
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker
42*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
43*35238bceSAndroid Build Coastguard Worker
44*35238bceSAndroid Build Coastguard Worker static const char *uniformTestVertSource = "#version 300 es\n"
45*35238bceSAndroid Build Coastguard Worker "uniform mediump vec4 vUnif_vec4;\n"
46*35238bceSAndroid Build Coastguard Worker "in mediump vec4 attr;"
47*35238bceSAndroid Build Coastguard Worker "layout(shared) uniform Block { mediump vec4 blockVar; };\n"
48*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
49*35238bceSAndroid Build Coastguard Worker "{\n"
50*35238bceSAndroid Build Coastguard Worker " gl_Position = vUnif_vec4 + blockVar + attr;\n"
51*35238bceSAndroid Build Coastguard Worker "}\n\0";
52*35238bceSAndroid Build Coastguard Worker static const char *uniformTestFragSource = "#version 300 es\n"
53*35238bceSAndroid Build Coastguard Worker "uniform mediump ivec4 fUnif_ivec4;\n"
54*35238bceSAndroid Build Coastguard Worker "uniform mediump uvec4 fUnif_uvec4;\n"
55*35238bceSAndroid Build Coastguard Worker "layout(location = 0) out mediump vec4 fragColor;"
56*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
57*35238bceSAndroid Build Coastguard Worker "{\n"
58*35238bceSAndroid Build Coastguard Worker " fragColor = vec4(vec4(fUnif_ivec4) + vec4(fUnif_uvec4));\n"
59*35238bceSAndroid Build Coastguard Worker "}\n\0";
60*35238bceSAndroid Build Coastguard Worker
NegativeStateApiTests(Context & context)61*35238bceSAndroid Build Coastguard Worker NegativeStateApiTests::NegativeStateApiTests(Context &context)
62*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "state", "Negative GL State API Cases")
63*35238bceSAndroid Build Coastguard Worker {
64*35238bceSAndroid Build Coastguard Worker }
65*35238bceSAndroid Build Coastguard Worker
~NegativeStateApiTests(void)66*35238bceSAndroid Build Coastguard Worker NegativeStateApiTests::~NegativeStateApiTests(void)
67*35238bceSAndroid Build Coastguard Worker {
68*35238bceSAndroid Build Coastguard Worker }
69*35238bceSAndroid Build Coastguard Worker
init(void)70*35238bceSAndroid Build Coastguard Worker void NegativeStateApiTests::init(void)
71*35238bceSAndroid Build Coastguard Worker {
72*35238bceSAndroid Build Coastguard Worker // Enabling & disabling states
73*35238bceSAndroid Build Coastguard Worker
74*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(enable, "Invalid glEnable() usage", {
75*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
76*35238bceSAndroid Build Coastguard Worker glEnable(-1);
77*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
78*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
79*35238bceSAndroid Build Coastguard Worker });
80*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(disable, "Invalid glDisable() usage", {
81*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
82*35238bceSAndroid Build Coastguard Worker glDisable(-1);
83*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
84*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
85*35238bceSAndroid Build Coastguard Worker });
86*35238bceSAndroid Build Coastguard Worker
87*35238bceSAndroid Build Coastguard Worker // Simple state queries
88*35238bceSAndroid Build Coastguard Worker
89*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_booleanv, "Invalid glGetBooleanv() 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 GLboolean params = GL_FALSE;
92*35238bceSAndroid Build Coastguard Worker glGetBooleanv(-1, ¶ms);
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 ES3F_ADD_API_CASE(get_floatv, "Invalid glGetFloatv() 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 GLfloat params = 0.0f;
99*35238bceSAndroid Build Coastguard Worker glGetFloatv(-1, ¶ms);
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 ES3F_ADD_API_CASE(get_integerv, "Invalid glGetIntegerv() usage", {
104*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
105*35238bceSAndroid Build Coastguard Worker GLint params = -1;
106*35238bceSAndroid Build Coastguard Worker glGetIntegerv(-1, ¶ms);
107*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
108*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
109*35238bceSAndroid Build Coastguard Worker });
110*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_integer64v, "Invalid glGetInteger64v() usage", {
111*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
112*35238bceSAndroid Build Coastguard Worker GLint64 params = -1;
113*35238bceSAndroid Build Coastguard Worker glGetInteger64v(-1, ¶ms);
114*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
115*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
116*35238bceSAndroid Build Coastguard Worker });
117*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_integeri_v, "Invalid glGetIntegeri_v() usage", {
118*35238bceSAndroid Build Coastguard Worker GLint data = -1;
119*35238bceSAndroid Build Coastguard Worker GLint maxUniformBufferBindings;
120*35238bceSAndroid Build Coastguard Worker
121*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
122*35238bceSAndroid Build Coastguard Worker glGetIntegeri_v(-1, 0, &data);
123*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
124*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
125*35238bceSAndroid Build Coastguard Worker
126*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
127*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is outside of the valid range for the indexed state target.");
128*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
129*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
130*35238bceSAndroid Build Coastguard Worker glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, maxUniformBufferBindings, &data);
131*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
132*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
133*35238bceSAndroid Build Coastguard Worker });
134*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_integer64i_v, "Invalid glGetInteger64i_v() usage", {
135*35238bceSAndroid Build Coastguard Worker GLint64 data = (GLint64)-1;
136*35238bceSAndroid Build Coastguard Worker ;
137*35238bceSAndroid Build Coastguard Worker GLint maxUniformBufferBindings;
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
140*35238bceSAndroid Build Coastguard Worker glGetInteger64i_v(-1, 0, &data);
141*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
142*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
143*35238bceSAndroid Build Coastguard Worker
144*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
145*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is outside of the valid range for the indexed state target.");
146*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
147*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
148*35238bceSAndroid Build Coastguard Worker glGetInteger64i_v(GL_UNIFORM_BUFFER_START, maxUniformBufferBindings, &data);
149*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
150*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
151*35238bceSAndroid Build Coastguard Worker });
152*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_string, "Invalid glGetString() usage", {
153*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
154*35238bceSAndroid Build Coastguard Worker glGetString(-1);
155*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
156*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
157*35238bceSAndroid Build Coastguard Worker });
158*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_stringi, "Invalid glGetStringi() usage", {
159*35238bceSAndroid Build Coastguard Worker GLint numExtensions;
160*35238bceSAndroid Build Coastguard Worker
161*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
162*35238bceSAndroid Build Coastguard Worker glGetStringi(-1, 0);
163*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
164*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
165*35238bceSAndroid Build Coastguard Worker
166*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
167*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is outside the valid range for indexed state name.");
168*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
169*35238bceSAndroid Build Coastguard Worker glGetStringi(GL_EXTENSIONS, numExtensions);
170*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
171*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
172*35238bceSAndroid Build Coastguard Worker });
173*35238bceSAndroid Build Coastguard Worker
174*35238bceSAndroid Build Coastguard Worker // Enumerated state queries: Shaders
175*35238bceSAndroid Build Coastguard Worker
176*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_attached_shaders, "Invalid glGetAttachedShaders() usage", {
177*35238bceSAndroid Build Coastguard Worker GLuint shaders[1];
178*35238bceSAndroid Build Coastguard Worker GLuint shaderObject = glCreateShader(GL_VERTEX_SHADER);
179*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
180*35238bceSAndroid Build Coastguard Worker GLsizei count[1];
181*35238bceSAndroid Build Coastguard Worker
182*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
183*35238bceSAndroid Build Coastguard Worker glGetAttachedShaders(-1, 1, &count[0], &shaders[0]);
184*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
185*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
186*35238bceSAndroid Build Coastguard Worker
187*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
188*35238bceSAndroid Build Coastguard Worker glGetAttachedShaders(shaderObject, 1, &count[0], &shaders[0]);
189*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
190*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
191*35238bceSAndroid Build Coastguard Worker
192*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxCount is less than 0.");
193*35238bceSAndroid Build Coastguard Worker glGetAttachedShaders(program, -1, &count[0], &shaders[0]);
194*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
195*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
196*35238bceSAndroid Build Coastguard Worker
197*35238bceSAndroid Build Coastguard Worker glDeleteShader(shaderObject);
198*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
199*35238bceSAndroid Build Coastguard Worker });
200*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_shaderiv, "Invalid glGetShaderiv() usage", {
201*35238bceSAndroid Build Coastguard Worker GLboolean shaderCompilerSupported;
202*35238bceSAndroid Build Coastguard Worker glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
203*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_SHADER_COMPILER = " << (shaderCompilerSupported ? "GL_TRUE" : "GL_FALSE")
204*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
207*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
208*35238bceSAndroid Build Coastguard Worker GLint param[1] = {-1};
209*35238bceSAndroid Build Coastguard Worker
210*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
211*35238bceSAndroid Build Coastguard Worker glGetShaderiv(shader, -1, ¶m[0]);
212*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
213*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
214*35238bceSAndroid Build Coastguard Worker
215*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
216*35238bceSAndroid Build Coastguard Worker glGetShaderiv(-1, GL_SHADER_TYPE, ¶m[0]);
217*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
218*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
219*35238bceSAndroid Build Coastguard Worker
220*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader does not refer to a shader object.");
221*35238bceSAndroid Build Coastguard Worker glGetShaderiv(program, GL_SHADER_TYPE, ¶m[0]);
222*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
223*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
224*35238bceSAndroid Build Coastguard Worker
225*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
226*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
227*35238bceSAndroid Build Coastguard Worker });
228*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_shader_info_log, "Invalid glGetShaderInfoLog() usage", {
229*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
230*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
231*35238bceSAndroid Build Coastguard Worker GLsizei length[1] = {0};
232*35238bceSAndroid Build Coastguard Worker char infoLog[128] = {0};
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
235*35238bceSAndroid Build Coastguard Worker glGetShaderInfoLog(-1, 128, &length[0], &infoLog[0]);
236*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
237*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
238*35238bceSAndroid Build Coastguard Worker
239*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object.");
240*35238bceSAndroid Build Coastguard Worker glGetShaderInfoLog(program, 128, &length[0], &infoLog[0]);
241*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
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_VALUE is generated if maxLength is less than 0.");
245*35238bceSAndroid Build Coastguard Worker glGetShaderInfoLog(shader, -1, &length[0], &infoLog[0]);
246*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
247*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
248*35238bceSAndroid Build Coastguard Worker
249*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
250*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
251*35238bceSAndroid Build Coastguard Worker });
252*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_shader_precision_format, "Invalid glGetShaderPrecisionFormat() usage", {
253*35238bceSAndroid Build Coastguard Worker GLboolean shaderCompilerSupported;
254*35238bceSAndroid Build Coastguard Worker glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
255*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_SHADER_COMPILER = " << (shaderCompilerSupported ? "GL_TRUE" : "GL_FALSE")
256*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker GLint range[2];
259*35238bceSAndroid Build Coastguard Worker GLint precision[1];
260*35238bceSAndroid Build Coastguard Worker
261*35238bceSAndroid Build Coastguard Worker deMemset(&range[0], 0xcd, sizeof(range));
262*35238bceSAndroid Build Coastguard Worker deMemset(&precision[0], 0xcd, sizeof(precision));
263*35238bceSAndroid Build Coastguard Worker
264*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
265*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_ENUM is generated if shaderType or precisionType is not an accepted value.");
266*35238bceSAndroid Build Coastguard Worker glGetShaderPrecisionFormat(-1, GL_MEDIUM_FLOAT, &range[0], &precision[0]);
267*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
268*35238bceSAndroid Build Coastguard Worker glGetShaderPrecisionFormat(GL_VERTEX_SHADER, -1, &range[0], &precision[0]);
269*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
270*35238bceSAndroid Build Coastguard Worker glGetShaderPrecisionFormat(-1, -1, &range[0], &precision[0]);
271*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
272*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
273*35238bceSAndroid Build Coastguard Worker });
274*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_shader_source, "Invalid glGetShaderSource() usage", {
275*35238bceSAndroid Build Coastguard Worker GLsizei length[1] = {0};
276*35238bceSAndroid Build Coastguard Worker char source[1] = {0};
277*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
278*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
279*35238bceSAndroid Build Coastguard Worker
280*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
281*35238bceSAndroid Build Coastguard Worker glGetShaderSource(-1, 1, &length[0], &source[0]);
282*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
283*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
284*35238bceSAndroid Build Coastguard Worker
285*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object.");
286*35238bceSAndroid Build Coastguard Worker glGetShaderSource(program, 1, &length[0], &source[0]);
287*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
288*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
289*35238bceSAndroid Build Coastguard Worker
290*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
291*35238bceSAndroid Build Coastguard Worker glGetShaderSource(shader, -1, &length[0], &source[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 glDeleteProgram(program);
296*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
297*35238bceSAndroid Build Coastguard Worker });
298*35238bceSAndroid Build Coastguard Worker
299*35238bceSAndroid Build Coastguard Worker // Enumerated state queries: Programs
300*35238bceSAndroid Build Coastguard Worker
301*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_programiv, "Invalid glGetProgramiv() usage", {
302*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
303*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
304*35238bceSAndroid Build Coastguard Worker GLint params[1] = {-1};
305*35238bceSAndroid Build Coastguard Worker
306*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
307*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program, -1, ¶ms[0]);
308*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
309*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
310*35238bceSAndroid Build Coastguard Worker
311*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
312*35238bceSAndroid Build Coastguard Worker glGetProgramiv(-1, GL_LINK_STATUS, ¶ms[0]);
313*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
314*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
317*35238bceSAndroid Build Coastguard Worker "GL_INVALID_OPERATION is generated if program does not refer to a program object.");
318*35238bceSAndroid Build Coastguard Worker glGetProgramiv(shader, GL_LINK_STATUS, ¶ms[0]);
319*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
320*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
321*35238bceSAndroid Build Coastguard Worker
322*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
323*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
324*35238bceSAndroid Build Coastguard Worker });
325*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_program_info_log, "Invalid glGetProgramInfoLog() usage", {
326*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
327*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
328*35238bceSAndroid Build Coastguard Worker GLsizei length[1] = {0};
329*35238bceSAndroid Build Coastguard Worker char infoLog[1] = {0};
330*35238bceSAndroid Build Coastguard Worker
331*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
332*35238bceSAndroid Build Coastguard Worker glGetProgramInfoLog(-1, 1, &length[0], &infoLog[0]);
333*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
334*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
335*35238bceSAndroid Build Coastguard Worker
336*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
337*35238bceSAndroid Build Coastguard Worker glGetProgramInfoLog(shader, 1, &length[0], &infoLog[0]);
338*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
339*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
340*35238bceSAndroid Build Coastguard Worker
341*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0.");
342*35238bceSAndroid Build Coastguard Worker glGetProgramInfoLog(program, -1, &length[0], &infoLog[0]);
343*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
344*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
345*35238bceSAndroid Build Coastguard Worker
346*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
347*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
348*35238bceSAndroid Build Coastguard Worker });
349*35238bceSAndroid Build Coastguard Worker
350*35238bceSAndroid Build Coastguard Worker // Enumerated state queries: Shader variables
351*35238bceSAndroid Build Coastguard Worker
352*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_tex_parameterfv, "Invalid glGetTexParameterfv() usage", {
353*35238bceSAndroid Build Coastguard Worker GLfloat params[1] = {0.0f};
354*35238bceSAndroid Build Coastguard Worker
355*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
356*35238bceSAndroid Build Coastguard Worker glGetTexParameterfv(-1, GL_TEXTURE_MAG_FILTER, ¶ms[0]);
357*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
358*35238bceSAndroid Build Coastguard Worker glGetTexParameterfv(GL_TEXTURE_2D, -1, ¶ms[0]);
359*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
360*35238bceSAndroid Build Coastguard Worker glGetTexParameterfv(-1, -1, ¶ms[0]);
361*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
362*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
363*35238bceSAndroid Build Coastguard Worker });
364*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_tex_parameteriv, "Invalid glGetTexParameteriv() usage", {
365*35238bceSAndroid Build Coastguard Worker GLint params[1] = {0};
366*35238bceSAndroid Build Coastguard Worker
367*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
368*35238bceSAndroid Build Coastguard Worker glGetTexParameteriv(-1, GL_TEXTURE_MAG_FILTER, ¶ms[0]);
369*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
370*35238bceSAndroid Build Coastguard Worker glGetTexParameteriv(GL_TEXTURE_2D, -1, ¶ms[0]);
371*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
372*35238bceSAndroid Build Coastguard Worker glGetTexParameteriv(-1, -1, ¶ms[0]);
373*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
374*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
375*35238bceSAndroid Build Coastguard Worker });
376*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_uniformfv, "Invalid glGetUniformfv() usage", {
377*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
378*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
379*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
380*35238bceSAndroid Build Coastguard Worker
381*35238bceSAndroid Build Coastguard Worker GLint unif = glGetUniformLocation(program.getProgram(), "vUnif_vec4"); // vec4
382*35238bceSAndroid Build Coastguard Worker if (unif == -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 GLfloat params[4] = {0.0f};
388*35238bceSAndroid Build Coastguard Worker
389*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
390*35238bceSAndroid Build Coastguard Worker glGetUniformfv(-1, unif, ¶ms[0]);
391*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
392*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
393*35238bceSAndroid Build Coastguard Worker
394*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
395*35238bceSAndroid Build Coastguard Worker glGetUniformfv(shader, unif, ¶ms[0]);
396*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
397*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
398*35238bceSAndroid Build Coastguard Worker
399*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
400*35238bceSAndroid Build Coastguard Worker glGetUniformfv(programEmpty, unif, ¶ms[0]);
401*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
402*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
403*35238bceSAndroid Build Coastguard Worker
404*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid "
405*35238bceSAndroid Build Coastguard Worker "uniform variable location for the specified program object.");
406*35238bceSAndroid Build Coastguard Worker glGetUniformfv(program.getProgram(), -1, ¶ms[0]);
407*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
408*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
409*35238bceSAndroid Build Coastguard Worker
410*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
411*35238bceSAndroid Build Coastguard Worker glDeleteProgram(programEmpty);
412*35238bceSAndroid Build Coastguard Worker });
413*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_uniformiv, "Invalid glGetUniformiv() usage", {
414*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
415*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
416*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
417*35238bceSAndroid Build Coastguard Worker
418*35238bceSAndroid Build Coastguard Worker GLint unif = glGetUniformLocation(program.getProgram(), "fUnif_ivec4"); // ivec4
419*35238bceSAndroid Build Coastguard Worker if (unif == -1)
420*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
421*35238bceSAndroid Build Coastguard Worker
422*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
423*35238bceSAndroid Build Coastguard Worker GLuint programEmpty = glCreateProgram();
424*35238bceSAndroid Build Coastguard Worker GLint params[4] = {0};
425*35238bceSAndroid Build Coastguard Worker
426*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
427*35238bceSAndroid Build Coastguard Worker glGetUniformiv(-1, unif, ¶ms[0]);
428*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
429*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
430*35238bceSAndroid Build Coastguard Worker
431*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
432*35238bceSAndroid Build Coastguard Worker glGetUniformiv(shader, unif, ¶ms[0]);
433*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
434*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
435*35238bceSAndroid Build Coastguard Worker
436*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
437*35238bceSAndroid Build Coastguard Worker glGetUniformiv(programEmpty, unif, ¶ms[0]);
438*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
439*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
440*35238bceSAndroid Build Coastguard Worker
441*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid "
442*35238bceSAndroid Build Coastguard Worker "uniform variable location for the specified program object.");
443*35238bceSAndroid Build Coastguard Worker glGetUniformiv(program.getProgram(), -1, ¶ms[0]);
444*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
445*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
446*35238bceSAndroid Build Coastguard Worker
447*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
448*35238bceSAndroid Build Coastguard Worker glDeleteProgram(programEmpty);
449*35238bceSAndroid Build Coastguard Worker });
450*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_uniformuiv, "Invalid glGetUniformuiv() usage", {
451*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
452*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
453*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
454*35238bceSAndroid Build Coastguard Worker
455*35238bceSAndroid Build Coastguard Worker GLint unif = glGetUniformLocation(program.getProgram(), "fUnif_uvec4"); // uvec4
456*35238bceSAndroid Build Coastguard Worker if (unif == -1)
457*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
458*35238bceSAndroid Build Coastguard Worker
459*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
460*35238bceSAndroid Build Coastguard Worker GLuint programEmpty = glCreateProgram();
461*35238bceSAndroid Build Coastguard Worker GLuint params[4] = {0};
462*35238bceSAndroid Build Coastguard Worker
463*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
464*35238bceSAndroid Build Coastguard Worker glGetUniformuiv(-1, unif, ¶ms[0]);
465*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
466*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
467*35238bceSAndroid Build Coastguard Worker
468*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
469*35238bceSAndroid Build Coastguard Worker glGetUniformuiv(shader, unif, ¶ms[0]);
470*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
471*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
472*35238bceSAndroid Build Coastguard Worker
473*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
474*35238bceSAndroid Build Coastguard Worker glGetUniformuiv(programEmpty, unif, ¶ms[0]);
475*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
476*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
477*35238bceSAndroid Build Coastguard Worker
478*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid "
479*35238bceSAndroid Build Coastguard Worker "uniform variable location for the specified program object.");
480*35238bceSAndroid Build Coastguard Worker glGetUniformuiv(program.getProgram(), -1, ¶ms[0]);
481*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
482*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
483*35238bceSAndroid Build Coastguard Worker
484*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
485*35238bceSAndroid Build Coastguard Worker glDeleteProgram(programEmpty);
486*35238bceSAndroid Build Coastguard Worker });
487*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_active_uniform, "Invalid glGetActiveUniform() usage", {
488*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
489*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
490*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
491*35238bceSAndroid Build Coastguard Worker GLint numActiveUniforms = -1;
492*35238bceSAndroid Build Coastguard Worker
493*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORMS, &numActiveUniforms);
494*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_ACTIVE_UNIFORMS = " << numActiveUniforms << " (expected 4)."
495*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
496*35238bceSAndroid Build Coastguard Worker
497*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
498*35238bceSAndroid Build Coastguard Worker glGetActiveUniform(-1, 0, 0, 0, 0, 0, 0);
499*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
500*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
501*35238bceSAndroid Build Coastguard Worker
502*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
503*35238bceSAndroid Build Coastguard Worker glGetActiveUniform(shader, 0, 0, 0, 0, 0, 0);
504*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
505*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
506*35238bceSAndroid Build Coastguard Worker
507*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to the number "
508*35238bceSAndroid Build Coastguard Worker "of active uniform variables in program.");
509*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
510*35238bceSAndroid Build Coastguard Worker glGetActiveUniform(program.getProgram(), numActiveUniforms, 0, 0, 0, 0, 0);
511*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
512*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
513*35238bceSAndroid Build Coastguard Worker
514*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
515*35238bceSAndroid Build Coastguard Worker glGetActiveUniform(program.getProgram(), 0, -1, 0, 0, 0, 0);
516*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
517*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
518*35238bceSAndroid Build Coastguard Worker
519*35238bceSAndroid Build Coastguard Worker glUseProgram(0);
520*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
521*35238bceSAndroid Build Coastguard Worker });
522*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_active_uniformsiv, "Invalid glGetActiveUniformsiv() usage", {
523*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
524*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
525*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
526*35238bceSAndroid Build Coastguard Worker GLuint unusedUniformIndex = 1;
527*35238bceSAndroid Build Coastguard Worker GLint unusedParamDst = -1;
528*35238bceSAndroid Build Coastguard Worker GLint numActiveUniforms = -1;
529*35238bceSAndroid Build Coastguard Worker
530*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
531*35238bceSAndroid Build Coastguard Worker
532*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORMS, &numActiveUniforms);
533*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_ACTIVE_UNIFORMS = " << numActiveUniforms << " (expected 4)."
534*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
535*35238bceSAndroid Build Coastguard Worker
536*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
537*35238bceSAndroid Build Coastguard Worker glGetActiveUniformsiv(-1, 1, &unusedUniformIndex, GL_UNIFORM_TYPE, &unusedParamDst);
538*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
539*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
540*35238bceSAndroid Build Coastguard Worker
541*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
542*35238bceSAndroid Build Coastguard Worker glGetActiveUniformsiv(shader, 1, &unusedUniformIndex, GL_UNIFORM_TYPE, &unusedParamDst);
543*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
544*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
545*35238bceSAndroid Build Coastguard Worker
546*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if any value in uniformIndices is greater than or "
547*35238bceSAndroid Build Coastguard Worker "equal to the value of GL_ACTIVE_UNIFORMS for program.");
548*35238bceSAndroid Build Coastguard Worker for (int excess = 0; excess <= 2; excess++)
549*35238bceSAndroid Build Coastguard Worker {
550*35238bceSAndroid Build Coastguard Worker std::vector<GLuint> invalidUniformIndices;
551*35238bceSAndroid Build Coastguard Worker invalidUniformIndices.push_back(1);
552*35238bceSAndroid Build Coastguard Worker invalidUniformIndices.push_back(numActiveUniforms - 1 + excess);
553*35238bceSAndroid Build Coastguard Worker invalidUniformIndices.push_back(1);
554*35238bceSAndroid Build Coastguard Worker
555*35238bceSAndroid Build Coastguard Worker std::vector<GLint> unusedParamsDst(invalidUniformIndices.size());
556*35238bceSAndroid Build Coastguard Worker glGetActiveUniformsiv(program.getProgram(), (GLsizei)invalidUniformIndices.size(),
557*35238bceSAndroid Build Coastguard Worker &invalidUniformIndices[0], GL_UNIFORM_TYPE, &unusedParamsDst[0]);
558*35238bceSAndroid Build Coastguard Worker expectError(excess == 0 ? GL_NO_ERROR : GL_INVALID_VALUE);
559*35238bceSAndroid Build Coastguard Worker }
560*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
561*35238bceSAndroid Build Coastguard Worker
562*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted token.");
563*35238bceSAndroid Build Coastguard Worker glGetActiveUniformsiv(program.getProgram(), 1, &unusedUniformIndex, -1, &unusedParamDst);
564*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
565*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
566*35238bceSAndroid Build Coastguard Worker
567*35238bceSAndroid Build Coastguard Worker glUseProgram(0);
568*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
569*35238bceSAndroid Build Coastguard Worker });
570*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_active_uniform_blockiv, "Invalid glGetActiveUniformBlockiv() usage", {
571*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
572*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
573*35238bceSAndroid Build Coastguard Worker GLint params = -1;
574*35238bceSAndroid Build Coastguard Worker GLint numActiveBlocks = -1;
575*35238bceSAndroid Build Coastguard Worker
576*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS, &numActiveBlocks);
577*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << " (expected 1)."
578*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
579*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
580*35238bceSAndroid Build Coastguard Worker
581*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
582*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if uniformBlockIndex is greater than or equal to the value of "
583*35238bceSAndroid Build Coastguard Worker "GL_ACTIVE_UNIFORM_BLOCKS or is not the index of an active uniform block in program.");
584*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
585*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
586*35238bceSAndroid Build Coastguard Worker glGetActiveUniformBlockiv(program.getProgram(), numActiveBlocks, GL_UNIFORM_BLOCK_BINDING, ¶ms);
587*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
588*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
589*35238bceSAndroid Build Coastguard Worker
590*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
591*35238bceSAndroid Build Coastguard Worker glGetActiveUniformBlockiv(program.getProgram(), 0, -1, ¶ms);
592*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
593*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
594*35238bceSAndroid Build Coastguard Worker
595*35238bceSAndroid Build Coastguard Worker glUseProgram(0);
596*35238bceSAndroid Build Coastguard Worker });
597*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_active_uniform_block_name, "Invalid glGetActiveUniformBlockName() usage", {
598*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
599*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
600*35238bceSAndroid Build Coastguard Worker GLsizei length = -1;
601*35238bceSAndroid Build Coastguard Worker GLint numActiveBlocks = -1;
602*35238bceSAndroid Build Coastguard Worker GLchar uniformBlockName[128];
603*35238bceSAndroid Build Coastguard Worker
604*35238bceSAndroid Build Coastguard Worker deMemset(&uniformBlockName[0], 0, sizeof(uniformBlockName));
605*35238bceSAndroid Build Coastguard Worker
606*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS, &numActiveBlocks);
607*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << " (expected 1)."
608*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
609*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
610*35238bceSAndroid Build Coastguard Worker
611*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
612*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if uniformBlockIndex is greater than or equal to the value of "
613*35238bceSAndroid Build Coastguard Worker "GL_ACTIVE_UNIFORM_BLOCKS or is not the index of an active uniform block in program.");
614*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
615*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
616*35238bceSAndroid Build Coastguard Worker glGetActiveUniformBlockName(program.getProgram(), numActiveBlocks, (int)sizeof(uniformBlockName), &length,
617*35238bceSAndroid Build Coastguard Worker &uniformBlockName[0]);
618*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
619*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
620*35238bceSAndroid Build Coastguard Worker
621*35238bceSAndroid Build Coastguard Worker glUseProgram(0);
622*35238bceSAndroid Build Coastguard Worker });
623*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_active_attrib, "Invalid glGetActiveAttrib() usage", {
624*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
625*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
626*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
627*35238bceSAndroid Build Coastguard Worker GLint numActiveAttributes = -1;
628*35238bceSAndroid Build Coastguard Worker
629*35238bceSAndroid Build Coastguard Worker GLsizei length = -1;
630*35238bceSAndroid Build Coastguard Worker GLint size = -1;
631*35238bceSAndroid Build Coastguard Worker GLenum type = -1;
632*35238bceSAndroid Build Coastguard Worker GLchar name[32];
633*35238bceSAndroid Build Coastguard Worker
634*35238bceSAndroid Build Coastguard Worker deMemset(&name[0], 0, sizeof(name));
635*35238bceSAndroid Build Coastguard Worker
636*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program.getProgram(), GL_ACTIVE_ATTRIBUTES, &numActiveAttributes);
637*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_ACTIVE_ATTRIBUTES = " << numActiveAttributes << " (expected 1)."
638*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
639*35238bceSAndroid Build Coastguard Worker
640*35238bceSAndroid Build Coastguard Worker glUseProgram(program.getProgram());
641*35238bceSAndroid Build Coastguard Worker
642*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
643*35238bceSAndroid Build Coastguard Worker glGetActiveAttrib(-1, 0, 32, &length, &size, &type, &name[0]);
644*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
645*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
646*35238bceSAndroid Build Coastguard Worker
647*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
648*35238bceSAndroid Build Coastguard Worker glGetActiveAttrib(shader, 0, 32, &length, &size, &type, &name[0]);
649*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
650*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
651*35238bceSAndroid Build Coastguard Worker
652*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
653*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_ACTIVE_ATTRIBUTES.");
654*35238bceSAndroid Build Coastguard Worker glGetActiveAttrib(program.getProgram(), numActiveAttributes, (int)sizeof(name), &length, &size, &type,
655*35238bceSAndroid Build Coastguard Worker &name[0]);
656*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
657*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
658*35238bceSAndroid Build Coastguard Worker
659*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
660*35238bceSAndroid Build Coastguard Worker glGetActiveAttrib(program.getProgram(), 0, -1, &length, &size, &type, &name[0]);
661*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
662*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
663*35238bceSAndroid Build Coastguard Worker
664*35238bceSAndroid Build Coastguard Worker glUseProgram(0);
665*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
666*35238bceSAndroid Build Coastguard Worker });
667*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_uniform_indices, "Invalid glGetUniformIndices() usage", {
668*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
669*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram program(m_context.getRenderContext(),
670*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
671*35238bceSAndroid Build Coastguard Worker GLint numActiveBlocks = -1;
672*35238bceSAndroid Build Coastguard Worker const GLchar *uniformName = "Block.blockVar";
673*35238bceSAndroid Build Coastguard Worker GLuint uniformIndices = -1;
674*35238bceSAndroid Build Coastguard Worker
675*35238bceSAndroid Build Coastguard Worker glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS, &numActiveBlocks);
676*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << TestLog::EndMessage;
677*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
678*35238bceSAndroid Build Coastguard Worker
679*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is a name of shader object.");
680*35238bceSAndroid Build Coastguard Worker glGetUniformIndices(shader, 1, &uniformName, &uniformIndices);
681*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
682*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
683*35238bceSAndroid Build Coastguard Worker
684*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
685*35238bceSAndroid Build Coastguard Worker "GL_INVALID_VALUE is generated if program is not name of program or shader object.");
686*35238bceSAndroid Build Coastguard Worker GLuint invalid = -1;
687*35238bceSAndroid Build Coastguard Worker glGetUniformIndices(invalid, 1, &uniformName, &uniformIndices);
688*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
689*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
690*35238bceSAndroid Build Coastguard Worker
691*35238bceSAndroid Build Coastguard Worker glUseProgram(0);
692*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
693*35238bceSAndroid Build Coastguard Worker });
694*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_vertex_attribfv, "Invalid glGetVertexAttribfv() usage", {
695*35238bceSAndroid Build Coastguard Worker GLfloat params = 0.0f;
696*35238bceSAndroid Build Coastguard Worker
697*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
698*35238bceSAndroid Build Coastguard Worker glGetVertexAttribfv(0, -1, ¶ms);
699*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
700*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
701*35238bceSAndroid Build Coastguard Worker
702*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
703*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
704*35238bceSAndroid Build Coastguard Worker GLint maxVertexAttribs;
705*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
706*35238bceSAndroid Build Coastguard Worker glGetVertexAttribfv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, ¶ms);
707*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
708*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
709*35238bceSAndroid Build Coastguard Worker });
710*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_vertex_attribiv, "Invalid glGetVertexAttribiv() usage", {
711*35238bceSAndroid Build Coastguard Worker GLint params = -1;
712*35238bceSAndroid Build Coastguard Worker
713*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
714*35238bceSAndroid Build Coastguard Worker glGetVertexAttribiv(0, -1, ¶ms);
715*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
716*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
717*35238bceSAndroid Build Coastguard Worker
718*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
719*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
720*35238bceSAndroid Build Coastguard Worker GLint maxVertexAttribs;
721*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
722*35238bceSAndroid Build Coastguard Worker glGetVertexAttribiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, ¶ms);
723*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
724*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
725*35238bceSAndroid Build Coastguard Worker });
726*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_vertex_attribi_iv, "Invalid glGetVertexAttribIiv() usage", {
727*35238bceSAndroid Build Coastguard Worker GLint params = -1;
728*35238bceSAndroid Build Coastguard Worker
729*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
730*35238bceSAndroid Build Coastguard Worker glGetVertexAttribIiv(0, -1, ¶ms);
731*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
732*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
733*35238bceSAndroid Build Coastguard Worker
734*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
735*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
736*35238bceSAndroid Build Coastguard Worker GLint maxVertexAttribs;
737*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
738*35238bceSAndroid Build Coastguard Worker glGetVertexAttribIiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, ¶ms);
739*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
740*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
741*35238bceSAndroid Build Coastguard Worker });
742*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_vertex_attribi_uiv, "Invalid glGetVertexAttribIuiv() usage", {
743*35238bceSAndroid Build Coastguard Worker GLuint params = (GLuint)-1;
744*35238bceSAndroid Build Coastguard Worker
745*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
746*35238bceSAndroid Build Coastguard Worker glGetVertexAttribIuiv(0, -1, ¶ms);
747*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
748*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
749*35238bceSAndroid Build Coastguard Worker
750*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
751*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
752*35238bceSAndroid Build Coastguard Worker GLint maxVertexAttribs;
753*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
754*35238bceSAndroid Build Coastguard Worker glGetVertexAttribIuiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, ¶ms);
755*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
756*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
757*35238bceSAndroid Build Coastguard Worker });
758*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_vertex_attrib_pointerv, "Invalid glGetVertexAttribPointerv() usage", {
759*35238bceSAndroid Build Coastguard Worker GLvoid *ptr[1] = {DE_NULL};
760*35238bceSAndroid Build Coastguard Worker
761*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
762*35238bceSAndroid Build Coastguard Worker glGetVertexAttribPointerv(0, -1, &ptr[0]);
763*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
764*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
765*35238bceSAndroid Build Coastguard Worker
766*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
767*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
768*35238bceSAndroid Build Coastguard Worker GLint maxVertexAttribs;
769*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
770*35238bceSAndroid Build Coastguard Worker glGetVertexAttribPointerv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_POINTER, &ptr[0]);
771*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
772*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
773*35238bceSAndroid Build Coastguard Worker });
774*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_frag_data_location, "Invalid glGetFragDataLocation() usage", {
775*35238bceSAndroid Build Coastguard Worker GLuint shader = glCreateShader(GL_VERTEX_SHADER);
776*35238bceSAndroid Build Coastguard Worker GLuint program = glCreateProgram();
777*35238bceSAndroid Build Coastguard Worker
778*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is the name of a shader object.");
779*35238bceSAndroid Build Coastguard Worker glGetFragDataLocation(shader, "gl_FragColor");
780*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
781*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
782*35238bceSAndroid Build Coastguard Worker
783*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been linked.");
784*35238bceSAndroid Build Coastguard Worker glGetFragDataLocation(program, "gl_FragColor");
785*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
786*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
787*35238bceSAndroid Build Coastguard Worker
788*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
789*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
790*35238bceSAndroid Build Coastguard Worker });
791*35238bceSAndroid Build Coastguard Worker
792*35238bceSAndroid Build Coastguard Worker // Enumerated state queries: Buffers
793*35238bceSAndroid Build Coastguard Worker
794*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_buffer_parameteriv, "Invalid glGetBufferParameteriv() usage", {
795*35238bceSAndroid Build Coastguard Worker GLint params = -1;
796*35238bceSAndroid Build Coastguard Worker GLuint buf;
797*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buf);
798*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buf);
799*35238bceSAndroid Build Coastguard Worker
800*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or value is not an accepted value.");
801*35238bceSAndroid Build Coastguard Worker glGetBufferParameteriv(-1, GL_BUFFER_SIZE, ¶ms);
802*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
803*35238bceSAndroid Build Coastguard Worker glGetBufferParameteriv(GL_ARRAY_BUFFER, -1, ¶ms);
804*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
805*35238bceSAndroid Build Coastguard Worker glGetBufferParameteriv(-1, -1, ¶ms);
806*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
807*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
808*35238bceSAndroid Build Coastguard Worker
809*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
810*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
811*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, 0);
812*35238bceSAndroid Build Coastguard Worker glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, ¶ms);
813*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
814*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
815*35238bceSAndroid Build Coastguard Worker
816*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buf);
817*35238bceSAndroid Build Coastguard Worker });
818*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_buffer_parameteri64v, "Invalid glGetBufferParameteri64v() usage", {
819*35238bceSAndroid Build Coastguard Worker GLint64 params = -1;
820*35238bceSAndroid Build Coastguard Worker GLuint buf;
821*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buf);
822*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buf);
823*35238bceSAndroid Build Coastguard Worker
824*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or value is not an accepted value.");
825*35238bceSAndroid Build Coastguard Worker glGetBufferParameteri64v(-1, GL_BUFFER_SIZE, ¶ms);
826*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
827*35238bceSAndroid Build Coastguard Worker glGetBufferParameteri64v(GL_ARRAY_BUFFER, -1, ¶ms);
828*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
829*35238bceSAndroid Build Coastguard Worker glGetBufferParameteri64v(-1, -1, ¶ms);
830*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
831*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
832*35238bceSAndroid Build Coastguard Worker
833*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
834*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
835*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, 0);
836*35238bceSAndroid Build Coastguard Worker glGetBufferParameteri64v(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, ¶ms);
837*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
838*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
839*35238bceSAndroid Build Coastguard Worker
840*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buf);
841*35238bceSAndroid Build Coastguard Worker });
842*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_buffer_pointerv, "Invalid glGetBufferPointerv() usage", {
843*35238bceSAndroid Build Coastguard Worker GLvoid *params = DE_NULL;
844*35238bceSAndroid Build Coastguard Worker GLuint buf;
845*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buf);
846*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buf);
847*35238bceSAndroid Build Coastguard Worker
848*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
849*35238bceSAndroid Build Coastguard Worker glGetBufferPointerv(GL_ARRAY_BUFFER, -1, ¶ms);
850*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
851*35238bceSAndroid Build Coastguard Worker glGetBufferPointerv(-1, GL_BUFFER_MAP_POINTER, ¶ms);
852*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
853*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
854*35238bceSAndroid Build Coastguard Worker
855*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
856*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
857*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, 0);
858*35238bceSAndroid Build Coastguard Worker glGetBufferPointerv(GL_ARRAY_BUFFER, GL_BUFFER_MAP_POINTER, ¶ms);
859*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
860*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
861*35238bceSAndroid Build Coastguard Worker
862*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buf);
863*35238bceSAndroid Build Coastguard Worker });
864*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_framebuffer_attachment_parameteriv, "Invalid glGetFramebufferAttachmentParameteriv() usage", {
865*35238bceSAndroid Build Coastguard Worker GLint params[1] = {-1};
866*35238bceSAndroid Build Coastguard Worker GLuint fbo;
867*35238bceSAndroid Build Coastguard Worker GLuint rbo[2];
868*35238bceSAndroid Build Coastguard Worker
869*35238bceSAndroid Build Coastguard Worker glGenFramebuffers(1, &fbo);
870*35238bceSAndroid Build Coastguard Worker glGenRenderbuffers(2, rbo);
871*35238bceSAndroid Build Coastguard Worker
872*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, fbo);
873*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, rbo[0]);
874*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 16, 16);
875*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo[0]);
876*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, rbo[1]);
877*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, 16, 16);
878*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo[1]);
879*35238bceSAndroid Build Coastguard Worker glCheckFramebufferStatus(GL_FRAMEBUFFER);
880*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
881*35238bceSAndroid Build Coastguard Worker
882*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not one of the accepted tokens.");
883*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(-1, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
884*35238bceSAndroid Build Coastguard Worker ¶ms[0]); // TYPE is GL_RENDERBUFFER
885*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
886*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
887*35238bceSAndroid Build Coastguard Worker
888*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not valid for the value of "
889*35238bceSAndroid Build Coastguard Worker "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE.");
890*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
891*35238bceSAndroid Build Coastguard Worker GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
892*35238bceSAndroid Build Coastguard Worker ¶ms[0]); // TYPE is GL_RENDERBUFFER
893*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
894*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, 0);
895*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
896*35238bceSAndroid Build Coastguard Worker ¶ms[0]); // TYPE is GL_FRAMEBUFFER_DEFAULT
897*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
898*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, fbo);
899*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
900*35238bceSAndroid Build Coastguard Worker
901*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
902*35238bceSAndroid Build Coastguard Worker "GL_INVALID_OPERATION is generated if attachment is GL_DEPTH_STENCIL_ATTACHMENT and "
903*35238bceSAndroid Build Coastguard Worker "different objects are bound to the depth and stencil attachment points of target.");
904*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
905*35238bceSAndroid Build Coastguard Worker GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, ¶ms[0]);
906*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
907*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
908*35238bceSAndroid Build Coastguard Worker
909*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
910*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is GL_NONE "
911*35238bceSAndroid Build Coastguard Worker "and pname is not GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME.");
912*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
913*35238bceSAndroid Build Coastguard Worker GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, ¶ms[0]); // TYPE is GL_NONE
914*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
915*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
916*35238bceSAndroid Build Coastguard Worker GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE, ¶ms[0]); // TYPE is GL_NONE
917*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
918*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
919*35238bceSAndroid Build Coastguard Worker
920*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION or GL_INVALID_ENUM is generated if attachment is not one "
921*35238bceSAndroid Build Coastguard Worker "of the accepted values for the current binding of target.");
922*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
923*35238bceSAndroid Build Coastguard Worker ¶ms[0]); // A FBO is bound so GL_BACK is invalid
924*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION, GL_INVALID_ENUM);
925*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, 0);
926*35238bceSAndroid Build Coastguard Worker glGetFramebufferAttachmentParameteriv(
927*35238bceSAndroid Build Coastguard Worker GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
928*35238bceSAndroid Build Coastguard Worker ¶ms[0]); // Default framebuffer is bound so GL_COLOR_ATTACHMENT0 is invalid
929*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION, GL_INVALID_ENUM);
930*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
931*35238bceSAndroid Build Coastguard Worker
932*35238bceSAndroid Build Coastguard Worker glDeleteFramebuffers(1, &fbo);
933*35238bceSAndroid Build Coastguard Worker });
934*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_renderbuffer_parameteriv, "Invalid glGetRenderbufferParameteriv() usage", {
935*35238bceSAndroid Build Coastguard Worker GLint params[1] = {-1};
936*35238bceSAndroid Build Coastguard Worker GLuint rbo;
937*35238bceSAndroid Build Coastguard Worker glGenRenderbuffers(1, &rbo);
938*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, rbo);
939*35238bceSAndroid Build Coastguard Worker
940*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
941*35238bceSAndroid Build Coastguard Worker glGetRenderbufferParameteriv(-1, GL_RENDERBUFFER_WIDTH, ¶ms[0]);
942*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
943*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
944*35238bceSAndroid Build Coastguard Worker
945*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
946*35238bceSAndroid Build Coastguard Worker glGetRenderbufferParameteriv(GL_RENDERBUFFER, -1, ¶ms[0]);
947*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
948*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
949*35238bceSAndroid Build Coastguard Worker
950*35238bceSAndroid Build Coastguard Worker glDeleteRenderbuffers(1, &rbo);
951*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, 0);
952*35238bceSAndroid Build Coastguard Worker });
953*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_internalformativ, "Invalid glGetInternalformativ() usage", {
954*35238bceSAndroid Build Coastguard Worker const bool isES = glu::isContextTypeES(m_context.getRenderContext().getType());
955*35238bceSAndroid Build Coastguard Worker GLint params[16];
956*35238bceSAndroid Build Coastguard Worker
957*35238bceSAndroid Build Coastguard Worker deMemset(¶ms[0], 0xcd, sizeof(params));
958*35238bceSAndroid Build Coastguard Worker
959*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is negative.");
960*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(GL_RENDERBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, -1, ¶ms[0]);
961*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
962*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
963*35238bceSAndroid Build Coastguard Worker
964*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
965*35238bceSAndroid Build Coastguard Worker "GL_INVALID_ENUM is generated if pname is not GL_SAMPLES or GL_NUM_SAMPLE_COUNTS.");
966*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(GL_RENDERBUFFER, GL_RGBA8, -1, 16, ¶ms[0]);
967*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
968*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
969*35238bceSAndroid Build Coastguard Worker
970*35238bceSAndroid Build Coastguard Worker if (isES)
971*35238bceSAndroid Build Coastguard Worker {
972*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
973*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_ENUM is generated if internalformat is not color-, depth-, or stencil-renderable.");
974*35238bceSAndroid Build Coastguard Worker if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_render_snorm"))
975*35238bceSAndroid Build Coastguard Worker {
976*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(GL_RENDERBUFFER, GL_RG8_SNORM, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[0]);
977*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
978*35238bceSAndroid Build Coastguard Worker }
979*35238bceSAndroid Build Coastguard Worker
980*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(GL_RENDERBUFFER, GL_COMPRESSED_RGB8_ETC2, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[0]);
981*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
982*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
983*35238bceSAndroid Build Coastguard Worker }
984*35238bceSAndroid Build Coastguard Worker
985*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
986*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(-1, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[0]);
987*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
988*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(GL_FRAMEBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[0]);
989*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
990*35238bceSAndroid Build Coastguard Worker
991*35238bceSAndroid Build Coastguard Worker if (isES && !m_context.getContextInfo().isExtensionSupported("GL_EXT_sparse_texture"))
992*35238bceSAndroid Build Coastguard Worker {
993*35238bceSAndroid Build Coastguard Worker glGetInternalformativ(GL_TEXTURE_2D, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[0]);
994*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
995*35238bceSAndroid Build Coastguard Worker }
996*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
997*35238bceSAndroid Build Coastguard Worker });
998*35238bceSAndroid Build Coastguard Worker
999*35238bceSAndroid Build Coastguard Worker // Query object queries
1000*35238bceSAndroid Build Coastguard Worker
1001*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_queryiv, "Invalid glGetQueryiv() usage", {
1002*35238bceSAndroid Build Coastguard Worker GLint params = -1;
1003*35238bceSAndroid Build Coastguard Worker
1004*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
1005*35238bceSAndroid Build Coastguard Worker glGetQueryiv(GL_ANY_SAMPLES_PASSED, -1, ¶ms);
1006*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1007*35238bceSAndroid Build Coastguard Worker glGetQueryiv(-1, GL_CURRENT_QUERY, ¶ms);
1008*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1009*35238bceSAndroid Build Coastguard Worker glGetQueryiv(-1, -1, ¶ms);
1010*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1011*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1012*35238bceSAndroid Build Coastguard Worker });
1013*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_query_objectuiv, "Invalid glGetQueryObjectuiv() usage", {
1014*35238bceSAndroid Build Coastguard Worker GLuint params = -1;
1015*35238bceSAndroid Build Coastguard Worker GLuint id;
1016*35238bceSAndroid Build Coastguard Worker glGenQueries(1, &id);
1017*35238bceSAndroid Build Coastguard Worker
1018*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if id is not the name of a query object.");
1019*35238bceSAndroid Build Coastguard Worker glGetQueryObjectuiv(-1, GL_QUERY_RESULT_AVAILABLE, ¶ms);
1020*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
1021*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Message << "// Note: " << id
1022*35238bceSAndroid Build Coastguard Worker << " is not a query object yet, since it hasn't been used by glBeginQuery" << TestLog::EndMessage;
1023*35238bceSAndroid Build Coastguard Worker glGetQueryObjectuiv(id, GL_QUERY_RESULT_AVAILABLE, ¶ms);
1024*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
1025*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1026*35238bceSAndroid Build Coastguard Worker
1027*35238bceSAndroid Build Coastguard Worker glBeginQuery(GL_ANY_SAMPLES_PASSED, id);
1028*35238bceSAndroid Build Coastguard Worker glEndQuery(GL_ANY_SAMPLES_PASSED);
1029*35238bceSAndroid Build Coastguard Worker
1030*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
1031*35238bceSAndroid Build Coastguard Worker glGetQueryObjectuiv(id, -1, ¶ms);
1032*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1033*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1034*35238bceSAndroid Build Coastguard Worker
1035*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
1036*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if id is the name of a currently active query object.");
1037*35238bceSAndroid Build Coastguard Worker glBeginQuery(GL_ANY_SAMPLES_PASSED, id);
1038*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1039*35238bceSAndroid Build Coastguard Worker glGetQueryObjectuiv(id, GL_QUERY_RESULT_AVAILABLE, ¶ms);
1040*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
1041*35238bceSAndroid Build Coastguard Worker glEndQuery(GL_ANY_SAMPLES_PASSED);
1042*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1043*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1044*35238bceSAndroid Build Coastguard Worker
1045*35238bceSAndroid Build Coastguard Worker glDeleteQueries(1, &id);
1046*35238bceSAndroid Build Coastguard Worker });
1047*35238bceSAndroid Build Coastguard Worker
1048*35238bceSAndroid Build Coastguard Worker // Sync object queries
1049*35238bceSAndroid Build Coastguard Worker
1050*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(get_synciv, "Invalid glGetSynciv() usage", {
1051*35238bceSAndroid Build Coastguard Worker GLsizei length = -1;
1052*35238bceSAndroid Build Coastguard Worker GLint values[32];
1053*35238bceSAndroid Build Coastguard Worker GLsync sync;
1054*35238bceSAndroid Build Coastguard Worker
1055*35238bceSAndroid Build Coastguard Worker deMemset(&values[0], 0xcd, sizeof(values));
1056*35238bceSAndroid Build Coastguard Worker
1057*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if sync is not the name of a sync object.");
1058*35238bceSAndroid Build Coastguard Worker glGetSynciv(0, GL_OBJECT_TYPE, 32, &length, &values[0]);
1059*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
1060*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1061*35238bceSAndroid Build Coastguard Worker
1062*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
1063*35238bceSAndroid Build Coastguard Worker sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
1064*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1065*35238bceSAndroid Build Coastguard Worker glGetSynciv(sync, -1, 32, &length, &values[0]);
1066*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1067*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1068*35238bceSAndroid Build Coastguard Worker });
1069*35238bceSAndroid Build Coastguard Worker
1070*35238bceSAndroid Build Coastguard Worker // Enumerated boolean state queries
1071*35238bceSAndroid Build Coastguard Worker
1072*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_enabled, "Invalid glIsEnabled() usage", {
1073*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not an accepted value.");
1074*35238bceSAndroid Build Coastguard Worker glIsEnabled(-1);
1075*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1076*35238bceSAndroid Build Coastguard Worker glIsEnabled(GL_TRIANGLES);
1077*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1078*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1079*35238bceSAndroid Build Coastguard Worker });
1080*35238bceSAndroid Build Coastguard Worker
1081*35238bceSAndroid Build Coastguard Worker // Hints
1082*35238bceSAndroid Build Coastguard Worker
1083*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(hint, "Invalid glHint() usage", {
1084*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
1085*35238bceSAndroid Build Coastguard Worker "GL_INVALID_ENUM is generated if either target or mode is not an accepted value.");
1086*35238bceSAndroid Build Coastguard Worker glHint(GL_GENERATE_MIPMAP_HINT, -1);
1087*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1088*35238bceSAndroid Build Coastguard Worker glHint(-1, GL_FASTEST);
1089*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1090*35238bceSAndroid Build Coastguard Worker glHint(-1, -1);
1091*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
1092*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1093*35238bceSAndroid Build Coastguard Worker });
1094*35238bceSAndroid Build Coastguard Worker
1095*35238bceSAndroid Build Coastguard Worker // Named Object Usage
1096*35238bceSAndroid Build Coastguard Worker
1097*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_buffer, "Invalid glIsBuffer() usage", {
1098*35238bceSAndroid Build Coastguard Worker GLuint buffer = 0;
1099*35238bceSAndroid Build Coastguard Worker GLboolean isBuffer;
1100*35238bceSAndroid Build Coastguard Worker
1101*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenBuffers, but not yet associated with a buffer object by "
1102*35238bceSAndroid Build Coastguard Worker "calling glBindBuffer, is not the name of a buffer object.");
1103*35238bceSAndroid Build Coastguard Worker isBuffer = glIsBuffer(buffer);
1104*35238bceSAndroid Build Coastguard Worker checkBooleans(isBuffer, GL_FALSE);
1105*35238bceSAndroid Build Coastguard Worker
1106*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buffer);
1107*35238bceSAndroid Build Coastguard Worker isBuffer = glIsBuffer(buffer);
1108*35238bceSAndroid Build Coastguard Worker checkBooleans(isBuffer, GL_FALSE);
1109*35238bceSAndroid Build Coastguard Worker
1110*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buffer);
1111*35238bceSAndroid Build Coastguard Worker isBuffer = glIsBuffer(buffer);
1112*35238bceSAndroid Build Coastguard Worker checkBooleans(isBuffer, GL_TRUE);
1113*35238bceSAndroid Build Coastguard Worker
1114*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, 0);
1115*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buffer);
1116*35238bceSAndroid Build Coastguard Worker isBuffer = glIsBuffer(buffer);
1117*35238bceSAndroid Build Coastguard Worker checkBooleans(isBuffer, GL_FALSE);
1118*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1119*35238bceSAndroid Build Coastguard Worker
1120*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1121*35238bceSAndroid Build Coastguard Worker });
1122*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_framebuffer, "Invalid glIsFramebuffer() usage", {
1123*35238bceSAndroid Build Coastguard Worker GLuint fbo = 0;
1124*35238bceSAndroid Build Coastguard Worker GLboolean isFbo;
1125*35238bceSAndroid Build Coastguard Worker
1126*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenFramebuffers, but not yet bound through a call to "
1127*35238bceSAndroid Build Coastguard Worker "glBindFramebuffer is not the name of a framebuffer object.");
1128*35238bceSAndroid Build Coastguard Worker isFbo = glIsFramebuffer(fbo);
1129*35238bceSAndroid Build Coastguard Worker checkBooleans(isFbo, GL_FALSE);
1130*35238bceSAndroid Build Coastguard Worker
1131*35238bceSAndroid Build Coastguard Worker glGenFramebuffers(1, &fbo);
1132*35238bceSAndroid Build Coastguard Worker isFbo = glIsFramebuffer(fbo);
1133*35238bceSAndroid Build Coastguard Worker checkBooleans(isFbo, GL_FALSE);
1134*35238bceSAndroid Build Coastguard Worker
1135*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, fbo);
1136*35238bceSAndroid Build Coastguard Worker isFbo = glIsFramebuffer(fbo);
1137*35238bceSAndroid Build Coastguard Worker checkBooleans(isFbo, GL_TRUE);
1138*35238bceSAndroid Build Coastguard Worker
1139*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, 0);
1140*35238bceSAndroid Build Coastguard Worker glDeleteFramebuffers(1, &fbo);
1141*35238bceSAndroid Build Coastguard Worker isFbo = glIsFramebuffer(fbo);
1142*35238bceSAndroid Build Coastguard Worker checkBooleans(isFbo, GL_FALSE);
1143*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1144*35238bceSAndroid Build Coastguard Worker
1145*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1146*35238bceSAndroid Build Coastguard Worker });
1147*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_program, "Invalid glIsProgram() usage", {
1148*35238bceSAndroid Build Coastguard Worker GLuint program = 0;
1149*35238bceSAndroid Build Coastguard Worker GLboolean isProgram;
1150*35238bceSAndroid Build Coastguard Worker
1151*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name created with glCreateProgram, and not yet deleted with glDeleteProgram "
1152*35238bceSAndroid Build Coastguard Worker "is a name of a program object.");
1153*35238bceSAndroid Build Coastguard Worker isProgram = glIsProgram(program);
1154*35238bceSAndroid Build Coastguard Worker checkBooleans(isProgram, GL_FALSE);
1155*35238bceSAndroid Build Coastguard Worker
1156*35238bceSAndroid Build Coastguard Worker program = glCreateProgram();
1157*35238bceSAndroid Build Coastguard Worker isProgram = glIsProgram(program);
1158*35238bceSAndroid Build Coastguard Worker checkBooleans(isProgram, GL_TRUE);
1159*35238bceSAndroid Build Coastguard Worker
1160*35238bceSAndroid Build Coastguard Worker glDeleteProgram(program);
1161*35238bceSAndroid Build Coastguard Worker isProgram = glIsProgram(program);
1162*35238bceSAndroid Build Coastguard Worker checkBooleans(isProgram, GL_FALSE);
1163*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1164*35238bceSAndroid Build Coastguard Worker
1165*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1166*35238bceSAndroid Build Coastguard Worker });
1167*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_renderbuffer, "Invalid glIsRenderbuffer() usage", {
1168*35238bceSAndroid Build Coastguard Worker GLuint rbo = 0;
1169*35238bceSAndroid Build Coastguard Worker GLboolean isRbo;
1170*35238bceSAndroid Build Coastguard Worker
1171*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
1172*35238bceSAndroid Build Coastguard Worker "", "A name returned by glGenRenderbuffers, but not yet bound through a call to glBindRenderbuffer or "
1173*35238bceSAndroid Build Coastguard Worker "glFramebufferRenderbuffer is not the name of a renderbuffer object.");
1174*35238bceSAndroid Build Coastguard Worker isRbo = glIsRenderbuffer(rbo);
1175*35238bceSAndroid Build Coastguard Worker checkBooleans(isRbo, GL_FALSE);
1176*35238bceSAndroid Build Coastguard Worker
1177*35238bceSAndroid Build Coastguard Worker glGenRenderbuffers(1, &rbo);
1178*35238bceSAndroid Build Coastguard Worker isRbo = glIsRenderbuffer(rbo);
1179*35238bceSAndroid Build Coastguard Worker checkBooleans(isRbo, GL_FALSE);
1180*35238bceSAndroid Build Coastguard Worker
1181*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, rbo);
1182*35238bceSAndroid Build Coastguard Worker isRbo = glIsRenderbuffer(rbo);
1183*35238bceSAndroid Build Coastguard Worker checkBooleans(isRbo, GL_TRUE);
1184*35238bceSAndroid Build Coastguard Worker
1185*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, 0);
1186*35238bceSAndroid Build Coastguard Worker glDeleteRenderbuffers(1, &rbo);
1187*35238bceSAndroid Build Coastguard Worker isRbo = glIsRenderbuffer(rbo);
1188*35238bceSAndroid Build Coastguard Worker checkBooleans(isRbo, GL_FALSE);
1189*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1190*35238bceSAndroid Build Coastguard Worker
1191*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1192*35238bceSAndroid Build Coastguard Worker });
1193*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_shader, "Invalid glIsShader() usage", {
1194*35238bceSAndroid Build Coastguard Worker GLuint shader = 0;
1195*35238bceSAndroid Build Coastguard Worker GLboolean isShader;
1196*35238bceSAndroid Build Coastguard Worker
1197*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name created with glCreateShader, and not yet deleted with glDeleteShader is "
1198*35238bceSAndroid Build Coastguard Worker "a name of a shader object.");
1199*35238bceSAndroid Build Coastguard Worker isShader = glIsProgram(shader);
1200*35238bceSAndroid Build Coastguard Worker checkBooleans(isShader, GL_FALSE);
1201*35238bceSAndroid Build Coastguard Worker
1202*35238bceSAndroid Build Coastguard Worker shader = glCreateShader(GL_VERTEX_SHADER);
1203*35238bceSAndroid Build Coastguard Worker isShader = glIsShader(shader);
1204*35238bceSAndroid Build Coastguard Worker checkBooleans(isShader, GL_TRUE);
1205*35238bceSAndroid Build Coastguard Worker
1206*35238bceSAndroid Build Coastguard Worker glDeleteShader(shader);
1207*35238bceSAndroid Build Coastguard Worker isShader = glIsShader(shader);
1208*35238bceSAndroid Build Coastguard Worker checkBooleans(isShader, GL_FALSE);
1209*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1210*35238bceSAndroid Build Coastguard Worker
1211*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1212*35238bceSAndroid Build Coastguard Worker });
1213*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_texture, "Invalid glIsTexture() usage", {
1214*35238bceSAndroid Build Coastguard Worker GLuint texture = 0;
1215*35238bceSAndroid Build Coastguard Worker GLboolean isTexture;
1216*35238bceSAndroid Build Coastguard Worker
1217*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenTextures, but not yet bound through a call to "
1218*35238bceSAndroid Build Coastguard Worker "glBindTexture is not the name of a texture.");
1219*35238bceSAndroid Build Coastguard Worker isTexture = glIsTexture(texture);
1220*35238bceSAndroid Build Coastguard Worker checkBooleans(isTexture, GL_FALSE);
1221*35238bceSAndroid Build Coastguard Worker
1222*35238bceSAndroid Build Coastguard Worker glGenTextures(1, &texture);
1223*35238bceSAndroid Build Coastguard Worker isTexture = glIsTexture(texture);
1224*35238bceSAndroid Build Coastguard Worker checkBooleans(isTexture, GL_FALSE);
1225*35238bceSAndroid Build Coastguard Worker
1226*35238bceSAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, texture);
1227*35238bceSAndroid Build Coastguard Worker isTexture = glIsTexture(texture);
1228*35238bceSAndroid Build Coastguard Worker checkBooleans(isTexture, GL_TRUE);
1229*35238bceSAndroid Build Coastguard Worker
1230*35238bceSAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, 0);
1231*35238bceSAndroid Build Coastguard Worker glDeleteTextures(1, &texture);
1232*35238bceSAndroid Build Coastguard Worker isTexture = glIsTexture(texture);
1233*35238bceSAndroid Build Coastguard Worker checkBooleans(isTexture, GL_FALSE);
1234*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1235*35238bceSAndroid Build Coastguard Worker
1236*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1237*35238bceSAndroid Build Coastguard Worker });
1238*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_query, "Invalid glIsQuery() usage", {
1239*35238bceSAndroid Build Coastguard Worker GLuint query = 0;
1240*35238bceSAndroid Build Coastguard Worker GLboolean isQuery;
1241*35238bceSAndroid Build Coastguard Worker
1242*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenQueries, but not yet associated with a query object by "
1243*35238bceSAndroid Build Coastguard Worker "calling glBeginQuery, is not the name of a query object.");
1244*35238bceSAndroid Build Coastguard Worker isQuery = glIsQuery(query);
1245*35238bceSAndroid Build Coastguard Worker checkBooleans(isQuery, GL_FALSE);
1246*35238bceSAndroid Build Coastguard Worker
1247*35238bceSAndroid Build Coastguard Worker glGenQueries(1, &query);
1248*35238bceSAndroid Build Coastguard Worker isQuery = glIsQuery(query);
1249*35238bceSAndroid Build Coastguard Worker checkBooleans(isQuery, GL_FALSE);
1250*35238bceSAndroid Build Coastguard Worker
1251*35238bceSAndroid Build Coastguard Worker glBeginQuery(GL_ANY_SAMPLES_PASSED, query);
1252*35238bceSAndroid Build Coastguard Worker isQuery = glIsQuery(query);
1253*35238bceSAndroid Build Coastguard Worker checkBooleans(isQuery, GL_TRUE);
1254*35238bceSAndroid Build Coastguard Worker
1255*35238bceSAndroid Build Coastguard Worker glEndQuery(GL_ANY_SAMPLES_PASSED);
1256*35238bceSAndroid Build Coastguard Worker glDeleteQueries(1, &query);
1257*35238bceSAndroid Build Coastguard Worker isQuery = glIsQuery(query);
1258*35238bceSAndroid Build Coastguard Worker checkBooleans(isQuery, GL_FALSE);
1259*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1260*35238bceSAndroid Build Coastguard Worker
1261*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1262*35238bceSAndroid Build Coastguard Worker });
1263*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_sampler, "Invalid glIsSampler() usage", {
1264*35238bceSAndroid Build Coastguard Worker GLuint sampler = 0;
1265*35238bceSAndroid Build Coastguard Worker GLboolean isSampler;
1266*35238bceSAndroid Build Coastguard Worker
1267*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenSamplers is the name of a sampler object.");
1268*35238bceSAndroid Build Coastguard Worker isSampler = glIsSampler(sampler);
1269*35238bceSAndroid Build Coastguard Worker checkBooleans(isSampler, GL_FALSE);
1270*35238bceSAndroid Build Coastguard Worker
1271*35238bceSAndroid Build Coastguard Worker glGenSamplers(1, &sampler);
1272*35238bceSAndroid Build Coastguard Worker isSampler = glIsSampler(sampler);
1273*35238bceSAndroid Build Coastguard Worker checkBooleans(isSampler, GL_TRUE);
1274*35238bceSAndroid Build Coastguard Worker
1275*35238bceSAndroid Build Coastguard Worker glBindSampler(0, sampler);
1276*35238bceSAndroid Build Coastguard Worker isSampler = glIsSampler(sampler);
1277*35238bceSAndroid Build Coastguard Worker checkBooleans(isSampler, GL_TRUE);
1278*35238bceSAndroid Build Coastguard Worker
1279*35238bceSAndroid Build Coastguard Worker glDeleteSamplers(1, &sampler);
1280*35238bceSAndroid Build Coastguard Worker isSampler = glIsSampler(sampler);
1281*35238bceSAndroid Build Coastguard Worker checkBooleans(isSampler, GL_FALSE);
1282*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1283*35238bceSAndroid Build Coastguard Worker
1284*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1285*35238bceSAndroid Build Coastguard Worker });
1286*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_sync, "Invalid glIsSync() usage", {
1287*35238bceSAndroid Build Coastguard Worker GLsync sync = 0;
1288*35238bceSAndroid Build Coastguard Worker GLboolean isSync;
1289*35238bceSAndroid Build Coastguard Worker
1290*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glFenceSync is the name of a sync object.");
1291*35238bceSAndroid Build Coastguard Worker isSync = glIsSync(sync);
1292*35238bceSAndroid Build Coastguard Worker checkBooleans(isSync, GL_FALSE);
1293*35238bceSAndroid Build Coastguard Worker
1294*35238bceSAndroid Build Coastguard Worker sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
1295*35238bceSAndroid Build Coastguard Worker isSync = glIsSync(sync);
1296*35238bceSAndroid Build Coastguard Worker checkBooleans(isSync, GL_TRUE);
1297*35238bceSAndroid Build Coastguard Worker
1298*35238bceSAndroid Build Coastguard Worker glDeleteSync(sync);
1299*35238bceSAndroid Build Coastguard Worker isSync = glIsSync(sync);
1300*35238bceSAndroid Build Coastguard Worker checkBooleans(isSync, GL_FALSE);
1301*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1302*35238bceSAndroid Build Coastguard Worker
1303*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1304*35238bceSAndroid Build Coastguard Worker });
1305*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_transform_feedback, "Invalid glIsTransformFeedback() usage", {
1306*35238bceSAndroid Build Coastguard Worker GLuint tf = 0;
1307*35238bceSAndroid Build Coastguard Worker GLboolean isTF;
1308*35238bceSAndroid Build Coastguard Worker
1309*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenTransformFeedbacks, but not yet bound using "
1310*35238bceSAndroid Build Coastguard Worker "glBindTransformFeedback, is not the name of a transform feedback object.");
1311*35238bceSAndroid Build Coastguard Worker isTF = glIsTransformFeedback(tf);
1312*35238bceSAndroid Build Coastguard Worker checkBooleans(isTF, GL_FALSE);
1313*35238bceSAndroid Build Coastguard Worker
1314*35238bceSAndroid Build Coastguard Worker glGenTransformFeedbacks(1, &tf);
1315*35238bceSAndroid Build Coastguard Worker isTF = glIsTransformFeedback(tf);
1316*35238bceSAndroid Build Coastguard Worker checkBooleans(isTF, GL_FALSE);
1317*35238bceSAndroid Build Coastguard Worker
1318*35238bceSAndroid Build Coastguard Worker glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tf);
1319*35238bceSAndroid Build Coastguard Worker isTF = glIsTransformFeedback(tf);
1320*35238bceSAndroid Build Coastguard Worker checkBooleans(isTF, GL_TRUE);
1321*35238bceSAndroid Build Coastguard Worker
1322*35238bceSAndroid Build Coastguard Worker glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0);
1323*35238bceSAndroid Build Coastguard Worker glDeleteTransformFeedbacks(1, &tf);
1324*35238bceSAndroid Build Coastguard Worker isTF = glIsTransformFeedback(tf);
1325*35238bceSAndroid Build Coastguard Worker checkBooleans(isTF, GL_FALSE);
1326*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1327*35238bceSAndroid Build Coastguard Worker
1328*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1329*35238bceSAndroid Build Coastguard Worker });
1330*35238bceSAndroid Build Coastguard Worker ES3F_ADD_API_CASE(is_vertex_array, "Invalid glIsVertexArray() usage", {
1331*35238bceSAndroid Build Coastguard Worker GLuint vao = 0;
1332*35238bceSAndroid Build Coastguard Worker GLboolean isVao;
1333*35238bceSAndroid Build Coastguard Worker
1334*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "A name returned by glGenVertexArrays, but not yet bound using "
1335*35238bceSAndroid Build Coastguard Worker "glBindVertexArray, is not the name of a vertex array object.");
1336*35238bceSAndroid Build Coastguard Worker isVao = glIsVertexArray(vao);
1337*35238bceSAndroid Build Coastguard Worker checkBooleans(isVao, GL_FALSE);
1338*35238bceSAndroid Build Coastguard Worker
1339*35238bceSAndroid Build Coastguard Worker glGenVertexArrays(1, &vao);
1340*35238bceSAndroid Build Coastguard Worker isVao = glIsVertexArray(vao);
1341*35238bceSAndroid Build Coastguard Worker checkBooleans(isVao, GL_FALSE);
1342*35238bceSAndroid Build Coastguard Worker
1343*35238bceSAndroid Build Coastguard Worker glBindVertexArray(vao);
1344*35238bceSAndroid Build Coastguard Worker isVao = glIsVertexArray(vao);
1345*35238bceSAndroid Build Coastguard Worker checkBooleans(isVao, GL_TRUE);
1346*35238bceSAndroid Build Coastguard Worker
1347*35238bceSAndroid Build Coastguard Worker glBindVertexArray(0);
1348*35238bceSAndroid Build Coastguard Worker glDeleteVertexArrays(1, &vao);
1349*35238bceSAndroid Build Coastguard Worker isVao = glIsVertexArray(vao);
1350*35238bceSAndroid Build Coastguard Worker checkBooleans(isVao, GL_FALSE);
1351*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
1352*35238bceSAndroid Build Coastguard Worker
1353*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1354*35238bceSAndroid Build Coastguard Worker });
1355*35238bceSAndroid Build Coastguard Worker }
1356*35238bceSAndroid Build Coastguard Worker
1357*35238bceSAndroid Build Coastguard Worker } // namespace Functional
1358*35238bceSAndroid Build Coastguard Worker } // namespace gles3
1359*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1360