1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Negative Buffer API tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es2fNegativeBufferApiTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "es2fApiCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "glwDefs.hpp"
30*35238bceSAndroid Build Coastguard Worker
31*35238bceSAndroid Build Coastguard Worker using namespace glw; // GL types
32*35238bceSAndroid Build Coastguard Worker
33*35238bceSAndroid Build Coastguard Worker namespace deqp
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker namespace gles2
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker namespace Functional
38*35238bceSAndroid Build Coastguard Worker {
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
41*35238bceSAndroid Build Coastguard Worker
NegativeBufferApiTests(Context & context)42*35238bceSAndroid Build Coastguard Worker NegativeBufferApiTests::NegativeBufferApiTests(Context &context)
43*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "buffer", "Negative Buffer API Cases")
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker }
46*35238bceSAndroid Build Coastguard Worker
~NegativeBufferApiTests(void)47*35238bceSAndroid Build Coastguard Worker NegativeBufferApiTests::~NegativeBufferApiTests(void)
48*35238bceSAndroid Build Coastguard Worker {
49*35238bceSAndroid Build Coastguard Worker }
50*35238bceSAndroid Build Coastguard Worker
init(void)51*35238bceSAndroid Build Coastguard Worker void NegativeBufferApiTests::init(void)
52*35238bceSAndroid Build Coastguard Worker {
53*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(bind_buffer, "Invalid glBindBuffer() usage", {
54*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not one of the allowable values.");
55*35238bceSAndroid Build Coastguard Worker glBindBuffer(-1, 0);
56*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
57*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
58*35238bceSAndroid Build Coastguard Worker });
59*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(delete_buffers, "Invalid glDeleteBuffers() usage", {
60*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
61*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(-1, 0);
62*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
63*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
64*35238bceSAndroid Build Coastguard Worker });
65*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(gen_buffers, "Invalid glGenBuffers() usage", {
66*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
67*35238bceSAndroid Build Coastguard Worker glGenBuffers(-1, 0);
68*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
69*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
70*35238bceSAndroid Build Coastguard Worker });
71*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(buffer_data, "Invalid glBufferData() usage", {
72*35238bceSAndroid Build Coastguard Worker GLuint buffer;
73*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buffer);
74*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buffer);
75*35238bceSAndroid Build Coastguard Worker
76*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
77*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_ENUM is generated if target is not GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER.");
78*35238bceSAndroid Build Coastguard Worker glBufferData(-1, 0, NULL, GL_STREAM_DRAW);
79*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
80*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
81*35238bceSAndroid Build Coastguard Worker
82*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
83*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_ENUM is generated if usage is not GL_STREAM_DRAW, GL_STATIC_DRAW, or GL_DYNAMIC_DRAW.");
84*35238bceSAndroid Build Coastguard Worker glBufferData(GL_ARRAY_BUFFER, 0, NULL, -1);
85*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
86*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
87*35238bceSAndroid Build Coastguard Worker
88*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if size is negative.");
89*35238bceSAndroid Build Coastguard Worker glBufferData(GL_ARRAY_BUFFER, -1, NULL, GL_STREAM_DRAW);
90*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
91*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
92*35238bceSAndroid Build Coastguard Worker
93*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
94*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
95*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, 0);
96*35238bceSAndroid Build Coastguard Worker glBufferData(GL_ARRAY_BUFFER, 0, NULL, GL_STREAM_DRAW);
97*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
98*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buffer);
101*35238bceSAndroid Build Coastguard Worker });
102*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(buffer_sub_data, "Invalid glBufferSubData() usage", {
103*35238bceSAndroid Build Coastguard Worker GLuint buffer;
104*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buffer);
105*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buffer);
106*35238bceSAndroid Build Coastguard Worker glBufferData(GL_ARRAY_BUFFER, 10, 0, GL_STREAM_DRAW);
107*35238bceSAndroid Build Coastguard Worker
108*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
109*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_ENUM is generated if target is not GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER.");
110*35238bceSAndroid Build Coastguard Worker glBufferSubData(-1, 1, 1, 0);
111*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
112*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
113*35238bceSAndroid Build Coastguard Worker
114*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
115*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
116*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, 0);
117*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, 1, 1, 0);
118*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
119*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
120*35238bceSAndroid Build Coastguard Worker
121*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buffer);
122*35238bceSAndroid Build Coastguard Worker });
123*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(buffer_sub_data_size_offset, "Invalid glBufferSubData() usage", {
124*35238bceSAndroid Build Coastguard Worker GLuint buffer;
125*35238bceSAndroid Build Coastguard Worker glGenBuffers(1, &buffer);
126*35238bceSAndroid Build Coastguard Worker glBindBuffer(GL_ARRAY_BUFFER, buffer);
127*35238bceSAndroid Build Coastguard Worker glBufferData(GL_ARRAY_BUFFER, 10, 0, GL_STREAM_DRAW);
128*35238bceSAndroid Build Coastguard Worker
129*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
130*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if offset or size is negative, or if together they define a region of "
131*35238bceSAndroid Build Coastguard Worker "memory that extends beyond the buffer object's allocated data store.");
132*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, -1, 1, 0);
133*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
134*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, -1, -1, 0);
135*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
136*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, 1, -1, 0);
137*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
138*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, 15, 1, 0);
139*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
140*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, 1, 15, 0);
141*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
142*35238bceSAndroid Build Coastguard Worker glBufferSubData(GL_ARRAY_BUFFER, 8, 8, 0);
143*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
144*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
145*35238bceSAndroid Build Coastguard Worker
146*35238bceSAndroid Build Coastguard Worker glDeleteBuffers(1, &buffer);
147*35238bceSAndroid Build Coastguard Worker });
148*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(clear, "Invalid glClear() usage", {
149*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
150*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if any bit other than the three defined bits is set in mask.");
151*35238bceSAndroid Build Coastguard Worker glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
152*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
153*35238bceSAndroid Build Coastguard Worker glClear(0x00000200);
154*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
155*35238bceSAndroid Build Coastguard Worker glClear(0x00001000);
156*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
157*35238bceSAndroid Build Coastguard Worker glClear(0x00000010);
158*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
159*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
160*35238bceSAndroid Build Coastguard Worker });
161*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(read_pixels, "Invalid glReadPixels() usage", {
162*35238bceSAndroid Build Coastguard Worker std::vector<GLubyte> ubyteData(4);
163*35238bceSAndroid Build Coastguard Worker
164*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
165*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the combination of format and type is unsupported.");
166*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, &ubyteData[0]);
167*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
168*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
169*35238bceSAndroid Build Coastguard Worker
170*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if either width or height is negative.");
171*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, -1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]);
172*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
173*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, -1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]);
174*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
175*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]);
176*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
177*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
178*35238bceSAndroid Build Coastguard Worker
179*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound "
180*35238bceSAndroid Build Coastguard Worker "framebuffer is not framebuffer complete.");
181*35238bceSAndroid Build Coastguard Worker GLuint fbo;
182*35238bceSAndroid Build Coastguard Worker glGenFramebuffers(1, &fbo);
183*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, fbo);
184*35238bceSAndroid Build Coastguard Worker glCheckFramebufferStatus(GL_FRAMEBUFFER);
185*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]);
186*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
187*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
188*35238bceSAndroid Build Coastguard Worker });
189*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(read_pixels_format_mismatch, "Invalid glReadPixels() usage", {
190*35238bceSAndroid Build Coastguard Worker std::vector<GLubyte> ubyteData(4);
191*35238bceSAndroid Build Coastguard Worker std::vector<GLushort> ushortData(4);
192*35238bceSAndroid Build Coastguard Worker
193*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
194*35238bceSAndroid Build Coastguard Worker "", "Unsupported combinations of format and type will generate an INVALID_OPERATION error.");
195*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]);
196*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
197*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]);
198*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
199*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]);
200*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
201*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]);
202*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
203*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]);
204*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
205*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]);
206*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
207*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
208*35238bceSAndroid Build Coastguard Worker
209*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
210*35238bceSAndroid Build Coastguard Worker "", "GL_RGBA/GL_UNSIGNED_BYTE is always accepted and the other acceptable pair can be discovered by "
211*35238bceSAndroid Build Coastguard Worker "querying GL_IMPLEMENTATION_COLOR_READ_FORMAT and GL_IMPLEMENTATION_COLOR_READ_TYPE.");
212*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]);
213*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
214*35238bceSAndroid Build Coastguard Worker GLint readFormat;
215*35238bceSAndroid Build Coastguard Worker GLint readType;
216*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &readFormat);
217*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &readType);
218*35238bceSAndroid Build Coastguard Worker glReadPixels(0, 0, 1, 1, readFormat, readType, &ubyteData[0]);
219*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
220*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
221*35238bceSAndroid Build Coastguard Worker });
222*35238bceSAndroid Build Coastguard Worker
223*35238bceSAndroid Build Coastguard Worker // Framebuffer Objects
224*35238bceSAndroid Build Coastguard Worker
225*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(bind_framebuffer, "Invalid glBindFramebuffer() usage", {
226*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER.");
227*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(-1, 0);
228*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
229*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_RENDERBUFFER, 0);
230*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
231*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
232*35238bceSAndroid Build Coastguard Worker });
233*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(bind_renderbuffer, "Invalid glBindRenderbuffer() usage", {
234*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
235*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(-1, 0);
236*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
237*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_FRAMEBUFFER, 0);
238*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
239*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
240*35238bceSAndroid Build Coastguard Worker });
241*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(check_framebuffer_status, "Invalid glCheckFramebufferStatus() usage", {
242*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER.");
243*35238bceSAndroid Build Coastguard Worker glCheckFramebufferStatus(-1);
244*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
245*35238bceSAndroid Build Coastguard Worker glCheckFramebufferStatus(GL_RENDERBUFFER);
246*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
247*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
248*35238bceSAndroid Build Coastguard Worker });
249*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(gen_framebuffers, "Invalid glGenFramebuffers() usage", {
250*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
251*35238bceSAndroid Build Coastguard Worker glGenFramebuffers(-1, 0);
252*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
253*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
254*35238bceSAndroid Build Coastguard Worker });
255*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(gen_renderbuffers, "Invalid glGenRenderbuffers() usage", {
256*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
257*35238bceSAndroid Build Coastguard Worker glGenRenderbuffers(-1, 0);
258*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
259*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
260*35238bceSAndroid Build Coastguard Worker });
261*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(delete_framebuffers, "Invalid glDeleteFramebuffers() usage", {
262*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
263*35238bceSAndroid Build Coastguard Worker glDeleteFramebuffers(-1, 0);
264*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
265*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
266*35238bceSAndroid Build Coastguard Worker });
267*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(delete_renderbuffers, "Invalid glDeleteRenderbuffers() usage", {
268*35238bceSAndroid Build Coastguard Worker ;
269*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
270*35238bceSAndroid Build Coastguard Worker glDeleteRenderbuffers(-1, 0);
271*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
272*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
273*35238bceSAndroid Build Coastguard Worker });
274*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(framebuffer_renderbuffer, "Invalid glFramebufferRenderbuffer() usage", {
275*35238bceSAndroid Build Coastguard Worker GLuint fbo;
276*35238bceSAndroid Build Coastguard Worker GLuint rbo;
277*35238bceSAndroid Build Coastguard Worker glGenFramebuffers(1, &fbo);
278*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, fbo);
279*35238bceSAndroid Build Coastguard Worker glGenRenderbuffers(1, &rbo);
280*35238bceSAndroid Build Coastguard Worker
281*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER.");
282*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(-1, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0);
283*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
284*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
285*35238bceSAndroid Build Coastguard Worker
286*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
287*35238bceSAndroid Build Coastguard Worker "GL_INVALID_ENUM is generated if attachment is not an accepted attachment point.");
288*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(GL_FRAMEBUFFER, -1, GL_RENDERBUFFER, 0);
289*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
290*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
291*35238bceSAndroid Build Coastguard Worker
292*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if renderbuffertarget is not GL_RENDERBUFFER.");
293*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, rbo);
294*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, rbo);
295*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
296*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, 0);
297*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
298*35238bceSAndroid Build Coastguard Worker
299*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if renderbuffer is neither 0 nor the name of "
300*35238bceSAndroid Build Coastguard Worker "an existing renderbuffer object.");
301*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, -1);
302*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
303*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
304*35238bceSAndroid Build Coastguard Worker
305*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
306*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the default framebuffer object name 0 is bound.");
307*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, 0);
308*35238bceSAndroid Build Coastguard Worker glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0);
309*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
310*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
311*35238bceSAndroid Build Coastguard Worker
312*35238bceSAndroid Build Coastguard Worker glDeleteRenderbuffers(1, &rbo);
313*35238bceSAndroid Build Coastguard Worker glDeleteFramebuffers(1, &fbo);
314*35238bceSAndroid Build Coastguard Worker });
315*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(framebuffer_texture2d, "Invalid glFramebufferTexture2D() usage", {
316*35238bceSAndroid Build Coastguard Worker GLuint fbo;
317*35238bceSAndroid Build Coastguard Worker GLuint tex2D;
318*35238bceSAndroid Build Coastguard Worker GLuint texCube;
319*35238bceSAndroid Build Coastguard Worker glGenFramebuffers(1, &fbo);
320*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, fbo);
321*35238bceSAndroid Build Coastguard Worker glGenTextures(1, &tex2D);
322*35238bceSAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, tex2D);
323*35238bceSAndroid Build Coastguard Worker glGenTextures(1, &texCube);
324*35238bceSAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_CUBE_MAP, texCube);
325*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
326*35238bceSAndroid Build Coastguard Worker
327*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER.");
328*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(-1, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
329*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
330*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
331*35238bceSAndroid Build Coastguard Worker
332*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if textarget is not an accepted texture target.");
333*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, tex2D, 0);
334*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
335*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
336*35238bceSAndroid Build Coastguard Worker
337*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("",
338*35238bceSAndroid Build Coastguard Worker "GL_INVALID_ENUM is generated if attachment is not an accepted attachment point.");
339*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, -1, GL_TEXTURE_2D, 0, 0);
340*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
341*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
342*35238bceSAndroid Build Coastguard Worker
343*35238bceSAndroid Build Coastguard Worker if (!(m_context.getContextInfo().isExtensionSupported("GL_OES_fbo_render_mipmap") ||
344*35238bceSAndroid Build Coastguard Worker m_context.getContextInfo().isES3Compatible()))
345*35238bceSAndroid Build Coastguard Worker {
346*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is not 0.");
347*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, 3);
348*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
349*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
350*35238bceSAndroid Build Coastguard Worker }
351*35238bceSAndroid Build Coastguard Worker
352*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
353*35238bceSAndroid Build Coastguard Worker "",
354*35238bceSAndroid Build Coastguard Worker "GL_INVALID_OPERATION is generated if texture is neither 0 nor the name of an existing texture object.");
355*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, -1, 0);
356*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
357*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
358*35238bceSAndroid Build Coastguard Worker
359*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if texture is the name of an existing "
360*35238bceSAndroid Build Coastguard Worker "two-dimensional texture object but textarget is not GL_TEXTURE_2D.");
361*35238bceSAndroid Build Coastguard Worker
362*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
363*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, tex2D, 0);
364*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
365*35238bceSAndroid Build Coastguard Worker glDeleteTextures(1, &tex2D);
366*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
367*35238bceSAndroid Build Coastguard Worker
368*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if texture is the name of an existing cube "
369*35238bceSAndroid Build Coastguard Worker "map texture object but textarget is GL_TEXTURE_2D.");
370*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texCube, 0);
371*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
372*35238bceSAndroid Build Coastguard Worker glDeleteTextures(1, &texCube);
373*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
374*35238bceSAndroid Build Coastguard Worker
375*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
376*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the default framebuffer object name 0 is bound.");
377*35238bceSAndroid Build Coastguard Worker glBindFramebuffer(GL_FRAMEBUFFER, 0);
378*35238bceSAndroid Build Coastguard Worker glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
379*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
380*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
381*35238bceSAndroid Build Coastguard Worker
382*35238bceSAndroid Build Coastguard Worker glDeleteFramebuffers(1, &fbo);
383*35238bceSAndroid Build Coastguard Worker });
384*35238bceSAndroid Build Coastguard Worker ES2F_ADD_API_CASE(renderbuffer_storage, "Invalid glRenderbufferStorage() usage", {
385*35238bceSAndroid Build Coastguard Worker GLuint rbo;
386*35238bceSAndroid Build Coastguard Worker glGenRenderbuffers(1, &rbo);
387*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, rbo);
388*35238bceSAndroid Build Coastguard Worker
389*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
390*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(-1, GL_RGBA4, 1, 1);
391*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
392*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_FRAMEBUFFER, GL_RGBA4, 1, 1);
393*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
394*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
395*35238bceSAndroid Build Coastguard Worker
396*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if internalformat is not an accepted format.");
397*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, -1, 1, 1);
398*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
399*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 1, 1);
400*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
401*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 1, 1);
402*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_ENUM);
403*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
404*35238bceSAndroid Build Coastguard Worker
405*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than zero.");
406*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, -1, 1);
407*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
408*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, 1, -1);
409*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
410*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, -1, -1);
411*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
412*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
413*35238bceSAndroid Build Coastguard Worker
414*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
415*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_RENDERBUFFER_SIZE.");
416*35238bceSAndroid Build Coastguard Worker GLint maxSize;
417*35238bceSAndroid Build Coastguard Worker glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &maxSize);
418*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, 1, maxSize + 1);
419*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
420*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, maxSize + 1, 1);
421*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
422*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, maxSize + 1, maxSize + 1);
423*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_VALUE);
424*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
425*35238bceSAndroid Build Coastguard Worker
426*35238bceSAndroid Build Coastguard Worker m_log << TestLog::Section(
427*35238bceSAndroid Build Coastguard Worker "", "GL_INVALID_OPERATION is generated if the reserved renderbuffer object name 0 is bound.");
428*35238bceSAndroid Build Coastguard Worker glBindRenderbuffer(GL_RENDERBUFFER, 0);
429*35238bceSAndroid Build Coastguard Worker glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, 1, 1);
430*35238bceSAndroid Build Coastguard Worker expectError(GL_INVALID_OPERATION);
431*35238bceSAndroid Build Coastguard Worker m_log << TestLog::EndSection;
432*35238bceSAndroid Build Coastguard Worker
433*35238bceSAndroid Build Coastguard Worker glDeleteRenderbuffers(1, &rbo);
434*35238bceSAndroid Build Coastguard Worker });
435*35238bceSAndroid Build Coastguard Worker }
436*35238bceSAndroid Build Coastguard Worker
437*35238bceSAndroid Build Coastguard Worker } // namespace Functional
438*35238bceSAndroid Build Coastguard Worker } // namespace gles2
439*35238bceSAndroid Build Coastguard Worker } // namespace deqp
440