13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.1 Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Negative Buffer API tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es31fNegativeBufferApiTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluCallLogWrapper.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwDefs.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles31 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace NegativeTestShared 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog; 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing glu::CallLogWrapper; 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glw; 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Buffers 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid bind_buffer (NegativeTestContext& ctx) 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the allowable values."); 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(-1, 0); 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid delete_buffers (NegativeTestContext& ctx) 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(-1, 0); 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid gen_buffers (NegativeTestContext& ctx) 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(-1, 0); 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid buffer_data (NegativeTestContext& ctx) 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffer = 0x1234; 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &buffer); 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_ARRAY_BUFFER, buffer); 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER."); 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(-1, 0, NULL, GL_STREAM_DRAW); 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if usage is not GL_STREAM_DRAW, GL_STATIC_DRAW, or GL_DYNAMIC_DRAW."); 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_ARRAY_BUFFER, 0, NULL, -1); 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if size is negative."); 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_ARRAY_BUFFER, -1, NULL, GL_STREAM_DRAW); 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target."); 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_ARRAY_BUFFER, 0); 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_ARRAY_BUFFER, 0, NULL, GL_STREAM_DRAW); 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &buffer); 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid buffer_sub_data (NegativeTestContext& ctx) 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffer = 0x1234; 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &buffer); 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_ARRAY_BUFFER, buffer); 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_ARRAY_BUFFER, 10, 0, GL_STREAM_DRAW); 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER."); 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(-1, 1, 1, 0); 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target."); 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_ARRAY_BUFFER, 0); 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, 1, 1, 0); 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer object being updated is mapped."); 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_ARRAY_BUFFER, buffer); 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange(GL_ARRAY_BUFFER, 0, 5, GL_MAP_READ_BIT); 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_NO_ERROR); 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, 1, 1, 0); 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &buffer); 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid buffer_sub_data_size_offset (NegativeTestContext& ctx) 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffer = 0x1234; 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &buffer); 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_ARRAY_BUFFER, buffer); 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_ARRAY_BUFFER, 10, 0, GL_STREAM_DRAW); 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if offset or size is negative, or if together they define a region of memory that extends beyond the buffer object's allocated data store."); 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, -1, 1, 0); 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, -1, -1, 0); 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, 1, -1, 0); 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, 15, 1, 0); 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, 1, 15, 0); 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferSubData(GL_ARRAY_BUFFER, 8, 8, 0); 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &buffer); 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid clear (NegativeTestContext& ctx) 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if any bit other than the three defined bits is set in mask."); 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_NO_ERROR); 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glClear(0x00000200); 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glClear(0x00001000); 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glClear(0x00000010); 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid read_pixels (NegativeTestContext& ctx) 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 169fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLubyte> ubyteData (4); 170fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint fbo = 0x1234; 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of format and type is unsupported."); 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, &ubyteData[0]); 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if either width or height is negative."); 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, -1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]); 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, -1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]); 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]); 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete."); 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers(1, &fbo); 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]); 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers(1, &fbo); 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 197fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulosvoid readn_pixels (NegativeTestContext& ctx) 198fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos{ 199d99ba132d92fb015a4008910a98a257fad1199a6Alexander Galazin std::vector<GLfloat> floatData (4); 200fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLubyte> ubyteData (4); 201fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint fbo = 0x1234; 202fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 20333b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) 20433b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi && !ctx.isExtensionSupported("GL_KHR_robustness") 20533b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi && !ctx.isExtensionSupported("GL_EXT_robustness")) 20633b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi { 20733b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi TCU_THROW(NotSupportedError, "GLES 3.2 or robustness extension not supported"); 20833b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi } 20933b9b63106a43ad6bba497c8f31fc35b0051da78Mika Isojärvi 210fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of format and type is unsupported."); 211fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glReadnPixels(0, 0, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, (int) ubyteData.size(), &ubyteData[0]); 212fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 213fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 214fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 215fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if either width or height is negative."); 216fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glReadnPixels(0, 0, -1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (int) ubyteData.size(), &ubyteData[0]); 217fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 218fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glReadnPixels(0, 0, 1, -1, GL_RGBA, GL_UNSIGNED_BYTE, (int) ubyteData.size(), &ubyteData[0]); 219fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 220fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glReadnPixels(0, 0, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, (int) ubyteData.size(), &ubyteData[0]); 221fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 222fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 223fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 224fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated by ReadnPixels if the buffer size required to store the requested data is larger than bufSize."); 225fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glReadnPixels(0, 0, 0x1234, 0x1234, GL_RGBA, GL_UNSIGNED_BYTE, (int) ubyteData.size(), &ubyteData[0]); 226fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 227d99ba132d92fb015a4008910a98a257fad1199a6Alexander Galazin ctx.glReadnPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT, (int) floatData.size(), &floatData[0]); 228d99ba132d92fb015a4008910a98a257fad1199a6Alexander Galazin ctx.expectError(GL_INVALID_OPERATION); 229fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 230fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 231fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete."); 232fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenFramebuffers(1, &fbo); 233fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 234fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 235fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glReadnPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (int) ubyteData.size(), &ubyteData[0]); 236fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 237fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 238fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 239fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteFramebuffers(1, &fbo); 240fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos} 241fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid read_pixels_format_mismatch (NegativeTestContext& ctx) 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 244fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLubyte> ubyteData (4); 245fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLushort> ushortData (4); 246fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLint readFormat = 0x1234; 247fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLint readType = 0x1234; 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 249fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("Unsupported combinations of format and type will generate an GL_INVALID_OPERATION error."); 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]); 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]); 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]); 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]); 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]); 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]); 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_RGBA/GL_UNSIGNED_BYTE is always accepted and the other acceptable pair can be discovered by querying GL_IMPLEMENTATION_COLOR_READ_FORMAT and GL_IMPLEMENTATION_COLOR_READ_TYPE."); 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]); 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_NO_ERROR); 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &readFormat); 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &readType); 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels(0, 0, 1, 1, readFormat, readType, &ubyteData[0]); 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_NO_ERROR); 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid read_pixels_fbo_format_mismatch (NegativeTestContext& ctx) 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<GLubyte> ubyteData(4); 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<float> floatData(4); 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 fbo = 0x1234; 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 texture = 0x1234; 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if currently bound framebuffer format is incompatible with format and type."); 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels (0, 0, 1, 1, GL_RGBA, GL_FLOAT, &floatData[0]); 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32I, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, NULL); 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels (0, 0, 1, 1, GL_RGBA, GL_FLOAT, &floatData[0]); 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32UI, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL); 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels (0, 0, 1, 1, GL_RGBA, GL_FLOAT, &floatData[0]); 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31237e360591e357a7c087b817735860a9f0e922a88Pyry Haulos if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || 31337e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.isExtensionSupported("GL_EXT_color_buffer_float")) 31437e360591e357a7c087b817735860a9f0e922a88Pyry Haulos { 31537e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32F, 32, 32, 0, GL_RGBA, GL_FLOAT, NULL); 31637e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.expectError (GL_NO_ERROR); 31737e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 31837e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 31937e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.expectError (GL_NO_ERROR); 32037e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.glReadPixels (0, 0, 1, 1, GL_RGBA, GL_INT, &floatData[0]); 32137e360591e357a7c087b817735860a9f0e922a88Pyry Haulos ctx.expectError (GL_INVALID_OPERATION); 32237e360591e357a7c087b817735860a9f0e922a88Pyry Haulos } 323fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if GL_READ_FRAMEBUFFER_BINDING is non-zero, the read framebuffer is complete, and the value of GL_SAMPLE_BUFFERS for the read framebuffer is greater than zero."); 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int binding = -1; 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int sampleBuffers = 0x1234; 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo = 0x1234; 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers(1, &rbo); 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer(GL_RENDERBUFFER, rbo); 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, 32, 32); 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo); 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_READ_FRAMEBUFFER_BINDING, &binding); 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// GL_READ_FRAMEBUFFER_BINDING: " << binding << TestLog::EndMessage; 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_SAMPLE_BUFFERS, &sampleBuffers); 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// GL_SAMPLE_BUFFERS: " << sampleBuffers << TestLog::EndMessage; 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (binding == 0 || sampleBuffers <= 0) 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// ERROR: expected GL_READ_FRAMEBUFFER_BINDING to be non-zero and GL_SAMPLE_BUFFERS to be greater than zero" << TestLog::EndMessage; 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.fail("Got invalid value"); 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadPixels (0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]); 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, 0); 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, 0); 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers (1, &fbo); 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (1, &texture); 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers (1, &rbo); 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid bind_buffer_range (NegativeTestContext& ctx) 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 367fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 bufAC = 0x1234; 368fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 bufU = 0x1234; 369fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 bufTF = 0x1234; 370fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxTFSize = 0x1234; 371fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxUSize = 0x1234; 372fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int uAlignment = 0x1234; 373fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &bufU); 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_UNIFORM_BUFFER, bufU); 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_UNIFORM_BUFFER, 16, NULL, GL_STREAM_DRAW); 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &bufTF); 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, bufTF); 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 16, NULL, GL_STREAM_DRAW); 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 382fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenBuffers(1, &bufAC); 383fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, bufAC); 384fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBufferData(GL_ATOMIC_COUNTER_BUFFER, 16, NULL, GL_STREAM_DRAW); 385fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 386fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_ATOMIC_COUNTER_BUFFER, GL_SHADER_STORAGE_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER or GL_UNIFORM_BUFFER."); 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_ARRAY_BUFFER, 0, bufU, 0, 4); 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TRANSFORM_FEEDBACK_BUFFER and index is greater than or equal to GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS."); 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxTFSize); 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, maxTFSize, bufTF, 0, 4); 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_UNIFORM_BUFFER and index is greater than or equal to GL_MAX_UNIFORM_BUFFER_BINDINGS."); 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUSize); 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_UNIFORM_BUFFER, maxUSize, bufU, 0, 4); 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if size is less than or equal to zero."); 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_UNIFORM_BUFFER, 0, bufU, 0, -1); 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_UNIFORM_BUFFER, 0, bufU, 0, 0); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 410fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if offset is less than zero."); 411fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindBufferRange(GL_UNIFORM_BUFFER, 0, bufU, -1, 0); 412fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 413fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 414fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TRANSFORM_FEEDBACK_BUFFER and size or offset are not multiples of 4."); 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, bufTF, 4, 5); 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, bufTF, 5, 4); 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, bufTF, 5, 7); 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_UNIFORM_BUFFER and offset is not a multiple of GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT."); 425fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &uAlignment); 426fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindBufferRange(GL_UNIFORM_BUFFER, 0, bufU, uAlignment+1, 4); 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 430fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 431fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos { 432fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxACize = 0x1234; 433fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxSSize = 0x1234; 434fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int ssAlignment = 0x1234; 435fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 436fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_ATOMIC_COUNTER_BUFFER and index is greater than or equal to GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS."); 437fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv(GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &maxACize); 438fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, maxACize, bufU, 0, 4); 439fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 440fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 441fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 442fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_SHADER_STORAGE_BUFFER and index is greater than or equal to GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS."); 443fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv(GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, &maxSSize); 444fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindBufferRange(GL_SHADER_STORAGE_BUFFER, maxSSize, bufU, 0, 4); 445fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 446fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 447fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 448fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_ATOMIC_COUNTER_BUFFER and offset is not multiples of 4."); 44951e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson ctx.glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, 0, bufTF, 5, 4); 450fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 451fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 452fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 453fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, &ssAlignment); 45451e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson 45551e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson if (ssAlignment != 1) 45651e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson { 45751e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_SHADER_STORAGE_BUFFER and offset is not a multiple of the value of GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT."); 45851e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson ctx.glBindBufferRange(GL_SHADER_STORAGE_BUFFER, 0, bufTF, ssAlignment+1, 4); 45951e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson ctx.expectError(GL_INVALID_VALUE); 46051e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson ctx.endSection(); 46151e20f1e2525f27b6e0ab81ffe7469fd4b33e5e7John Richardson } 462fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos } 463fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &bufU); 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &bufTF); 466fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteBuffers(1, &bufAC); 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid bind_buffer_base (NegativeTestContext& ctx) 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 471fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 bufU = 0x1234; 472fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 bufTF = 0x1234; 473fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxUSize = 0x1234; 474fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxTFSize = 0x1234; 475fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &bufU); 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_UNIFORM_BUFFER, bufU); 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_UNIFORM_BUFFER, 16, NULL, GL_STREAM_DRAW); 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers(1, &bufTF); 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, bufTF); 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 16, NULL, GL_STREAM_DRAW); 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_NO_ERROR); 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 485fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_ATOMIC_COUNTER_BUFFER, GL_SHADER_STORAGE_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER or GL_UNIFORM_BUFFER."); 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferBase(-1, 0, bufU); 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferBase(GL_ARRAY_BUFFER, 0, bufU); 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_UNIFORM_BUFFER and index is greater than or equal to GL_MAX_UNIFORM_BUFFER_BINDINGS."); 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUSize); 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferBase(GL_UNIFORM_BUFFER, maxUSize, bufU); 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TRANSFORM_FEEDBACK_BUFFER andindex is greater than or equal to GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS."); 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxTFSize); 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, maxTFSize, bufTF); 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &bufU); 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(1, &bufTF); 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid clear_bufferiv (NegativeTestContext& ctx) 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 510fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<int> data (32*32); 511fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 fbo = 0x1234; 512fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 texture = 0x1234; 513fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxDrawBuffers = 0x1234; 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32I, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, NULL); 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if buffer is not an accepted value."); 525fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (-1, 0, &data[0]); 526fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 527fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (GL_FRAMEBUFFER, 0, &data[0]); 528fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 531fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if buffer is GL_DEPTH or GL_DEPTH_STENCIL."); 532fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (GL_DEPTH, 1, &data[0]); 533fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 534fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (GL_DEPTH_STENCIL, 1, &data[0]); 535fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 538fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_COLOR or GL_STENCIL and drawBuffer is greater than or equal to GL_MAX_DRAW_BUFFERS."); 539fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 540fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (GL_COLOR, maxDrawBuffers, &data[0]); 541fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 542fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 543fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 544fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_COLOR or GL_STENCIL and drawBuffer is negative."); 545fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (GL_COLOR, -1, &data[0]); 546fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_STENCIL and drawBuffer is not zero."); 550fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferiv (GL_STENCIL, 1, &data[0]); 551fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 554fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteFramebuffers (1, &fbo); 555fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures (1, &texture); 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid clear_bufferuiv (NegativeTestContext& ctx) 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 560fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<deUint32> data (32*32); 561fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 fbo = 0x1234; 562fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 texture = 0x1234; 563fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxDrawBuffers = 0x1234; 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32UI, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL); 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 574fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if buffer is not GL_COLOR."); 575fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (-1, 0, &data[0]); 576fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 577fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (GL_FRAMEBUFFER, 0, &data[0]); 578fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 581fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if buffer is GL_DEPTH, GL_STENCIL, or GL_DEPTH_STENCIL."); 582fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (GL_DEPTH, 0, &data[0]); 583fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 584fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (GL_STENCIL, 0, &data[0]); 585fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 586fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (GL_DEPTH_STENCIL, 0, &data[0]); 587fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 590fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_COLOR and drawBuffer is greater than or equal to GL_MAX_DRAW_BUFFERS."); 591fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 592fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (GL_COLOR, maxDrawBuffers, &data[0]); 593fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 596fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_COLOR and drawBuffer is negative."); 597fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferuiv (GL_COLOR, -1, &data[0]); 598fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 599fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 600fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 601fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteFramebuffers (1, &fbo); 602fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures (1, &texture); 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid clear_bufferfv (NegativeTestContext& ctx) 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 607fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<float> data (32*32); 608fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 fbo = 0x1234; 609fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 texture = 0x1234; 610653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos int maxDrawBuffers = 0x1234; 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32F, 32, 32, 0, GL_RGBA, GL_FLOAT, NULL); 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 621fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if buffer is not GL_COLOR or GL_DEPTH."); 622fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (-1, 0, &data[0]); 623fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 624fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (GL_FRAMEBUFFER, 0, &data[0]); 625fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 628fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if buffer is GL_STENCIL or GL_DEPTH_STENCIL."); 629fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (GL_STENCIL, 1, &data[0]); 630fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 631fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (GL_DEPTH_STENCIL, 1, &data[0]); 632fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 635fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_COLOR and drawBuffer is greater than or equal to GL_MAX_DRAW_BUFFERS."); 636fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 637fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (GL_COLOR, maxDrawBuffers, &data[0]); 638fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 639fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 640fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 641fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_COLOR and drawBuffer is negative."); 642fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (GL_COLOR, -1, &data[0]); 643fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_DEPTH and drawBuffer is not zero."); 647fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfv (GL_DEPTH, 1, &data[0]); 648fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 651fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteFramebuffers (1, &fbo); 652fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures (1, &texture); 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid clear_bufferfi (NegativeTestContext& ctx) 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if buffer is not GL_DEPTH_STENCIL."); 658fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfi (-1, 0, 1.0f, 1); 659fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 660fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfi (GL_FRAMEBUFFER, 0, 1.0f, 1); 661fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 662fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfi (GL_DEPTH, 0, 1.0f, 1); 663fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 664fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfi (GL_STENCIL, 0, 1.0f, 1); 665fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 666fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfi (GL_COLOR, 0, 1.0f, 1); 667fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if buffer is GL_DEPTH_STENCIL and drawBuffer is not zero."); 671fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glClearBufferfi (GL_DEPTH_STENCIL, 1, 1.0f, 1); 672fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid copy_buffer_sub_data (NegativeTestContext& ctx) 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 buf[2]; 679fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<float> data (32*32); 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers (2, buf); 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_READ_BUFFER, buf[0]); 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData (GL_COPY_READ_BUFFER, 32, &data[0], GL_DYNAMIC_COPY); 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_WRITE_BUFFER, buf[1]); 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData (GL_COPY_WRITE_BUFFER, 32, &data[0], GL_DYNAMIC_COPY); 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if any of readoffset, writeoffset or size is negative."); 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, -4); 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, -1, 0, 4); 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, -1, 4); 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if readoffset + size exceeds the size of the buffer object bound to readtarget."); 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 36); 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 24, 0, 16); 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 36, 0, 4); 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if writeoffset + size exceeds the size of the buffer object bound to writetarget."); 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 36); 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 24, 16); 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 36, 4); 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if the same buffer object is bound to both readtarget and writetarget and the ranges [readoffset, readoffset + size) and [writeoffset, writeoffset + size) overlap."); 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_WRITE_BUFFER, buf[0]); 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 16, 4); 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 4); 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 16, 18); 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_WRITE_BUFFER, buf[1]); 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if zero is bound to readtarget or writetarget."); 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_READ_BUFFER, 0); 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 16); 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_READ_BUFFER, buf[0]); 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_WRITE_BUFFER, 0); 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 16); 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_COPY_WRITE_BUFFER, buf[1]); 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer object bound to either readtarget or writetarget is mapped."); 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_COPY_READ_BUFFER, 0, 4, GL_MAP_READ_BIT); 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 16); 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glUnmapBuffer (GL_COPY_READ_BUFFER); 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_COPY_WRITE_BUFFER, 0, 4, GL_MAP_READ_BIT); 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, 16); 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glUnmapBuffer (GL_COPY_WRITE_BUFFER); 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers(2, buf); 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid draw_buffers (NegativeTestContext& ctx) 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 756653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos deUint32 fbo = 0x1234; 757653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos deUint32 texture = 0x1234; 758653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos int maxDrawBuffers = 0x1234; 759fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxColorAttachments = -1; 760fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments); 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 762fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<deUint32> values (maxDrawBuffers+1); 763fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<deUint32> attachments (4); 764fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLfloat> data (32*32); 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[0] = GL_NONE; 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[1] = GL_BACK; 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[2] = GL_COLOR_ATTACHMENT0; 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[3] = GL_DEPTH_ATTACHMENT; 769fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[0] = (glw::GLenum) (GL_COLOR_ATTACHMENT0 + maxColorAttachments); 770fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[1] = GL_COLOR_ATTACHMENT0; 771fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[2] = GL_COLOR_ATTACHMENT1; 772fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[3] = GL_NONE; 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if one of the values in bufs is not an accepted value."); 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDrawBuffers (2, &values[2]); 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 788fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if the GL is bound to a draw framebuffer and DrawBuffers is supplied with BACK or COLOR_ATTACHMENTm where m is greater than or equal to the value of MAX_COLOR_ATTACHMENTS."); 789fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 790fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDrawBuffers (1, &values[1]); 791fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 792fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDrawBuffers (4, &attachments[0]); 793fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 794fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 795fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the GL is bound to the default framebuffer and n is not 1."); 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDrawBuffers (2, &values[0]); 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the GL is bound to the default framebuffer and the value in bufs is one of the GL_COLOR_ATTACHMENTn tokens."); 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDrawBuffers (1, &values[2]); 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the GL is bound to a framebuffer object and the ith buffer listed in bufs is anything other than GL_NONE or GL_COLOR_ATTACHMENTSi."); 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDrawBuffers (1, &values[1]); 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 812fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDrawBuffers (4, &attachments[0]); 813fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 814fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is less than 0 or greater than GL_MAX_DRAW_BUFFERS."); 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDrawBuffers (-1, &values[1]); 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDrawBuffers (maxDrawBuffers+1, &values[0]); 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures(1, &texture); 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers(1, &fbo); 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid flush_mapped_buffer_range (NegativeTestContext& ctx) 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 830fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 buf = 0x1234; 831fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLfloat> data (32); 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers (1, &buf); 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_ARRAY_BUFFER, buf); 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData (GL_ARRAY_BUFFER, 32, &data[0], GL_STATIC_READ); 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 839fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted values."); 840fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFlushMappedBufferRange(-1, 0, 16); 841fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 842fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 843fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if offset or length is negative, or if offset + length exceeds the size of the mapping."); 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, -1, 1); 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, -1); 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 12, 8); 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 24, 4); 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, 24); 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if zero is bound to target."); 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_ARRAY_BUFFER, 0); 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, 8); 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer bound to target is not mapped, or is mapped without the GL_MAP_FLUSH_EXPLICIT flag."); 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_ARRAY_BUFFER, buf); 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glUnmapBuffer (GL_ARRAY_BUFFER); 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, 8); 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_WRITE_BIT); 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, 8); 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glUnmapBuffer (GL_ARRAY_BUFFER); 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers (1, &buf); 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid map_buffer_range (NegativeTestContext& ctx) 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 879fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 buf = 0x1234; 880fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLfloat> data (32); 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers (1, &buf); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_ARRAY_BUFFER, buf); 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData (GL_ARRAY_BUFFER, 32, &data[0], GL_DYNAMIC_COPY); 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if either of offset or length is negative."); 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, -1, 1, GL_MAP_READ_BIT); 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 1, -1, GL_MAP_READ_BIT); 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if offset + length is greater than the value of GL_BUFFER_SIZE."); 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 33, GL_MAP_READ_BIT); 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 32, 1, GL_MAP_READ_BIT); 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 16, 17, GL_MAP_READ_BIT); 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if access has any bits set other than those accepted."); 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_READ_BIT | 0x1000); 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_WRITE_BIT | 0x1000); 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer is already in a mapped state."); 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_WRITE_BIT); 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 16, 8, GL_MAP_READ_BIT); 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glUnmapBuffer (GL_ARRAY_BUFFER); 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if neither GL_MAP_READ_BIT or GL_MAP_WRITE_BIT is set."); 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_INVALIDATE_RANGE_BIT); 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 927fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if length is 0"); 928fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 0, GL_MAP_READ_BIT); 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if GL_MAP_READ_BIT is set and any of GL_MAP_INVALIDATE_RANGE_BIT, GL_MAP_INVALIDATE_BUFFER_BIT, or GL_MAP_UNSYNCHRONIZED_BIT is set."); 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_READ_BIT | GL_MAP_INVALIDATE_RANGE_BIT); 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_READ_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_READ_BIT | GL_MAP_UNSYNCHRONIZED_BIT); 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if GL_MAP_FLUSH_EXPLICIT_BIT is set and GL_MAP_WRITE_BIT is not set."); 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glMapBufferRange (GL_ARRAY_BUFFER, 0, 16, GL_MAP_READ_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers (1, &buf); 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid read_buffer (NegativeTestContext& ctx) 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 953f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos deUint32 fbo = 0x1234; 954f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos deUint32 texture = 0x1234; 955f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos int maxColorAttachments = 0x1234; 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments); 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 967f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if mode is not GL_BACK, GL_NONE, or GL_COLOR_ATTACHMENTi."); 968f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_NONE); 969f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_NO_ERROR); 970f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (1); 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadBuffer (GL_FRAMEBUFFER); 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 974f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_COLOR_ATTACHMENT0 - 1); 975f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_ENUM); 976f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_FRONT); 977f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_ENUM); 978f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos 979f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos // \ note Spec isn't actually clear here, but it is safe to assume that 980f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos // GL_DEPTH_ATTACHMENT can't be interpreted as GL_COLOR_ATTACHMENTm 981f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos // where m = (GL_DEPTH_ATTACHMENT - GL_COLOR_ATTACHMENT0). 982f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_DEPTH_ATTACHMENT); 983f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_ENUM); 984f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_STENCIL_ATTACHMENT); 985f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_ENUM); 986f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_STENCIL_ATTACHMENT+1); 987f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_ENUM); 988f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (0xffffffffu); 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 991f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos 992f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.beginSection("GL_INVALID_OPERATION error is generated if src is GL_BACK or if src is GL_COLOR_ATTACHMENTm where m is greater than or equal to the value of GL_MAX_COLOR_ATTACHMENTS."); 993f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_BACK); 994f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_OPERATION); 995f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_COLOR_ATTACHMENT0 + maxColorAttachments); 996f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_OPERATION); 997f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos 998f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos if (GL_COLOR_ATTACHMENT0+maxColorAttachments < GL_DEPTH_ATTACHMENT-1) 999f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos { 1000f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.glReadBuffer (GL_DEPTH_ATTACHMENT - 1); 1001f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1002f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos } 1003f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos 1004f9825aec0f63f29d4029b71206b9cdd66d1dd737Pyry Haulos ctx.endSection(); 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the current framebuffer is the default framebuffer and mode is not GL_NONE or GL_BACK."); 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadBuffer (GL_COLOR_ATTACHMENT0); 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the current framebuffer is a named framebuffer and mode is not GL_NONE or GL_COLOR_ATTACHMENTi."); 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glReadBuffer (GL_BACK); 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures(1, &texture); 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers(1, &fbo); 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid unmap_buffer (NegativeTestContext& ctx) 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1024fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 buf = 0x1234; 1025fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos std::vector<GLfloat> data (32); 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenBuffers (1, &buf); 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindBuffer (GL_ARRAY_BUFFER, buf); 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBufferData (GL_ARRAY_BUFFER, 32, &data[0], GL_DYNAMIC_COPY); 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer data store is already in an unmapped state."); 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glUnmapBuffer (GL_ARRAY_BUFFER); 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteBuffers (1, &buf); 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Framebuffer Objects 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid bind_framebuffer (NegativeTestContext& ctx) 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1043fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_FRAMEBUFFER."); 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(-1, 0); 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(GL_RENDERBUFFER, 0); 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid bind_renderbuffer (NegativeTestContext& ctx) 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER."); 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer(-1, 0); 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer(GL_FRAMEBUFFER, 0); 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid check_framebuffer_status (NegativeTestContext& ctx) 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1063fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_FRAMEBUFFER.."); 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(-1); 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_RENDERBUFFER); 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid gen_framebuffers (NegativeTestContext& ctx) 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers(-1, 0); 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid gen_renderbuffers (NegativeTestContext& ctx) 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers(-1, 0); 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid delete_framebuffers (NegativeTestContext& ctx) 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers(-1, 0); 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid delete_renderbuffers (NegativeTestContext& ctx) 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{; 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers(-1, 0); 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid framebuffer_renderbuffer (NegativeTestContext& ctx) 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint fbo = 0x1234; 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint rbo = 0x1234; 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers(1, &fbo); 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers(1, &rbo); 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted tokens."); 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(-1, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0); 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1116fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if attachment is not one of the accepted tokens."); 1117fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferRenderbuffer(GL_FRAMEBUFFER, -1, GL_RENDERBUFFER, 0); 1118fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_ENUM); 1119fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1120fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if renderbuffertarget is not GL_RENDERBUFFER."); 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer(GL_RENDERBUFFER, rbo); 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, rbo); 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer(GL_RENDERBUFFER, 0); 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if renderbuffer is neither 0 nor the name of an existing renderbuffer object."); 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, -1); 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if zero is bound to target."); 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0); 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers(1, &rbo); 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers(1, &fbo); 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1143fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulosvoid framebuffer_texture (NegativeTestContext& ctx) 1144fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos{ 1145fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 1146fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos { 1147fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint fbo = 0x1234; 1148fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint texture[] = {0x1234, 0x1234}; 1149fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1150fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenFramebuffers(1, &fbo); 1151fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 1152fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenTextures(2, texture); 1153fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture(GL_TEXTURE_2D, texture[0]); 1154fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture(GL_TEXTURE_BUFFER, texture[1]); 1155fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_NO_ERROR); 1156fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1157fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted tokens."); 1158fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture(-1, GL_COLOR_ATTACHMENT0, texture[0], 0); 1159fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_ENUM); 1160fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1161fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1162fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if attachment is not one of the accepted tokens."); 1163fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture(GL_FRAMEBUFFER, -1, texture[0], 0); 1164fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_ENUM); 1165fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1166fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1167fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if texture is neither 0 nor the name of an existing texture object."); 1168fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, 0); 1169fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 1170fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1171fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1172fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if zero is bound to target."); 1173fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 1174fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 0, 0); 1175fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 1176fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 1177fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1178fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1179fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated by if texture is a buffer texture."); 1180fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture[1], 0); 1181fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 1182fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1183fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1184fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteFramebuffers(1, &fbo); 1185fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteBuffers(2, texture); 1186fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos } 1187fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos} 1188fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid framebuffer_texture2d (NegativeTestContext& ctx) 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1191fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint fbo = 0x1234; 1192fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint tex2D = 0x1234; 1193fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint texCube = 0x1234; 1194fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint tex2DMS = 0x1234; 1195fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLint maxTexSize = 0x1234; 1196fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLint maxTexCubeSize = 0x1234; 1197fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxSize = 0x1234; 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers(1, &fbo); 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures(1, &tex2D); 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture(GL_TEXTURE_2D, tex2D); 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures(1, &texCube); 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texCube); 1205fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenTextures(1, &tex2DMS); 1206fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex2DMS); 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxTexCubeSize); 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_NO_ERROR); 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted tokens."); 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(-1, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if textarget is not an accepted texture target."); 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, tex2D, 0); 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_ENUM); 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1221fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if attachment is not an accepted token."); 1222fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, -1, GL_TEXTURE_2D, tex2D, 0); 1223fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_ENUM); 1224fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1225fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0 or larger than log_2 of maximum texture size."); 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, -1); 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry maxSize = deLog2Floor32(maxTexSize) + 1; 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, maxSize); 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry maxSize = deLog2Floor32(maxTexSize) + 1; 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, texCube, maxSize); 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_VALUE); 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1237fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if level is larger than maximum texture size."); 1238fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, maxTexSize + 1); 1239fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 1240fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, -1); 1241fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 1242fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, texCube, maxTexCubeSize + 1); 1243fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 1244fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, texCube, -1); 1245fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 1246b15ba11e484691c847c7de59af5b86a57b7e4e5dMika Isojärvi ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, tex2DMS, 1); 1247fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_VALUE); 1248fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1249fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if texture is neither 0 nor the name of an existing texture object."); 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, -1, 0); 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if textarget and texture are not compatible."); 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, tex2D, 0); 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 1258fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, tex2D, 0); 1259fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texCube, 0); 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 1262fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2DMS, 0); 1263fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 1264fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures(1, &tex2D); 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures(1, &texCube); 1266fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures(1, &tex2DMS); 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if zero is bound to target."); 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError(GL_INVALID_OPERATION); 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1275fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 1276fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos { 1277fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLuint texBuf = 0x1234; 1278fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION error is generated if texture is the name of a buffer texture."); 1279fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenTextures(1, &texBuf); 1280fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture(GL_TEXTURE_BUFFER, texBuf); 1281fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 1282fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_NO_ERROR); 1283fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texBuf, 0); 1284fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError(GL_INVALID_OPERATION); 1285fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1286fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos } 1287fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers(1, &fbo); 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid renderbuffer_storage (NegativeTestContext& ctx) 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1293fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 rbo = 0x1234; 1294fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLint maxSize = 0x1234; 1295fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers (1, &rbo); 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo); 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER."); 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (-1, GL_RGBA4, 1, 1); 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_FRAMEBUFFER, GL_RGBA4, 1, 1); 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not a color-renderable, depth-renderable, or stencil-renderable format."); 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, -1, 1, 1); 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 1309271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry 1310fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (!ctx.isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error 1311271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry { 1312271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB16F, 1, 1); 1313271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry ctx.expectError (GL_INVALID_ENUM); 1314271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry } 1315271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry 1316fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (!ctx.isExtensionSupported("GL_EXT_render_snorm")) // GL_EXT_render_snorm disables error 1317531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi { 1318531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8_SNORM, 1, 1); 1319531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi ctx.expectError (GL_INVALID_ENUM); 1320531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi } 1321531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than zero."); 13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, -1, 1); 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, 1, -1); 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, -1, -1); 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_RENDERBUFFER_SIZE."); 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_MAX_RENDERBUFFER_SIZE, &maxSize); 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, 1, maxSize+1); 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, maxSize+1, 1); 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, maxSize+1, maxSize+1); 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers(1, &rbo); 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid blit_framebuffer (NegativeTestContext& ctx) 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 fbo[2]; 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo[2]; 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 texture[2]; 1351653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos deUint32 blankFrameBuffer; 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1353fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenFramebuffers (1, &blankFrameBuffer); 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (2, fbo); 13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (2, texture); 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers (2, rbo); 13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture[0]); 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo[0]); 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo[0]); 13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 32, 32); 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[0], 0); 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo[0]); 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER); 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture[1]); 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo[1]); 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]); 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 32, 32); 13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[1], 0); 13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo[1]); 13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER); 13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1379fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if mask contains any bits other than GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, or GL_STENCIL_BUFFER_BIT."); 1380fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, 1, GL_NEAREST); 1381fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1382fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1383fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1384fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if filter is not GL_LINEAR or GL_NEAREST."); 1385fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, 0); 1386fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1387fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1388fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if mask contains any of the GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT and filter is not GL_NEAREST."); 13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_LINEAR); 13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_LINEAR); 13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_LINEAR); 13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if mask contains GL_COLOR_BUFFER_BIT and read buffer format is incompatible with draw buffer format."); 13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture[0]); 14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32UI, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL); 14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[0], 0); 14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// Read buffer: GL_RGBA32UI, draw buffer: GL_RGBA" << TestLog::EndMessage; 14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST); 14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32I, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, NULL); 14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[0], 0); 14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// Read buffer: GL_RGBA32I, draw buffer: GL_RGBA" << TestLog::EndMessage; 14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST); 14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[0], 0); 14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture[1]); 14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32I, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, NULL); 14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[1], 0); 14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// Read buffer: GL_RGBA8, draw buffer: GL_RGBA32I" << TestLog::EndMessage; 14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST); 14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if filter is GL_LINEAR and the read buffer contains integer data."); 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture[0]); 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32UI, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL); 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[0], 0); 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[1], 0); 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getLog() << TestLog::Message << "// Read buffer: GL_RGBA32I, draw buffer: GL_RGBA8" << TestLog::EndMessage; 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_LINEAR); 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if mask contains GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT and the source and destination depth and stencil formats do not match."); 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo[0]); 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH32F_STENCIL8, 32, 32); 14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo[0]); 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_DEPTH_BUFFER_BIT, GL_NEAREST); 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_STENCIL_BUFFER_BIT, GL_NEAREST); 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1444fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the read or draw framebuffer is not framebuffer complete."); 1445fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER); 1446fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER); 1447fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, 0, GL_NEAREST); 1448fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1449fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.getLog() << TestLog::Message << "// incomplete read framebuffer" << TestLog::EndMessage; 1450fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, blankFrameBuffer); 1451fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]); 1452fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos TCU_CHECK(ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE); 1453fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos TCU_CHECK(ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE); 1454fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, 0, GL_NEAREST); 1455fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_FRAMEBUFFER_OPERATION); 1456fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.getLog() << TestLog::Message << "// incomplete draw framebuffer" << TestLog::EndMessage; 1457fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo[1]); 1458fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, blankFrameBuffer); 1459fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos TCU_CHECK(ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE); 1460fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos TCU_CHECK(ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE); 1461fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, 0, GL_NEAREST); 1462fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_FRAMEBUFFER_OPERATION); 1463fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.getLog() << TestLog::Message << "// incomplete read and draw framebuffer" << TestLog::EndMessage; 1464fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, blankFrameBuffer); 1465fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, blankFrameBuffer); 1466fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos TCU_CHECK(ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE); 1467fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos TCU_CHECK(ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE); 1468fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, 0, GL_NEAREST); 1469fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_FRAMEBUFFER_OPERATION); 1470fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos // restore 1471fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo[0]); 1472fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER); 1473fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]); 1474fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER); 1475fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1476fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1477fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if the source and destination buffers are identical."); 1478fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[0]); 1479fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1480378f80d61a8ead4044df1f5f13d20ef326c3bc3bMika Isojärvi ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_DEPTH_BUFFER_BIT, GL_NEAREST); 1481fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1482fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos // restore 1483fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]); 1484fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1485fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 1487fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindRenderbuffer (GL_RENDERBUFFER, 0); 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers (2, fbo); 1489fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteFramebuffers (1, &blankFrameBuffer); 14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (2, texture); 14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers (2, rbo); 14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid blit_framebuffer_multisample (NegativeTestContext& ctx) 14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 fbo[2]; 14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo[2]; 14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (2, fbo); 15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers (2, rbo); 15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo[0]); 15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo[0]); 15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, 32, 32); 15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferRenderbuffer (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[0]); 15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus (GL_READ_FRAMEBUFFER); 15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo[1]); 15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]); 15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1513fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (!ctx.isExtensionSupported("GL_NV_framebuffer_multisample")) 1514c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi { 1515c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.beginSection("GL_INVALID_OPERATION is generated if the value of GL_SAMPLE_BUFFERS for the draw buffer is greater than zero."); 1516c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, 32, 32); 1517c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[1]); 1518c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST); 1519c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.expectError (GL_INVALID_OPERATION); 1520c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.endSection(); 1521c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi 1522c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.beginSection("GL_INVALID_OPERATION is generated if GL_SAMPLE_BUFFERS for the read buffer is greater than zero and the formats of draw and read buffers are not identical."); 1523c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, 32, 32); 1524c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[1]); 1525c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glBlitFramebuffer (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST); 1526c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.expectError (GL_INVALID_OPERATION); 1527c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.endSection(); 1528c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi 1529c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.beginSection("GL_INVALID_OPERATION is generated if GL_SAMPLE_BUFFERS for the read buffer is greater than zero and the source and destination rectangles are not defined with the same (X0, Y0) and (X1, Y1) bounds."); 1530c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8, 32, 32); 1531c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[1]); 1532c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.glBlitFramebuffer (0, 0, 16, 16, 2, 2, 18, 18, GL_COLOR_BUFFER_BIT, GL_NEAREST); 1533c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.expectError (GL_INVALID_OPERATION); 1534c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi ctx.endSection(); 1535c16dedced05e6299ad5fc0d2f3ac42e23952465cMika Isojärvi } 15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers (2, rbo); 15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers (2, fbo); 15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid framebuffer_texture_layer (NegativeTestContext& ctx) 15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1544fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 fbo = 0x1234; 1545fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 tex3D = 0x1234; 1546fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 tex2DArray = 0x1234; 1547fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 tex2D = 0x1234; 1548fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 tex2DMSArray = 0x1234; 1549fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 texBuffer = 0x1234; 1550fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int max3DTexSize = 0x1234; 1551fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxTexSize = 0x1234; 1552fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxArrayTexLayers = 0x1234; 155301af60e03f051fb44046f80fdf45f1ebe1ffd5a4Pyry Haulos int log2Max3DTexSize = 0x1234; 155401af60e03f051fb44046f80fdf45f1ebe1ffd5a4Pyry Haulos int log2MaxTexSize = 0x1234; 1555fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1556fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_3D_TEXTURE_SIZE, &max3DTexSize); 1557fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_TEXTURE_SIZE, &maxTexSize); 1558f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glGetIntegerv (GL_MAX_ARRAY_TEXTURE_LAYERS, &maxArrayTexLayers); 15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &tex3D); 15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &tex2DArray); 15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &tex2D); 15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 15653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_3D, tex3D); 15673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 15683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, tex2DArray); 15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 15703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, tex2D); 15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted tokens."); 15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (-1, GL_COLOR_ATTACHMENT0, tex3D, 0, 1); 15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, tex3D, 0, 1); 15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if attachment is not one of the accepted tokens."); 15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, -1, tex3D, 0, 1); 15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_BACK, tex3D, 0, 1); 15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1589fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if texture is non-zero and not the name of a 3D texture or 2D array texture, 2D multisample array texture or cube map array texture."); 15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, 0, 0); 15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 15923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex2D, 0, 0); 15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if texture is not zero and layer is negative."); 15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex3D, 0, -1); 15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if texture is not zero and layer is greater than GL_MAX_3D_TEXTURE_SIZE-1 for a 3D texture."); 16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex3D, 0, max3DTexSize); 16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if texture is not zero and layer is greater than GL_MAX_ARRAY_TEXTURE_LAYERS-1 for a 2D array texture."); 16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex2DArray, 0, maxArrayTexLayers); 16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if zero is bound to target."); 16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 16133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex3D, 0, 1); 16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 1615fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 1616fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1617fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1618fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if texture is a 3D texture and level is less than 0 or greater than log2 of the value of GL_MAX_3D_TEXTURE_SIZE."); 1619fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos log2Max3DTexSize = deLog2Floor32(max3DTexSize); 1620fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex3D, -1, max3DTexSize - 1); 1621fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1622fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex3D, log2Max3DTexSize + 1, max3DTexSize - 1); 1623fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1626f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.beginSection("GL_INVALID_VALUE is generated if texture is a 2D array texture and level is less than 0 or greater than log2 of the value of GL_MAX_TEXTURE_SIZE."); 1627fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos log2MaxTexSize = deLog2Floor32(maxTexSize); 1628fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex2DArray, -1, maxArrayTexLayers - 1); 1629fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1630fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex2DArray, log2MaxTexSize + 1, maxArrayTexLayers - 1); 1631fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1632fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1633fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1634fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 1635fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos { 1636f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita deUint32 texCubeArray = 0x1234; 1637f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita int maxCubeTexSize = 0x1234; 1638fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGetIntegerv (GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxCubeTexSize); 1639fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenTextures (1, &tex2DMSArray); 1640f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glGenTextures (1, &texCubeArray); 1641fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenTextures (1, &texBuffer); 1642fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_2D_MULTISAMPLE_ARRAY, tex2DMSArray); 1643f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, texCubeArray); 1644fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_BUFFER, texBuffer); 1645fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1646fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1647f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.beginSection("GL_INVALID_VALUE is generated if texture is a 2D multisample array texture and level is not 0."); 1648f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex2DMSArray, -1, 0); 1649fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1650f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex2DMSArray, 1, 0); 1651fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1652fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1653fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1654f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.beginSection("GL_INVALID_VALUE is generated if texture is a cube map array texture and layer is larger than MAX_ARRAY_TEXTURE_LAYERS-1. (See Khronos bug 15968)"); 1655f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texCubeArray, 0, maxArrayTexLayers); 1656fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1657fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1658fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1659fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if texture is the name of a buffer texture."); 1660fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glFramebufferTextureLayer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texBuffer, 0, 0); 1661fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1662fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1663fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1664fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures (1, &tex2DMSArray); 1665f28187809176f5eeb1ee25ccfa70d3702d74156aKalle Raita ctx.glDeleteTextures (1, &texCubeArray); 1666fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures (1, &texBuffer); 1667fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos } 1668fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (1, &tex3D); 16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (1, &tex2DArray); 16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (1, &tex2D); 16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers (1, &fbo); 16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid invalidate_framebuffer (NegativeTestContext& ctx) 16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1677fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 attachments[3]; 1678653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos deUint32 fbo = 0x1234; 1679653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos deUint32 texture = 0x1234; 1680fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxColorAttachments = 0x1234; 1681fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments); 1683fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[0] = GL_COLOR_ATTACHMENT0; 1684fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[1] = GL_COLOR_ATTACHMENT0 + maxColorAttachments; 1685fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[2] = GL_DEPTH_STENCIL_ATTACHMENT; 16863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus (GL_FRAMEBUFFER); 16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER or GL_DRAW_FRAMEBUFFER."); 16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glInvalidateFramebuffer (-1, 1, &attachments[0]); 16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glInvalidateFramebuffer (GL_BACK, 1, &attachments[0]); 17003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 17013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if attachments contains GL_COLOR_ATTACHMENTm and m is greater than or equal to the value of GL_MAX_COLOR_ATTACHMENTS."); 17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glInvalidateFramebuffer (GL_FRAMEBUFFER, 1, &attachments[1]); 17053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 17063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 17073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1708fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if numAttachments is negative."); 1709fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateFramebuffer (GL_FRAMEBUFFER, -1, &attachments[0]); 1710fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1711fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1712fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1713fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if the default framebuffer is bound to target and any elements of attachments are not one of the accepted attachments."); 1714fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 1715fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateFramebuffer (GL_FRAMEBUFFER, 1, &attachments[2]); 1716fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1717fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1718fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1719fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 17203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (1, &texture); 17213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers (1, &fbo); 17223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 17233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid invalidate_sub_framebuffer (NegativeTestContext& ctx) 17253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1726fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 attachments[3]; 1727fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 fbo = 0x1234; 1728fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 texture = 0x1234; 1729fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxColorAttachments = 0x1234; 1730fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 17313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments); 1732fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[0] = GL_COLOR_ATTACHMENT0; 1733fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[1] = GL_COLOR_ATTACHMENT0 + maxColorAttachments; 1734fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos attachments[2] = GL_DEPTH_STENCIL_ATTACHMENT; 17353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenFramebuffers (1, &fbo); 17373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenTextures (1, &texture); 17383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 17393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindTexture (GL_TEXTURE_2D, texture); 17403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 17413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 17423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glCheckFramebufferStatus (GL_FRAMEBUFFER); 17433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_NO_ERROR); 17443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER or GL_DRAW_FRAMEBUFFER."); 17463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glInvalidateSubFramebuffer (-1, 1, &attachments[0], 0, 0, 16, 16); 17473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 17483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glInvalidateSubFramebuffer (GL_BACK, 1, &attachments[0], 0, 0, 16, 16); 17493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 17503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 17513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if attachments contains GL_COLOR_ATTACHMENTm and m is greater than or equal to the value of GL_MAX_COLOR_ATTACHMENTS."); 17533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, 1, &attachments[1], 0, 0, 16, 16); 17543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 17553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 17563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1757fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if numAttachments, width, or heigh is negative."); 1758fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, -1, &attachments[0], 0, 0, 16, 16); 1759fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1760fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, -1, &attachments[0], 0, 0, -1, 16); 1761fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1762fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, -1, &attachments[0], 0, 0, 16, -1); 1763fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1764fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, -1, &attachments[0], 0, 0, -1, -1); 1765fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1766fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, 1, &attachments[0], 0, 0, -1, 16); 1767fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1768fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, 1, &attachments[0], 0, 0, 16, -1); 1769fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1770fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, 1, &attachments[0], 0, 0, -1, -1); 1771fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1772fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1773fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1774fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if the default framebuffer is bound to target and any elements of attachments are not one of the accepted attachments."); 1775fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 1776fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glInvalidateSubFramebuffer (GL_FRAMEBUFFER, 1, &attachments[2], 0, 0, 16, 16); 1777fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1778fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1779fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 17803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteTextures (1, &texture); 17813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteFramebuffers (1, &fbo); 17823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 17833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid renderbuffer_storage_multisample (NegativeTestContext& ctx) 17853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1786fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 rbo = 0x1234; 1787fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxSamplesSupportedRGBA4 = -1; 1788fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos int maxSamplesSupportedRGBA8UI = -1; 1789fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos GLint maxSize = 0x1234; 17903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetInternalformativ (GL_RENDERBUFFER, GL_RGBA4, GL_SAMPLES, 1, &maxSamplesSupportedRGBA4); 179236ebe43247b45ca9933ccc511c73c373a4fafe59Jarkko Pöyry ctx.glGetInternalformativ (GL_RENDERBUFFER, GL_RGBA8UI, GL_SAMPLES, 1, &maxSamplesSupportedRGBA8UI); 179336ebe43247b45ca9933ccc511c73c373a4fafe59Jarkko Pöyry 17943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGenRenderbuffers (1, &rbo); 17953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo); 17963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER."); 17983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (-1, 2, GL_RGBA4, 1, 1); 17993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 18003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_FRAMEBUFFER, 2, GL_RGBA4, 1, 1); 18013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 18023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 18033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_OPERATION is generated if samples is greater than the maximum number of samples supported for internalformat."); 18053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, maxSamplesSupportedRGBA4+1, GL_RGBA4, 1, 1); 18063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 18073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 18083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not a color-renderable, depth-renderable, or stencil-renderable format."); 18103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, -1, 1, 1); 18113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_ENUM); 1812271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry 1813fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (!ctx.isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error 1814271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry { 1815271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGB16F, 1, 1); 1816271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry ctx.expectError (GL_INVALID_ENUM); 1817271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry } 1818271c2654cc44f23492888c7ef40c36c2fd810c77Jarkko Pöyry 1819fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (!ctx.isExtensionSupported("GL_EXT_render_snorm")) // GL_EXT_render_snorm disables error 1820531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi { 1821531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGBA8_SNORM, 1, 1); 1822531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi ctx.expectError (GL_INVALID_ENUM); 1823531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi } 1824531a9f5311e314348ebc7678984c852be8dd2a2bMika Isojärvi 18253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 18263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 182736ebe43247b45ca9933ccc511c73c373a4fafe59Jarkko Pöyry ctx.beginSection("GL_INVALID_OPERATION is generated if samples is greater than the maximum number of samples supported for internalformat. (Unsigned integer format)"); 182836ebe43247b45ca9933ccc511c73c373a4fafe59Jarkko Pöyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, maxSamplesSupportedRGBA8UI+1, GL_RGBA8UI, 1, 1); 18293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_OPERATION); 18303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 18313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than zero."); 18333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGBA4, -1, 1); 18343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 18353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGBA4, 1, -1); 18363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 18373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGBA4, -1, -1); 18383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 1839fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, -1, GL_RGBA4, 1, 1); 1840fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1841fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, -1, GL_RGBA4, -1, 1); 1842fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1843fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, -1, GL_RGBA4, 1, -1); 1844fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1845fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, -1, GL_RGBA4, -1, -1); 1846fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 18473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 18483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_RENDERBUFFER_SIZE."); 18503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glGetIntegerv (GL_MAX_RENDERBUFFER_SIZE, &maxSize); 18513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 4, GL_RGBA4, 1, maxSize+1); 18523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 18533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 4, GL_RGBA4, maxSize+1, 1); 18543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 18553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 4, GL_RGBA4, maxSize+1, maxSize+1); 18563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.expectError (GL_INVALID_VALUE); 18573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.endSection(); 18583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.glDeleteRenderbuffers(1, &rbo); 18603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 18613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1862fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulosvoid copy_image_sub_data (NegativeTestContext& ctx) 1863fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos{ 1864fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 1865fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos { 1866fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 texture[5]; 1867fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos deUint32 rbo = 0x1234; 1868fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1869fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenTextures (5, texture); 1870fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glGenRenderbuffers (1, &rbo); 1871fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo); 1872fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1873fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_2D, texture[0]); 1874fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 1875fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 1876fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 1877fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8, 32, 32); 1878fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_2D, texture[1]); 1879fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 1880fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 1881fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 1882fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1883fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1884fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_3D, texture[2]); 1885fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 1886fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 1887fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA8, 32, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 1888fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1889fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1890fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_3D, texture[3]); 1891fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA8, 32, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 1892fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1893fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1894fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glBindTexture (GL_TEXTURE_2D, texture[4]); 1895fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 1896fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 1897fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA32F, 32, 32, 0, GL_RGBA, GL_FLOAT, NULL); 1898fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_NO_ERROR); 1899fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1900fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if srcWidth, srcHeight, or srcDepth is negative."); 1901fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, -1, 1, 1); 1902fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1903fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 1, -1, 1); 1904fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1905fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 1, 1, -1); 1906fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1907fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, -1, -1, 1); 1908fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1909fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, -1, 1, -1); 1910fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1911fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 1, -1, -1); 1912fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1913fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, -1, -1, -1); 1914fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1915fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1916fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1917fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if srcLevel and dstLevel are not valid levels for the corresponding images."); 1918fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 1, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1919fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1920fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 1, 0, 0, 0, 0, 0, 1); 1921fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1922fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 1, 0, 0, 0, texture[1], GL_TEXTURE_2D, 1, 0, 0, 0, 0, 0, 1); 1923fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1924fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, -1, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1925fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1926fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, -1, 0, 0, 0, 0, 0, 1); 1927fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1928fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, -1, 0, 0, 0, texture[1], GL_TEXTURE_2D, -1, 0, 0, 0, 0, 0, 1); 1929fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1930fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (rbo, GL_RENDERBUFFER, -1, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1931fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1932fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (rbo, GL_RENDERBUFFER, 1, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1933fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1934fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, rbo, GL_RENDERBUFFER, -1, 0, 0, 0, 0, 0, 1); 1935fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1936fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, rbo, GL_RENDERBUFFER, 1, 0, 0, 0, 0, 0, 1); 1937fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1938fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1939fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1940fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_ENUM is generated if either target does not match the type of the object."); 1941fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos // \note: This could be either: 1942fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos // 1. GL_INVALID_ENUM is generated if either target does not match the type of the object. 1943fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos // 2. GL_INVALID_VALUE is generated if either name does not correspond to a valid renderbuffer or texture object according to the corresponding target parameter. 1944fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 1); 1945fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1946fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[2], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1947fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1948fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_3D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1949fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1950fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[2], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1951fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_ENUM); 1952fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1953fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1954fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION is generated if either object is a texture and the texture is not complete."); 1955fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[3], GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 1); 1956fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1957fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[3], GL_TEXTURE_3D, 0, 0, 0, 0, texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1958fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1959fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[3], GL_TEXTURE_3D, 0, 0, 0, 0, texture[3], GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 1); 1960fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1961fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1962fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1963fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_VALUE is generated if the dimensions of either subregion exceeds the boundaries of the corresponding image object."); 1964fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 33, 0, 1); 1965fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1966fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[1], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 33, 1); 1967fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_VALUE); 1968fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1969fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1970fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.beginSection("GL_INVALID_OPERATION error is generated if the source and destination internal formats are not compatible."); 1971fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, texture[4], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1972fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1973fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glCopyImageSubData (texture[4], GL_TEXTURE_2D, 0, 0, 0, 0, texture[0], GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 1); 1974fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.expectError (GL_INVALID_OPERATION); 1975fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.endSection(); 1976fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 1977fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteTextures (5, texture); 1978fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos ctx.glDeleteRenderbuffers (1, &rbo); 1979fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos } 1980fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos} 1981fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos 19823c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::vector<FunctionContainer> getNegativeBufferApiTestFunctions () 19833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1984fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos const FunctionContainer funcs[] = 19853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1986fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {bind_buffer, "bind_buffer", "Invalid glBindBuffer() usage" }, 1987fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {delete_buffers, "delete_buffers", "Invalid glDeleteBuffers() usage" }, 1988fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {gen_buffers, "gen_buffers", "Invalid glGenBuffers() usage" }, 1989fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {buffer_data, "buffer_data", "Invalid glBufferData() usage" }, 1990fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {buffer_sub_data, "buffer_sub_data", "Invalid glBufferSubData() usage" }, 1991fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {buffer_sub_data_size_offset, "buffer_sub_data_size_offset", "Invalid glBufferSubData() usage" }, 1992fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {clear, "clear", "Invalid glClear() usage" }, 1993fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {read_pixels, "read_pixels", "Invalid glReadPixels() usage" }, 1994fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {readn_pixels, "readn_pixels", "Invalid glReadPixels() usage" }, 1995fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {read_pixels_format_mismatch, "read_pixels_format_mismatch", "Invalid glReadPixels() usage" }, 1996fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {read_pixels_fbo_format_mismatch, "read_pixels_fbo_format_mismatch", "Invalid glReadPixels() usage" }, 1997fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {bind_buffer_range, "bind_buffer_range", "Invalid glBindBufferRange() usage" }, 1998fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {bind_buffer_base, "bind_buffer_base", "Invalid glBindBufferBase() usage" }, 1999fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {clear_bufferiv, "clear_bufferiv", "Invalid glClearBufferiv() usage" }, 2000fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {clear_bufferuiv, "clear_bufferuiv", "Invalid glClearBufferuiv() usage" }, 2001fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {clear_bufferfv, "clear_bufferfv", "Invalid glClearBufferfv() usage" }, 2002fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {clear_bufferfi, "clear_bufferfi", "Invalid glClearBufferfi() usage" }, 2003fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {copy_buffer_sub_data, "copy_buffer_sub_data", "Invalid glCopyBufferSubData() usage" }, 2004fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {draw_buffers, "draw_buffers", "Invalid glDrawBuffers() usage" }, 2005fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {flush_mapped_buffer_range, "flush_mapped_buffer_range", "Invalid glFlushMappedBufferRange() usage" }, 2006fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {map_buffer_range, "map_buffer_range", "Invalid glMapBufferRange() usage" }, 2007fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {read_buffer, "read_buffer", "Invalid glReadBuffer() usage" }, 2008fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {unmap_buffer, "unmap_buffer", "Invalid glUnmapBuffer() usage" }, 2009fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {bind_framebuffer, "bind_framebuffer", "Invalid glBindFramebuffer() usage" }, 2010fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {bind_renderbuffer, "bind_renderbuffer", "Invalid glBindRenderbuffer() usage" }, 2011fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {check_framebuffer_status, "check_framebuffer_status", "Invalid glCheckFramebufferStatus() usage" }, 2012fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {gen_framebuffers, "gen_framebuffers", "Invalid glGenFramebuffers() usage" }, 2013fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {gen_renderbuffers, "gen_renderbuffers", "Invalid glGenRenderbuffers() usage" }, 2014fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {delete_framebuffers, "delete_framebuffers", "Invalid glDeleteFramebuffers() usage" }, 2015fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {delete_renderbuffers, "delete_renderbuffers", "Invalid glDeleteRenderbuffers() usage" }, 2016fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {framebuffer_renderbuffer, "framebuffer_renderbuffer", "Invalid glFramebufferRenderbuffer() usage" }, 2017fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {framebuffer_texture, "framebuffer_texture", "Invalid glFramebufferTexture() usage" }, 2018fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {framebuffer_texture2d, "framebuffer_texture2d", "Invalid glFramebufferTexture2D() usage" }, 2019fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {renderbuffer_storage, "renderbuffer_storage", "Invalid glRenderbufferStorage() usage" }, 2020fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {blit_framebuffer, "blit_framebuffer", "Invalid glBlitFramebuffer() usage" }, 2021fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {blit_framebuffer_multisample, "blit_framebuffer_multisample", "Invalid glBlitFramebuffer() usage" }, 2022fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {framebuffer_texture_layer, "framebuffer_texture_layer", "Invalid glFramebufferTextureLayer() usage" }, 2023fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {invalidate_framebuffer, "invalidate_framebuffer", "Invalid glInvalidateFramebuffer() usage" }, 2024fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {invalidate_sub_framebuffer, "invalidate_sub_framebuffer", "Invalid glInvalidateSubFramebuffer() usage" }, 2025fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {renderbuffer_storage_multisample, "renderbuffer_storage_multisample", "Invalid glRenderbufferStorageMultisample() usage" }, 2026fb059fdb43c8b6073ada028a68124263c59a000aPyry Haulos {copy_image_sub_data, "copy_image_sub_data", "Invalid glCopyImageSubData() usage" }, 20273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 20283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs)); 20303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 20313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // NegativeTestShared 20333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 20343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles31 20353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 2036