13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 2.0 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 Framebuffer Object API Tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Notes: 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * All gl calls are passed thru sgl2::Context class. Reasons: 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * + Name, object allocation is tracked and live resources are freed 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * when Context is destroyed. 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * + Makes it possible to easily log all relevant calls into test log. 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \todo [pyry] This is not implemented yet 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es2fFboApiTest.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "sglrGLContext.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluDefs.hpp" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluContextInfo.hpp" 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluStrUtil.hpp" 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuRenderTarget.hpp" 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deString.h" 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <iterator> 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <algorithm> 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles2 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string; 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector; 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog; 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing glw::GLenum; 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing glw::GLint; 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void logComment (tcu::TestContext& testCtx, const char* comment) 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// " << comment << TestLog::EndMessage; 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void checkError (tcu::TestContext& testCtx, sglr::Context& ctx, GLenum expect) 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum result = ctx.getError(); 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// " << (result == expect ? "Pass" : "Fail") << ", expected " << glu::getErrorStr(expect) << TestLog::EndMessage; 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (result != expect) 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error code mismatch"); 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 72cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvistatic void checkEitherError (tcu::TestContext& testCtx, sglr::Context& ctx, GLenum expectA, GLenum expectB) 73cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi{ 74cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi GLenum result = ctx.getError(); 75cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi bool isOk = (result == expectA || result == expectB); 76cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi 77cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi testCtx.getLog() << TestLog::Message << "// " << (isOk ? "Pass" : "Fail") << ", expected " << glu::getErrorStr(expectA) << " or " << glu::getErrorStr(expectB) << TestLog::EndMessage; 78cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi 79cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi if (!isOk) 80cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error code mismatch"); 81cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi} 82cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* getAttachmentName (GLenum attachment) 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (attachment) 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_COLOR_ATTACHMENT0: return "GL_COLOR_ATTACHMENT0"; 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_DEPTH_ATTACHMENT: return "GL_DEPTH_ATTACHMENT"; 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_ATTACHMENT: return "GL_STENCIL_ATTACHMENT"; 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: throw tcu::InternalError("Unknown attachment", "", __FILE__, __LINE__); 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* getAttachmentParameterName (GLenum pname) 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (pname) 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"; 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"; 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"; 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"; 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: throw tcu::InternalError("Unknown parameter", "", __FILE__, __LINE__); 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic string getAttachmentParameterValueName (GLint value) 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (value) 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case 0: return "GL_NONE(0)"; 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE: return "GL_TEXTURE"; 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_RENDERBUFFER: return "GL_RENDERBUFFER"; 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_CUBE_MAP_POSITIVE_X: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X"; 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X"; 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y"; 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"; 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z"; 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"; 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry char tmp[64]; 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deSprintf(tmp, sizeof(tmp), "0x%x", value); 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return string(tmp); 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void checkFboAttachmentParam (tcu::TestContext& testCtx, sglr::Context& ctx, GLenum attachment, GLenum pname, GLint expectedValue) 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestLog& log = testCtx.getLog(); 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "// Querying " << getAttachmentName(attachment) << " " << getAttachmentParameterName(pname) << TestLog::EndMessage; 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint value = 0xcdcdcdcd; 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, attachment, pname, &value); 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum err = ctx.getError(); 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (value == expectedValue && err == GL_NO_ERROR) 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "// Pass" << TestLog::EndMessage; 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "// Fail, expected " << getAttachmentParameterValueName(expectedValue) << " without error" << TestLog::EndMessage; 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid result for attachment param query"); 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void notSupportedTest (tcu::TestContext& testCtx, sglr::Context& context) 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_UNREF(testCtx); 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_UNREF(context); 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::NotSupportedError("Not supported", "", __FILE__, __LINE__); 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void textureLevelsTest (tcu::TestContext& testCtx, sglr::Context& context) 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex = 1; 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 fbo = 1; 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_2D, tex); 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.texImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256); 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.texImage2D(GL_TEXTURE_2D, 1, GL_RGB, 128, 128); 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, fbo); 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static int levels[] = { 2, 1, 0, -1, 0x7fffffff, 0, 1 }; 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(levels); ndx++) 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, levels[ndx]); 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, levels[ndx] == 0 ? GL_NO_ERROR : GL_INVALID_VALUE); 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void textureLevelsWithRenderToMipmapTest (tcu::TestContext& testCtx, sglr::Context& context) 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex = 1; 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 fbo = 1; 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_2D, tex); 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.texImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256); 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.texImage2D(GL_TEXTURE_2D, 1, GL_RGB, 128, 128); 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, fbo); 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static int levels[] = { 2, 1, 0, -1, 0x7fffffff, 0, 1 }; 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(levels); ndx++) 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, levels[ndx]); 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, de::inBounds(levels[ndx], 0, 16) ? GL_NO_ERROR : GL_INVALID_VALUE); 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void validTex2DAttachmentsTest (tcu::TestContext& testCtx, sglr::Context& context) 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const GLenum attachmentPoints[] = 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_COLOR_ATTACHMENT0, 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_DEPTH_ATTACHMENT, 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_STENCIL_ATTACHMENT 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Texture2D 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex2D = 1; 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_2D, tex2D); 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int pointNdx = 0; pointNdx < DE_LENGTH_OF_ARRAY(attachmentPoints); pointNdx++) 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, attachmentPoints[pointNdx], GL_TEXTURE_2D, tex2D, 0); 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_NO_ERROR); 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void validTexCubeAttachmentsTest (tcu::TestContext& testCtx, sglr::Context& context) 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const GLenum attachmentPoints[] = 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_COLOR_ATTACHMENT0, 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_DEPTH_ATTACHMENT, 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_STENCIL_ATTACHMENT 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const GLenum cubeTargets[] = 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_TEXTURE_CUBE_MAP_POSITIVE_X, 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // TextureCube 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 texCube = 2; 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_CUBE_MAP, texCube); 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int pointNdx = 0; pointNdx < DE_LENGTH_OF_ARRAY(attachmentPoints); pointNdx++) 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int targetNdx = 0; targetNdx < DE_LENGTH_OF_ARRAY(cubeTargets); targetNdx++) 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, attachmentPoints[pointNdx], cubeTargets[targetNdx], texCube, 0); 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_NO_ERROR); 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void validRboAttachmentsTest (tcu::TestContext& testCtx, sglr::Context& context) 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const GLenum attachmentPoints[] = 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_COLOR_ATTACHMENT0, 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_DEPTH_ATTACHMENT, 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_STENCIL_ATTACHMENT 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Renderbuffer 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo = 3; 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindRenderbuffer(GL_RENDERBUFFER, rbo); 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int pointNdx = 0; pointNdx < DE_LENGTH_OF_ARRAY(attachmentPoints); pointNdx++) 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferRenderbuffer(GL_FRAMEBUFFER, attachmentPoints[pointNdx], GL_RENDERBUFFER, rbo); 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_NO_ERROR); 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachToDefaultFramebufferTest (tcu::TestContext& testCtx, sglr::Context& context) 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching 2D texture to default framebuffer"); 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex2D = 1; 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_2D, tex2D); 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, 0); 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching renderbuffer to default framebuffer"); 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo = 1; 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindRenderbuffer(GL_RENDERBUFFER, rbo); 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo); 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void invalidTex2DAttachmentTest (tcu::TestContext& testCtx, sglr::Context& context) 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching 2D texture using GL_TEXTURE_CUBE_MAP_NEGATIVE_X texture target"); 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex2D = 1; 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_2D, tex2D); 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, tex2D, 0); 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching deleted 2D texture object"); 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.deleteTextures(1, &tex2D); 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, 0); 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void invalidTexCubeAttachmentTest (tcu::TestContext& testCtx, sglr::Context& context) 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching cube texture using GL_TEXTURE_2D texture target"); 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 texCube = 2; 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindTexture(GL_TEXTURE_CUBE_MAP, texCube); 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texCube, 0); 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching deleted cube texture object"); 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.deleteTextures(1, &texCube); 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0); 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void invalidRboAttachmentTest (tcu::TestContext& testCtx, sglr::Context& context) 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching renderbuffer using GL_FRAMEBUFFER renderbuffer target"); 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo = 3; 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindRenderbuffer(GL_RENDERBUFFER, rbo); 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER, rbo); 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_ENUM); 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching deleted renderbuffer object"); 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.deleteRenderbuffers(1, &rbo); 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachNamesTest (tcu::TestContext& testCtx, sglr::Context& context) 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.bindFramebuffer(GL_FRAMEBUFFER, 1); 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Just allocate some names, don't bind for storage 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 reservedTexName; 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.genTextures(1, &reservedTexName); 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching allocated texture name to 2D target"); 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, reservedTexName, 0); 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching allocated texture name to cube target"); 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, reservedTexName, 0); 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 reservedRboName; 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.genRenderbuffers(1, &reservedRboName); 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logComment(testCtx, "Attaching allocated renderbuffer name"); 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, reservedRboName); 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, context, GL_INVALID_OPERATION); 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachmentQueryDefaultFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check that proper error codes are returned 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint unused = 1; 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &unused); 363cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi checkEitherError(testCtx, ctx, GL_INVALID_ENUM, GL_INVALID_OPERATION); 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &unused); 365cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi checkEitherError(testCtx, ctx, GL_INVALID_ENUM, GL_INVALID_OPERATION); 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &unused); 367cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi checkEitherError(testCtx, ctx, GL_INVALID_ENUM, GL_INVALID_OPERATION); 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, &unused); 369cf7b2b5f1cb3c8b66e27db37f92d42b686251d39Mika Isojärvi checkEitherError(testCtx, ctx, GL_INVALID_ENUM, GL_INVALID_OPERATION); 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachmentQueryEmptyFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const GLenum attachmentPoints[] = 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_COLOR_ATTACHMENT0, 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_DEPTH_ATTACHMENT, 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_STENCIL_ATTACHMENT 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(attachmentPoints); ndx++) 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, attachmentPoints[ndx], GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_NONE); 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check that proper error codes are returned 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint unused = -1; 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &unused); 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, ctx, GL_INVALID_ENUM); 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &unused); 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, ctx, GL_INVALID_ENUM); 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, &unused); 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, ctx, GL_INVALID_ENUM); 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachmentQueryTex2DTest (tcu::TestContext& testCtx, sglr::Context& ctx) 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindTexture(GL_TEXTURE_2D, 1); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 1, 0); 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, 1); 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, 0); 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, 0); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachmentQueryTexCubeTest (tcu::TestContext& testCtx, sglr::Context& ctx) 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindTexture(GL_TEXTURE_CUBE_MAP, 2); 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 2, 0); 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, 2); 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, 0); 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y); 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void attachmentQueryRboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindRenderbuffer(GL_RENDERBUFFER, 3); 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 3); 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_RENDERBUFFER); 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, 3); 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint unused = 0; 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &unused); 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, ctx, GL_INVALID_ENUM); 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.getFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, &unused); 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkError(testCtx, ctx, GL_INVALID_ENUM); 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void deleteTex2DAttachedToBoundFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex2D = 1; 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindTexture(GL_TEXTURE_2D, tex2D); 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, 0); 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, tex2D); 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.deleteTextures(1, &tex2D); 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_NONE); 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void deleteTexCubeAttachedToBoundFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 texCube = 1; 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindTexture(GL_TEXTURE_CUBE_MAP, texCube); 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0); 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, texCube); 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.deleteTextures(1, &texCube); 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_NONE); 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void deleteRboAttachedToBoundFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo = 1; 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindRenderbuffer(GL_RENDERBUFFER, rbo); 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_RENDERBUFFER); 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, rbo); 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.deleteRenderbuffers(1, &rbo); 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_NONE); 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void deleteTex2DAttachedToNotBoundFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 tex2D = 1; 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindTexture(GL_TEXTURE_2D, tex2D); 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2D, 0); 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, tex2D); 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 0); 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.deleteTextures(1, &tex2D); 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, tex2D); 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void deleteTexCubeAttachedToNotBoundFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 texCube = 1; 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindTexture(GL_TEXTURE_CUBE_MAP, texCube); 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0); 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, texCube); 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 0); 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.deleteTextures(1, &texCube); 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_TEXTURE); 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, texCube); 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void deleteRboAttachedToNotBoundFboTest (tcu::TestContext& testCtx, sglr::Context& ctx) 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 rbo = 1; 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindRenderbuffer(GL_RENDERBUFFER, rbo); 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_RENDERBUFFER); 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, rbo); 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 0); 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.deleteRenderbuffers(1, &rbo); 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ctx.bindFramebuffer(GL_FRAMEBUFFER, 1); 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_RENDERBUFFER); 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkFboAttachmentParam(testCtx, ctx, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, rbo); 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass FboApiCase : public TestCase 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry typedef void (*TestFunc) (tcu::TestContext& testCtx, sglr::Context& context); 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FboApiCase (Context& context, const char* name, const char* description, TestFunc test); 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~FboApiCase (void); 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual IterateResult iterate (void); 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FboApiCase (const FboApiCase& other); 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FboApiCase& operator= (const FboApiCase& other); 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestFunc m_testFunc; 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5673c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFboApiCase::FboApiCase (Context& context, const char* name, const char* description, TestFunc test) 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (context, name, description) 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testFunc (test) 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5733c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFboApiCase::~FboApiCase (void) 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5773c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestCase::IterateResult FboApiCase::iterate (void) 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "Before test case"); 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Initialize result to PASS 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Execute test case 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry sglr::GLContext context(m_context.getRenderContext(), m_testCtx.getLog(), sglr::GLCONTEXT_LOG_CALLS, tcu::IVec4(0, 0, m_context.getRenderTarget().getWidth(), m_context.getRenderTarget().getHeight())); 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testFunc(m_testCtx, context); 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "After test case"); 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5973c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFboApiTestGroup::FboApiTestGroup (Context& context) 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(context, "api", "API Tests") 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6023c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFboApiTestGroup::~FboApiTestGroup (void) 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FboApiTestGroup::init (void) 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::set<std::string> extensions; 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::copy(m_context.getContextInfo().getExtensions().begin(), m_context.getContextInfo().getExtensions().end(), std::inserter(extensions, extensions.begin())); 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool defaultFboIsZero = m_context.getRenderContext().getDefaultFramebuffer() == 0; 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool hasRenderToMipmap = extensions.find("GL_OES_fbo_render_mipmap") != extensions.end(); 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Valid attachments 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "valid_tex2d_attachments", "Valid 2D texture attachments", validTex2DAttachmentsTest)); 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "valid_texcube_attachments", "Valid cubemap attachments", validTexCubeAttachmentsTest)); 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "valid_rbo_attachments", "Valid renderbuffer attachments", validRboAttachmentsTest)); 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Invalid attachments 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attach_to_default_fbo", "Invalid usage: attaching to default FBO", defaultFboIsZero ? attachToDefaultFramebufferTest : notSupportedTest)); 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "invalid_tex2d_attachments", "Invalid 2D texture attachments", invalidTex2DAttachmentTest)); 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "invalid_texcube_attachments", "Invalid cubemap attachments", invalidTexCubeAttachmentTest)); 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "invalid_rbo_attachments", "Invalid renderbuffer attachments", invalidRboAttachmentTest)); 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attach_names", "Attach allocated names without objects", attachNamesTest)); 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "texture_levels", "Valid and invalid texturel levels", hasRenderToMipmap ? textureLevelsWithRenderToMipmapTest : textureLevelsTest)); 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Attachment queries 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attachment_query_default_fbo", "Query attachments from default FBO", defaultFboIsZero ? attachmentQueryDefaultFboTest : notSupportedTest)); 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attachment_query_empty_fbo", "Query attachments from empty FBO", attachmentQueryEmptyFboTest)); 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attachment_query_tex2d", "Query 2d texture attachment properties", attachmentQueryTex2DTest)); 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attachment_query_texcube", "Query cubemap attachment properties", attachmentQueryTexCubeTest)); 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "attachment_query_rbo", "Query renderbuffer attachment properties", attachmentQueryRboTest)); 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Delete attachments 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "delete_tex_2d_attached_to_bound_fbo", "Delete 2d texture attached to currently bound FBO", deleteTex2DAttachedToBoundFboTest)); 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "delete_tex_cube_attached_to_bound_fbo", "Delete cubemap attached to currently bound FBO", deleteTexCubeAttachedToBoundFboTest)); 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "delete_rbo_attached_to_bound_fbo", "Delete renderbuffer attached to currently bound FBO", deleteRboAttachedToBoundFboTest)); 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "delete_tex_2d_attached_to_not_bound_fbo", "Delete 2d texture attached to FBO", deleteTex2DAttachedToNotBoundFboTest)); 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "delete_tex_cube_attached_to_not_bound_fbo", "Delete cubemap attached to FBO", deleteTexCubeAttachedToNotBoundFboTest)); 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new FboApiCase(m_context, "delete_rbo_attached_to_not_bound_fbo", "Delete renderbuffer attached to FBO", deleteRboAttachedToNotBoundFboTest)); 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles2 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 648