13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.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 State Query tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es3fIntegerStateQueryTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsStateQueryUtil.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es3fApiCase.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluContextInfo.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuRenderTarget.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deRandom.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glw; // GLint and other GL types 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing deqp::gls::StateQueryUtil::StateQueryMemoryWriteGuard; 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef GL_SLUMINANCE_NV 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_SLUMINANCE_NV 0x8C46 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef GL_SLUMINANCE_ALPHA_NV 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_SLUMINANCE_ALPHA_NV 0x8C44 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef GL_BGR_NV 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_BGR_NV 0x80E0 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles3 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace IntegerStateQueryVerifiers 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// StateVerifier 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StateVerifier : protected glu::CallLogWrapper 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier (const glw::Functions& gl, tcu::TestLog& log, const char* testNamePostfix); 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~StateVerifier (); // make GCC happy 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* getTestNamePostfix (void) const; 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference) = DE_NULL; 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3) = DE_NULL; 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3) = DE_NULL; 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) = DE_NULL; 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference) = DE_NULL; 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) = DE_NULL; 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1) = DE_NULL; 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength) = DE_NULL; 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits) = DE_NULL; 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* const m_testNamePostfix; 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 793c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateVerifier::StateVerifier (const glw::Functions& gl, tcu::TestLog& log, const char* testNamePostfix) 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : glu::CallLogWrapper (gl, log) 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testNamePostfix (testNamePostfix) 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enableLogging(true); 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 863c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateVerifier::~StateVerifier () 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* StateVerifier::getTestNamePostfix (void) const 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_testNamePostfix; 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// GetBooleanVerifier 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetBooleanVerifier : public StateVerifier 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetBooleanVerifier (const glw::Functions& gl, tcu::TestLog& log); 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference); 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3); 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3); 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference); 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1); 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength); 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits); 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1123c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetBooleanVerifier::GetBooleanVerifier (const glw::Functions& gl, tcu::TestLog& log) 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getboolean") 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference) 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean expectedGLState = reference ? GL_TRUE : GL_FALSE; 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state != expectedGLState) 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (expectedGLState==GL_TRUE ? "GL_TRUE" : "GL_FALSE") << "; got " << (state == GL_TRUE ? "GL_TRUE" : (state == GL_FALSE ? "GL_FALSE" : "non-boolean")) << TestLog::EndMessage; 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3) 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyInteger4Mask(testCtx, name, reference0, true, reference1, true, reference2, true, reference3, true); 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3) 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean[4]> boolVector4; 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, boolVector4); 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!boolVector4.verifyValidity(testCtx)) 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean referenceAsGLBoolean[] = 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference0 ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE, 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference1 ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE, 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference2 ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE, 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference3 ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE, 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((enableRef0 && (boolVector4[0] != referenceAsGLBoolean[0])) || 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef1 && (boolVector4[1] != referenceAsGLBoolean[1])) || 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef2 && (boolVector4[2] != referenceAsGLBoolean[2])) || 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef3 && (boolVector4[3] != referenceAsGLBoolean[3]))) 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef0 ? (referenceAsGLBoolean[0] ? "GL_TRUE" : "GL_FALSE") : " - ") << ", " 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef1 ? (referenceAsGLBoolean[1] ? "GL_TRUE" : "GL_FALSE") : " - ") << ", " 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef2 ? (referenceAsGLBoolean[2] ? "GL_TRUE" : "GL_FALSE") : " - ") << ", " 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef3 ? (referenceAsGLBoolean[3] ? "GL_TRUE" : "GL_FALSE") : " - ") << TestLog::EndMessage; 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == GL_TRUE) // state is non-zero, could be greater than reference (correct) 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == GL_FALSE) // state is zero 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (reference > 0) // and reference is greater than zero? 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE" << TestLog::EndMessage; 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE or GL_FALSE" << TestLog::EndMessage; 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference) 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == GL_TRUE) // state is non-zero, could be greater than reference (correct) 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == GL_FALSE) // state is zero 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (reference > 0) // and reference is greater than zero? 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE" << TestLog::EndMessage; 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE or GL_FALSE" << TestLog::EndMessage; 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == GL_TRUE) // state is non-zero, could be less than reference (correct) 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == GL_FALSE) // state is zero 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (reference < 0) // and reference is less than zero? 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE" << TestLog::EndMessage; 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE or GL_FALSE" << TestLog::EndMessage; 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1) 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean[2]> boolVector; 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, boolVector); 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!boolVector.verifyValidity(testCtx)) 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean referenceAsGLBoolean[2] = 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference0 ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE, 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference1 ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(referenceAsGLBoolean); ++ndx) 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (boolVector[ndx] == GL_TRUE) // state is non-zero, could be greater than any integer 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry continue; 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (boolVector[ndx] == GL_FALSE) // state is zero 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (referenceAsGLBoolean[ndx] > 0) // and reference is greater than zero? 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE" << TestLog::EndMessage; 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE or GL_FALSE" << TestLog::EndMessage; 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength) 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (size_t ndx = 0; ndx < referencesLength; ++ndx) 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean expectedGLState = references[ndx] ? GL_TRUE : GL_FALSE; 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == expectedGLState) 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: got " << (state==GL_TRUE ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits) 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // if stencilBits == 0, the mask is allowed to be either GL_TRUE or GL_FALSE 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // otherwise it must be GL_TRUE 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stencilBits > 0 && state != GL_TRUE) 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected GL_TRUE" << TestLog::EndMessage; 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//GetIntegerVerifier 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetIntegerVerifier : public StateVerifier 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetIntegerVerifier (const glw::Functions& gl, tcu::TestLog& log); 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference); 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3); 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3); 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference); 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1); 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength); 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits); 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3663c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetIntegerVerifier::GetIntegerVerifier (const glw::Functions& gl, tcu::TestLog& log) 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getinteger") 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference) 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state != reference) 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference << "; got " << state << TestLog::EndMessage; 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3) 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyInteger4Mask(testCtx, name, reference0, true, reference1, true, reference2, true, reference3, true); 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3) 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint[4]> intVector4; 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, intVector4); 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!intVector4.verifyValidity(testCtx)) 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((enableRef0 && (intVector4[0] != reference0)) || 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef1 && (intVector4[1] != reference1)) || 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef2 && (intVector4[2] != reference2)) || 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef3 && (intVector4[3] != reference3))) 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef0?"":"(") << reference0 << (enableRef0?"":")") << ", " 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef1?"":"(") << reference1 << (enableRef1?"":")") << ", " 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef2?"":"(") << reference2 << (enableRef2?"":")") << ", " 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef3?"":"(") << reference3 << (enableRef3?"":")") << TestLog::EndMessage; 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < reference) 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << reference << "; got " << state << TestLog::EndMessage; 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference) 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (GLuint(state) < reference) 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << reference << "; got " << GLuint(state) << TestLog::EndMessage; 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state > reference) 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected less or equal to " << reference << "; got " << state << TestLog::EndMessage; 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1) 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint[2]> intVector2; 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, intVector2); 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!intVector2.verifyValidity(testCtx)) 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (intVector2[0] < reference0 || intVector2[1] < reference1) 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << reference0 << ", " << reference1 << "; got " << intVector2[0] << ", " << intVector2[0] << TestLog::EndMessage; 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength) 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (size_t ndx = 0; ndx < referencesLength; ++ndx) 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint expectedGLState = references[ndx]; 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == expectedGLState) 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: got " << state << TestLog::EndMessage; 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits) 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint reference = (1 << stencilBits) - 1; 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((state & reference) != reference) // the least significant stencilBits bits should be on 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected minimum mask of " << reference << "; got " << state << TestLog::EndMessage; 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid mask value"); 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//GetInteger64Verifier 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetInteger64Verifier : public StateVerifier 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetInteger64Verifier (const glw::Functions& gl, tcu::TestLog& log); 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference); 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3); 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3); 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference); 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1); 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength); 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits); 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5533c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetInteger64Verifier::GetInteger64Verifier (const glw::Functions& gl, tcu::TestLog& log) 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getinteger64") 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference) 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state != GLint64(reference)) 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference << "; got " << state << TestLog::EndMessage; 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3) 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyInteger4Mask(testCtx, name, reference0, true, reference1, true, reference2, true, reference3, true); 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3) 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64[4]> intVector4; 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, intVector4); 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!intVector4.verifyValidity(testCtx)) 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((enableRef0 && (intVector4[0] != GLint64(reference0))) || 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef1 && (intVector4[1] != GLint64(reference1))) || 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef2 && (intVector4[2] != GLint64(reference2))) || 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef3 && (intVector4[3] != GLint64(reference3)))) 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef0?"":"(") << reference0 << (enableRef0?"":")") << ", " 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef1?"":"(") << reference1 << (enableRef1?"":")") << ", " 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef2?"":"(") << reference2 << (enableRef2?"":")") << ", " 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef3?"":"(") << reference3 << (enableRef3?"":")") << TestLog::EndMessage; 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < GLint64(reference)) 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLint64(reference) << "; got " << state << TestLog::EndMessage; 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference) 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (GLuint(state) < GLint64(reference)) 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLint64(reference) << "; got " << GLuint(state) << TestLog::EndMessage; 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state > GLint64(reference)) 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected less or equal to " << GLint64(reference) << "; got " << state << TestLog::EndMessage; 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1) 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64[2]> intVector2; 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, intVector2); 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!intVector2.verifyValidity(testCtx)) 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (intVector2[0] < GLint64(reference0) || intVector2[1] < GLint64(reference1)) 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLint64(reference0) << ", " << GLint64(reference1) << "; got " << intVector2[0] << ", " << intVector2[1] << TestLog::EndMessage; 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength) 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (size_t ndx = 0; ndx < referencesLength; ++ndx) 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 expectedGLState = GLint64(references[ndx]); 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == expectedGLState) 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: got " << state << TestLog::EndMessage; 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits) 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 reference = (1ULL << stencilBits) - 1; 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((state & reference) != reference) // the least significant stencilBits bits should be on 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected mimimum mask of " << reference << "; got " << state << TestLog::EndMessage; 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid mask value"); 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//GetFloatVerifier 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetFloatVerifier : public StateVerifier 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetFloatVerifier (const glw::Functions& gl, tcu::TestLog& log); 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference); 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3); 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3); 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference); 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference); 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1); 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength); 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits); 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7393c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetFloatVerifier::GetFloatVerifier (const glw::Functions& gl, tcu::TestLog& log) 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getfloat") 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyInteger (tcu::TestContext& testCtx, GLenum name, GLint reference) 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat referenceAsFloat = GLfloat(reference); 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(reference == GLint(referenceAsFloat)); // reference integer must have 1:1 mapping to float for this to work. Reference value is always such value in these tests 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat> state; 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, &state); 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state != referenceAsFloat) 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsFloat << "; got " << state << TestLog::EndMessage; 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyInteger4 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1, GLint reference2, GLint reference3) 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyInteger4Mask(testCtx, name, reference0, true, reference1, true, reference2, true, reference3, true); 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyInteger4Mask (tcu::TestContext& testCtx, GLenum name, GLint reference0, bool enableRef0, GLint reference1, bool enableRef1, GLint reference2, bool enableRef2, GLint reference3, bool enableRef3) 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat[4]> floatVector4; 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, floatVector4); 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector4.verifyValidity(testCtx)) 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((enableRef0 && (floatVector4[0] != GLfloat(reference0))) || 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef1 && (floatVector4[1] != GLfloat(reference1))) || 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef2 && (floatVector4[2] != GLfloat(reference2))) || 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (enableRef3 && (floatVector4[3] != GLfloat(reference3)))) 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef0?"":"(") << GLfloat(reference0) << (enableRef0?"":")") << ", " 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef1?"":"(") << GLfloat(reference1) << (enableRef1?"":")") << ", " 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef2?"":"(") << GLfloat(reference2) << (enableRef2?"":")") << ", " 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (enableRef3?"":"(") << GLfloat(reference3) << (enableRef3?"":")") << TestLog::EndMessage; 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat> state; 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, &state); 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < GLfloat(reference)) 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference) << "; got " << state << TestLog::EndMessage; 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyUnsignedIntegerGreaterOrEqual (tcu::TestContext& testCtx, GLenum name, GLuint reference) 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat> state; 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, &state); 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (GLuint(state) < GLfloat(reference)) 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference) << "; got " << GLuint(state) << TestLog::EndMessage; 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyIntegerLessOrEqual (tcu::TestContext& testCtx, GLenum name, GLint reference) 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat> state; 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, &state); 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state > GLfloat(reference)) 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected less or equal to " << GLfloat(reference) << "; got " << state << TestLog::EndMessage; 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyIntegerGreaterOrEqual2 (tcu::TestContext& testCtx, GLenum name, GLint reference0, GLint reference1) 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat[2]> floatVector2; 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, floatVector2); 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector2.verifyValidity(testCtx)) 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector2[0] < GLfloat(reference0) || floatVector2[1] < GLfloat(reference1)) 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected greater or equal to " << GLfloat(reference0) << ", " << GLfloat(reference1) << "; got " << floatVector2[0] << ", " << floatVector2[1] << TestLog::EndMessage; 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyIntegerAnyOf (tcu::TestContext& testCtx, GLenum name, const GLint references[], size_t referencesLength) 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat> state; 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, &state); 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (size_t ndx = 0; ndx < referencesLength; ++ndx) 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat expectedGLState = GLfloat(references[ndx]); 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(references[ndx] == GLint(expectedGLState)); // reference integer must have 1:1 mapping to float for this to work. Reference value is always such value in these tests 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state == expectedGLState) 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: got " << state << TestLog::EndMessage; 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyStencilMaskInitial (tcu::TestContext& testCtx, GLenum name, int stencilBits) 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // checking the mask bits with float doesn't make much sense because of conversion errors 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // just verify that the value is greater or equal to the minimum value 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint reference = (1 << stencilBits) - 1; 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyIntegerGreaterOrEqual(testCtx, name, reference); 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // IntegerStateQueryVerifiers 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace IntegerStateQueryVerifiers; 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* transformFeedbackTestVertSource = "#version 300 es\n" 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main (void)\n" 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry " gl_Position = vec4(0.0);\n" 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n\0"; 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* transformFeedbackTestFragSource = "#version 300 es\n" 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "layout(location = 0) out mediump vec4 fragColor;" 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main (void)\n" 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry " fragColor = vec4(0.0);\n" 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n\0"; 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* testVertSource = "#version 300 es\n" 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main (void)\n" 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry " gl_Position = vec4(0.0);\n" 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n\0"; 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* testFragSource = "#version 300 es\n" 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "layout(location = 0) out mediump vec4 fragColor;" 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main (void)\n" 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry " fragColor = vec4(0.0);\n" 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n\0"; 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TransformFeedbackTestCase : public ApiCase 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TransformFeedbackTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_transformfeedback (0) 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenTransformFeedbacks(1, &m_transformfeedback); 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shaderVert = glCreateShader(GL_VERTEX_SHADER); 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glShaderSource(shaderVert, 1, &transformFeedbackTestVertSource, DE_NULL); 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glCompileShader(shaderVert); 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint compileStatus; 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetShaderiv(shaderVert, GL_COMPILE_STATUS, &compileStatus); 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkBooleans(compileStatus, GL_TRUE); 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shaderFrag = glCreateShader(GL_FRAGMENT_SHADER); 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glShaderSource(shaderFrag, 1, &transformFeedbackTestFragSource, DE_NULL); 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glCompileShader(shaderFrag); 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetShaderiv(shaderFrag, GL_COMPILE_STATUS, &compileStatus); 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkBooleans(compileStatus, GL_TRUE); 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shaderProg = glCreateProgram(); 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glAttachShader(shaderProg, shaderVert); 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glAttachShader(shaderProg, shaderFrag); 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* transform_feedback_outputs = "gl_Position"; 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glTransformFeedbackVaryings(shaderProg, 1, &transform_feedback_outputs, GL_INTERLEAVED_ATTRIBS); 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glLinkProgram(shaderProg); 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint linkStatus; 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetProgramiv(shaderProg, GL_LINK_STATUS, &linkStatus); 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkBooleans(linkStatus, GL_TRUE); 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, m_transformfeedback); 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint feedbackBufferId; 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenBuffers(1, &feedbackBufferId); 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, feedbackBufferId); 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 16, NULL, GL_DYNAMIC_READ); 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, feedbackBufferId); 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glUseProgram(shaderProg); 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testTransformFeedback(); 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glUseProgram(0); 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0); 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteTransformFeedbacks(1, &m_transformfeedback); 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteBuffers(1, &feedbackBufferId); 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteShader(shaderVert); 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteShader(shaderFrag); 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteProgram(shaderProg); 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void testTransformFeedback (void) = DE_NULL; 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint m_transformfeedback; 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TransformFeedbackBindingTestCase : public TransformFeedbackTestCase 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TransformFeedbackBindingTestCase (Context& context, StateVerifier* verifier, const char* name) 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TransformFeedbackTestCase (context, verifier, name, "GL_TRANSFORM_FEEDBACK_BINDING") 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void beforeTransformFeedbackTest (void) 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_TRANSFORM_FEEDBACK_BINDING, 0); 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void testTransformFeedback (void) 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_TRANSFORM_FEEDBACK_BINDING, m_transformfeedback); 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void afterTransformFeedbackTest (void) 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_TRANSFORM_FEEDBACK_BINDING, 0); 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ConstantMinimumValueTestCase : public ApiCase 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ConstantMinimumValueTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum targetName, GLint minValue) 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_targetName (targetName) 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_minValue (minValue) 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyUnsignedIntegerGreaterOrEqual(m_testCtx, m_targetName, m_minValue); 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_targetName; 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_minValue; 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ConstantMaximumValueTestCase : public ApiCase 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ConstantMaximumValueTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum targetName, GLint minValue) 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_targetName (targetName) 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_minValue (minValue) 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerLessOrEqual(m_testCtx, m_targetName, m_minValue); 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_targetName; 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_minValue; 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SampleBuffersTestCase : public ApiCase 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SampleBuffersTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int expectedSampleBuffers = (m_context.getRenderTarget().getNumSamples() > 1) ? 1 : 0; 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_log << tcu::TestLog::Message << "Sample count is " << (m_context.getRenderTarget().getNumSamples()) << ", expecting GL_SAMPLE_BUFFERS to be " << expectedSampleBuffers << tcu::TestLog::EndMessage; 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLE_BUFFERS, expectedSampleBuffers); 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SamplesTestCase : public ApiCase 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SamplesTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // MSAA? 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context.getRenderTarget().getNumSamples() > 1) 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_log << tcu::TestLog::Message << "Sample count is " << (m_context.getRenderTarget().getNumSamples()) << tcu::TestLog::EndMessage; 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLES, m_context.getRenderTarget().getNumSamples()); 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glw::GLint validSamples[] = {0, 1}; 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_log << tcu::TestLog::Message << "Expecting GL_SAMPLES to be 0 or 1" << tcu::TestLog::EndMessage; 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerAnyOf(m_testCtx, GL_SAMPLES, validSamples, DE_LENGTH_OF_ARRAY(validSamples)); 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass HintTestCase : public ApiCase 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry HintTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum targetName) 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_targetName (targetName) 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_targetName, GL_DONT_CARE); 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glHint(m_targetName, GL_NICEST); 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_targetName, GL_NICEST); 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glHint(m_targetName, GL_FASTEST); 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_targetName, GL_FASTEST); 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glHint(m_targetName, GL_DONT_CARE); 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_targetName, GL_DONT_CARE); 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_targetName; 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DepthFuncTestCase : public ApiCase 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DepthFuncTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DEPTH_FUNC, GL_LESS); 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum depthFunctions[] = {GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GREATER, GL_GEQUAL, GL_NOTEQUAL}; 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(depthFunctions); ndx++) 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDepthFunc(depthFunctions[ndx]); 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DEPTH_FUNC, depthFunctions[ndx]); 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CullFaceTestCase : public ApiCase 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CullFaceTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_CULL_FACE_MODE, GL_BACK); 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum cullFaces[] = {GL_FRONT, GL_BACK, GL_FRONT_AND_BACK}; 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(cullFaces); ndx++) 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glCullFace(cullFaces[ndx]); 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_CULL_FACE_MODE, cullFaces[ndx]); 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass FrontFaceTestCase : public ApiCase 12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FrontFaceTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRONT_FACE, GL_CCW); 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum frontFaces[] = {GL_CW, GL_CCW}; 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(frontFaces); ndx++) 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glFrontFace(frontFaces[ndx]); 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRONT_FACE, frontFaces[ndx]); 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ViewPortTestCase : public ApiCase 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ViewPortTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint maxViewportDimensions[2] = {0}; 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(GL_MAX_VIEWPORT_DIMS, maxViewportDimensions); 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // verify initial value of first two values 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger4(m_testCtx, GL_VIEWPORT, 0, 0, m_context.getRenderTarget().getWidth(), m_context.getRenderTarget().getHeight()); 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint x = rnd.getInt(-64000, 64000); 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint y = rnd.getInt(-64000, 64000); 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei width = rnd.getInt(0, maxViewportDimensions[0]); 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei height = rnd.getInt(0, maxViewportDimensions[1]); 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glViewport(x, y, width, height); 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger4(m_testCtx, GL_VIEWPORT, x, y, width, height); 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ScissorBoxTestCase : public ApiCase 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ScissorBoxTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // verify initial value of first two values 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger4Mask(m_testCtx, GL_SCISSOR_BOX, 0, true, 0, true, 0, false, 0, false); 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint left = rnd.getInt(-64000, 64000); 13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint bottom = rnd.getInt(-64000, 64000); 13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei width = rnd.getInt(0, 64000); 13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei height = rnd.getInt(0, 64000); 13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glScissor(left, bottom, width, height); 13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger4(m_testCtx, GL_SCISSOR_BOX, left, bottom, width, height); 13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass MaxViewportDimsTestCase : public ApiCase 13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MaxViewportDimsTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerGreaterOrEqual2(m_testCtx, GL_MAX_VIEWPORT_DIMS, m_context.getRenderTarget().getWidth(), m_context.getRenderTarget().getHeight()); 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilRefTestCase : public ApiCase 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilRefTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName) 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, 0); 13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int ref = 1 << stencilBit; 13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFunc(GL_ALWAYS, ref, 0); // mask should not affect the REF 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, ref); 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFunc(GL_ALWAYS, ref, ref); 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, ref); 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilRefSeparateTestCase : public ApiCase 13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilRefSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, GLenum stencilFuncTargetFace) 13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilFuncTargetFace (stencilFuncTargetFace) 13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, 0); 13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int ref = 1 << stencilBit; 14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFuncSeparate(m_stencilFuncTargetFace, GL_ALWAYS, ref, 0); 14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, ref); 14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFuncSeparate(m_stencilFuncTargetFace, GL_ALWAYS, ref, ref); 14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, ref); 14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilFuncTargetFace; 14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilOpTestCase : public ApiCase 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilOpTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum stencilOpName) 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilOpName (stencilOpName) 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_stencilOpName, GL_KEEP); 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum stencilOpValues[] = {GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}; 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(stencilOpValues); ++ndx) 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SetStencilOp(stencilOpValues[ndx]); 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_stencilOpName, stencilOpValues[ndx]); 14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void SetStencilOp (GLenum stencilOpValue) 14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_stencilOpName) 14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_FAIL: 14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_BACK_FAIL: 14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilOp(stencilOpValue, GL_KEEP, GL_KEEP); 14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_PASS_DEPTH_FAIL: 14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_BACK_PASS_DEPTH_FAIL: 14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilOp(GL_KEEP, stencilOpValue, GL_KEEP); 14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_PASS_DEPTH_PASS: 14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_BACK_PASS_DEPTH_PASS: 14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilOp(GL_KEEP, GL_KEEP, stencilOpValue); 14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false && "should not happen"); 14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilOpName; 14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilOpSeparateTestCase : public StencilOpTestCase 14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilOpSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum stencilOpName, GLenum stencilOpFace) 14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StencilOpTestCase (context, verifier, name, description, stencilOpName) 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilOpFace (stencilOpFace) 14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void SetStencilOp (GLenum stencilOpValue) 14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_stencilOpName) 14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_FAIL: 14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_BACK_FAIL: 14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilOpSeparate(m_stencilOpFace, stencilOpValue, GL_KEEP, GL_KEEP); 14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_PASS_DEPTH_FAIL: 15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_BACK_PASS_DEPTH_FAIL: 15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilOpSeparate(m_stencilOpFace, GL_KEEP, stencilOpValue, GL_KEEP); 15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_PASS_DEPTH_PASS: 15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_STENCIL_BACK_PASS_DEPTH_PASS: 15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilOpSeparate(m_stencilOpFace, GL_KEEP, GL_KEEP, stencilOpValue); 15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false && "should not happen"); 15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilOpFace; 15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15193c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilFuncTestCase : public ApiCase 15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilFuncTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 15293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_STENCIL_FUNC, GL_ALWAYS); 15313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum stencilfuncValues[] = {GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL}; 15343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(stencilfuncValues); ++ndx) 15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFunc(stencilfuncValues[ndx], 0, 0); 15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_STENCIL_FUNC, stencilfuncValues[ndx]); 15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_STENCIL_BACK_FUNC, stencilfuncValues[ndx]); 15443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15473c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 15483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 15493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 15503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilFuncSeparateTestCase : public ApiCase 15523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 15543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilFuncSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum stencilFuncName, GLenum stencilFuncFace) 15553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 15563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 15573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilFuncName (stencilFuncName) 15583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilFuncFace (stencilFuncFace) 15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_stencilFuncName, GL_ALWAYS); 15653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum stencilfuncValues[] = {GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL}; 15683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(stencilfuncValues); ++ndx) 15703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFuncSeparate(m_stencilFuncFace, stencilfuncValues[ndx], 0, 0); 15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_stencilFuncName, stencilfuncValues[ndx]); 15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilFuncName; 15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilFuncFace; 15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilMaskTestCase : public ApiCase 15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilMaskTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName) 15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 15893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyStencilMaskInitial(m_testCtx, m_testTargetName, stencilBits); 15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int mask = 1 << stencilBit; 16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFunc(GL_ALWAYS, 0, mask); 16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, mask); 16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 16133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 16153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 16163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilMaskSeparateTestCase : public ApiCase 16183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16193c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 16203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilMaskSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, GLenum stencilFuncTargetFace) 16213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilFuncTargetFace (stencilFuncTargetFace) 16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyStencilMaskInitial(m_testCtx, m_testTargetName, stencilBits); 16333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 16363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int mask = 1 << stencilBit; 16383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilFuncSeparate(m_stencilFuncTargetFace, GL_ALWAYS, 0, mask); 16403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, mask); 16433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16463c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 16473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 16483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 16493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilFuncTargetFace; 16503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 16513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilWriteMaskTestCase : public ApiCase 16533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 16553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilWriteMaskTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName) 16563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 16573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 16583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 16593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 16633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 16653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 16673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int mask = 1 << stencilBit; 16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilMask(mask); 16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, mask); 16743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 16783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 16793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 16803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 16813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilWriteMaskSeparateTestCase : public ApiCase 16833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 16853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilWriteMaskSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, GLenum stencilTargetFace) 16863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_stencilTargetFace (stencilTargetFace) 16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 16963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int mask = 1 << stencilBit; 17003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glStencilMaskSeparate(m_stencilTargetFace, mask); 17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, mask); 17053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 17093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 17103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 17113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_stencilTargetFace; 17123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 17133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PixelStoreTestCase : public ApiCase 17153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 17163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 17173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PixelStoreTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, int initialValue) 17183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 17193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 17203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 17213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_initialValue (initialValue) 17223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 17263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 17283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, m_initialValue); 17303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 17333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 17343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int referenceValue = rnd.getInt(0, 64000); 17363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glPixelStorei(m_testTargetName, referenceValue); 17383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, referenceValue); 17413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17453c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 17463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 17473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 17483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_initialValue; 17493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 17503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PixelStoreAlignTestCase : public ApiCase 17523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 17533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 17543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PixelStoreAlignTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName) 17553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 17563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 17573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 17583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 17623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, 4); 17643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int alignments[] = {1, 2, 4, 8}; 17673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(alignments); ++ndx) 17693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int referenceValue = alignments[ndx]; 17713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glPixelStorei(m_testTargetName, referenceValue); 17733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, referenceValue); 17763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 17773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 17813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 17823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 17833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 17843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BlendFuncTestCase : public ApiCase 17863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 17873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 17883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BlendFuncTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, int initialValue) 17893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 17903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 17913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 17923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_initialValue (initialValue) 17933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 17973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, m_initialValue); 17993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 18003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum blendFuncValues[] = 18023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, 18043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR, 18053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, 18063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_SRC_ALPHA_SATURATE 18073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 18083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(blendFuncValues); ++ndx) 18103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum referenceValue = blendFuncValues[ndx]; 18123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SetBlendFunc(referenceValue); 18143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 18153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, referenceValue); 18173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 18183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 18213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void SetBlendFunc (GLenum func) 18223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_testTargetName) 18243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_SRC_RGB: 18263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_SRC_ALPHA: 18273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendFunc(func, GL_ZERO); 18283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_DST_RGB: 18313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_DST_ALPHA: 18323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendFunc(GL_ZERO, func); 18333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 18363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false && "should not happen"); 18373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 18423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 18433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_initialValue; 18443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 18453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18463c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BlendFuncSeparateTestCase : public BlendFuncTestCase 18473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18483c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 18493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BlendFuncSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, int initialValue) 18503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : BlendFuncTestCase (context, verifier, name, description, testTargetName, initialValue) 18513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void SetBlendFunc (GLenum func) 18553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_testTargetName) 18573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_SRC_RGB: 18593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendFuncSeparate(func, GL_ZERO, GL_ZERO, GL_ZERO); 18603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_DST_RGB: 18633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendFuncSeparate(GL_ZERO, func, GL_ZERO, GL_ZERO); 18643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_SRC_ALPHA: 18673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendFuncSeparate(GL_ZERO, GL_ZERO, func, GL_ZERO); 18683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_DST_ALPHA: 18713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendFuncSeparate(GL_ZERO, GL_ZERO, GL_ZERO, func); 18723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 18753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false && "should not happen"); 18763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 18773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 18803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BlendEquationTestCase : public ApiCase 18823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 18843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BlendEquationTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, int initialValue) 18853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 18863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 18873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 18883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_initialValue (initialValue) 18893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 18913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 18933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, m_initialValue); 18953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 18963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum blendFuncValues[] = 18983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 18993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MIN, GL_MAX 19003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 19013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(blendFuncValues); ++ndx) 19033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLenum referenceValue = blendFuncValues[ndx]; 19053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SetBlendEquation(referenceValue); 19073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 19083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testTargetName, referenceValue); 19103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 19113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 19143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void SetBlendEquation (GLenum equation) 19153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendEquation(equation); 19173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 19203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 19213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_initialValue; 19223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 19233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BlendEquationSeparateTestCase : public BlendEquationTestCase 19243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 19263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BlendEquationSeparateTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, int initialValue) 19273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : BlendEquationTestCase (context, verifier, name, description, testTargetName, initialValue) 19283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 19323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void SetBlendEquation (GLenum equation) 19333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_testTargetName) 19353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_EQUATION_RGB: 19373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendEquationSeparate(equation, GL_FUNC_ADD); 19383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 19393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_BLEND_EQUATION_ALPHA: 19413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBlendEquationSeparate(GL_FUNC_ADD, equation); 19423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 19433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 19453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false && "should not happen"); 19463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 19473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 19503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ImplementationArrayTestCase : public ApiCase 19523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 19543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ImplementationArrayTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testTargetName, GLenum testTargetLengthTargetName, int minValue) 19553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 19563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 19573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetName (testTargetName) 19583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testTargetLengthTargetName (testTargetLengthTargetName) 19593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_minValue (minValue) 19603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 19643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerGreaterOrEqual(m_testCtx, m_testTargetLengthTargetName, m_minValue); 19663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 19673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint targetArrayLength = 0; 19693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(m_testTargetLengthTargetName, &targetArrayLength); 19703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 19713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (targetArrayLength) 19733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<GLint> queryResult; 19753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry queryResult.resize(targetArrayLength, 0); 19763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(m_testTargetName, &queryResult[0]); 19783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 19793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 19833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 19843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetName; 19853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testTargetLengthTargetName; 19863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_minValue; 19873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 19883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CurrentProgramBindingTestCase : public ApiCase 19903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 19923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CurrentProgramBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 19933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 19943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 19953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 19963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 19973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 19993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_CURRENT_PROGRAM, 0); 20013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shaderVert = glCreateShader(GL_VERTEX_SHADER); 20053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glShaderSource(shaderVert, 1, &testVertSource, DE_NULL); 20063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glCompileShader(shaderVert); 20073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint compileStatus; 20093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetShaderiv(shaderVert, GL_COMPILE_STATUS, &compileStatus); 20103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkBooleans(compileStatus, GL_TRUE); 20113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shaderFrag = glCreateShader(GL_FRAGMENT_SHADER); 20133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glShaderSource(shaderFrag, 1, &testFragSource, DE_NULL); 20143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glCompileShader(shaderFrag); 20153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetShaderiv(shaderFrag, GL_COMPILE_STATUS, &compileStatus); 20173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkBooleans(compileStatus, GL_TRUE); 20183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shaderProg = glCreateProgram(); 20203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glAttachShader(shaderProg, shaderVert); 20213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glAttachShader(shaderProg, shaderFrag); 20223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glLinkProgram(shaderProg); 20233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint linkStatus; 20253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetProgramiv(shaderProg, GL_LINK_STATUS, &linkStatus); 20263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkBooleans(linkStatus, GL_TRUE); 20273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glUseProgram(shaderProg); 20293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_CURRENT_PROGRAM, shaderProg); 20323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteShader(shaderVert); 20353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteShader(shaderFrag); 20363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteProgram(shaderProg); 20373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_CURRENT_PROGRAM, shaderProg); 20403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 20423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glUseProgram(0); 20443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_CURRENT_PROGRAM, 0); 20463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 20483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 20503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 20513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 20523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass VertexArrayBindingTestCase : public ApiCase 20543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 20553c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 20563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry VertexArrayBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 20573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 20583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 20593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 20613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test(void) 20633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_VERTEX_ARRAY_BINDING, 0); 20653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint vertexArrayObject = 0; 20683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenVertexArrays(1, &vertexArrayObject); 20693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindVertexArray(vertexArrayObject); 20723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_VERTEX_ARRAY_BINDING, vertexArrayObject); 20733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteVertexArrays(1, &vertexArrayObject); 20763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_VERTEX_ARRAY_BINDING, 0); 20773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 20793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 20813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 20823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 20833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BufferBindingTestCase : public ApiCase 20853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 20863c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 20873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BufferBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum bufferBindingName, GLenum bufferType) 20883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 20893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 20903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_bufferBindingName (bufferBindingName) 20913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_bufferType (bufferType) 20923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 20943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 20963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_bufferBindingName, 0); 20983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 20993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint bufferObject = 0; 21013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenBuffers(1, &bufferObject); 21023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindBuffer(m_bufferType, bufferObject); 21053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_bufferBindingName, bufferObject); 21063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteBuffers(1, &bufferObject); 21093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_bufferBindingName, 0); 21103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 21143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 21153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_bufferBindingName; 21163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_bufferType; 21173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 21183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21193c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ElementArrayBufferBindingTestCase : public ApiCase 21203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 21213c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 21223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ElementArrayBufferBindingTestCase (Context& context, StateVerifier* verifier, const char* name) 21233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, "GL_ELEMENT_ARRAY_BUFFER_BINDING") 21243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 21253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 21293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Test with default VAO 21313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::ScopedLogSection section(m_log, "DefaultVAO", "Test with default VAO"); 21333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, 0); 21353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint bufferObject = 0; 21383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenBuffers(1, &bufferObject); 21393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObject); 21423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, bufferObject); 21433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteBuffers(1, &bufferObject); 21463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, 0); 21473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Test with multiple VAOs 21513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::ScopedLogSection section(m_log, "WithVAO", "Test with VAO"); 21533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint vaos[2] = {0}; 21553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffers[2] = {0}; 21563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenVertexArrays(2, vaos); 21583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenBuffers(2, buffers); 21613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // initial 21643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindVertexArray(vaos[0]); 21653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, 0); 21663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // after setting 21693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[0]); 21703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, buffers[0]); 21713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // initial of vao 2 21743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindVertexArray(vaos[1]); 21753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, 0); 21763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // after setting to 2 21793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[1]); 21803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, buffers[1]); 21813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // vao 1 still has buffer 1 bound? 21843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindVertexArray(vaos[0]); 21853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, buffers[0]); 21863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // deleting clears from bound vaos ... 21893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteBuffers(2, buffers); 21903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, 0); 21913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // ... but does not from non-bound vaos? 21943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindVertexArray(vaos[1]); 21953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ELEMENT_ARRAY_BUFFER_BINDING, buffers[1]); 21963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 21973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteVertexArrays(2, vaos); 21993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 22043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 22053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 22063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22073c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StencilClearValueTestCase : public ApiCase 22083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 22093c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 22103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StencilClearValueTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 22113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 22123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 22133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 22173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_STENCIL_CLEAR_VALUE, 0); 22193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int stencilBits = m_context.getRenderTarget().getStencilBits(); 22223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int stencilBit = 0; stencilBit < stencilBits; ++stencilBit) 22243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int ref = 1 << stencilBit; 22263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glClearStencil(ref); // mask should not affect the REF 22283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_STENCIL_CLEAR_VALUE, ref); 22313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22353c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 22363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 22373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 22383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ActiveTextureTestCase : public ApiCase 22403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 22413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 22423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ActiveTextureTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 22433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 22443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 22453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 22493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ACTIVE_TEXTURE, GL_TEXTURE0); 22513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint textureUnits = 0; 22543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &textureUnits); 22553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < textureUnits; ++ndx) 22583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glActiveTexture(GL_TEXTURE0 + ndx); 22603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_ACTIVE_TEXTURE, GL_TEXTURE0 + ndx); 22633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22673c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 22683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 22693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 22703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass RenderbufferBindingTestCase : public ApiCase 22723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 22733c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 22743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RenderbufferBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 22753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 22763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 22773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 22813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_RENDERBUFFER_BINDING, 0); 22833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint renderBuffer = 0; 22863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenRenderbuffers(1, &renderBuffer); 22873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindRenderbuffer(GL_RENDERBUFFER, renderBuffer); 22903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_RENDERBUFFER_BINDING, renderBuffer); 22933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteRenderbuffers(1, &renderBuffer); 22963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_RENDERBUFFER_BINDING, 0); 22973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 22983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23003c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 23013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 23023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 23033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23043c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SamplerObjectBindingTestCase : public ApiCase 23053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 23063c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 23073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SamplerObjectBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 23083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 23093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 23103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 23133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLER_BINDING, 0); 23153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::ScopedLogSection section(m_log, "SingleUnit", "Single unit"); 23193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint sampler = 0; 23203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenSamplers(1, &sampler); 23213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindSampler(0, sampler); 23243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLER_BINDING, sampler); 23273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteSamplers(1, &sampler); 23303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLER_BINDING, 0); 23313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::ScopedLogSection section(m_log, "MultipleUnits", "Multiple units"); 23363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint samplerA = 0; 23383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint samplerB = 0; 23393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenSamplers(1, &samplerA); 23403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenSamplers(1, &samplerB); 23413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindSampler(1, samplerA); 23443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindSampler(2, samplerB); 23453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLER_BINDING, 0); 23483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glActiveTexture(GL_TEXTURE1); 23513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLER_BINDING, samplerA); 23523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glActiveTexture(GL_TEXTURE2); 23553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_SAMPLER_BINDING, samplerB); 23563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteSamplers(1, &samplerB); 23593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteSamplers(1, &samplerA); 23603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 23653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 23663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 23673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureBindingTestCase : public ApiCase 23693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 23703c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 23713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description, GLenum testBindingName, GLenum textureType) 23723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 23733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 23743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testBindingName (testBindingName) 23753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_textureType (textureType) 23763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 23803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testBindingName, 0); 23823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint texture = 0; 23853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenTextures(1, &texture); 23863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindTexture(m_textureType, texture); 23893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testBindingName, texture); 23903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteTextures(1, &texture); 23923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, m_testBindingName, 0); 23953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 23963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 23983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 23993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_testBindingName; 24003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_textureType; 24013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 24023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass FrameBufferBindingTestCase : public ApiCase 24043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 24053c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 24063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FrameBufferBindingTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 24073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 24083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 24093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 24133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_FRAMEBUFFER_BINDING, 0); 24153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRAMEBUFFER_BINDING, 0); 24163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_FRAMEBUFFER_BINDING, 0); 24173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint framebufferId = 0; 24203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenFramebuffers(1, &framebufferId); 24213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindFramebuffer(GL_FRAMEBUFFER, framebufferId); 24243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_FRAMEBUFFER_BINDING, framebufferId); 24273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRAMEBUFFER_BINDING, framebufferId); 24283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_FRAMEBUFFER_BINDING, framebufferId); 24293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindFramebuffer(GL_FRAMEBUFFER, 0); 24323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_FRAMEBUFFER_BINDING, 0); 24353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRAMEBUFFER_BINDING, 0); 24363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_FRAMEBUFFER_BINDING, 0); 24373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindFramebuffer(GL_READ_FRAMEBUFFER, framebufferId); 24403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_FRAMEBUFFER_BINDING, 0); 24433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRAMEBUFFER_BINDING, 0); 24443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_FRAMEBUFFER_BINDING, framebufferId); 24453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferId); 24483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_FRAMEBUFFER_BINDING, framebufferId); 24513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRAMEBUFFER_BINDING, framebufferId); 24523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_FRAMEBUFFER_BINDING, framebufferId); 24533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteFramebuffers(1, &framebufferId); 24563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_FRAMEBUFFER_BINDING, 0); 24593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_FRAMEBUFFER_BINDING, 0); 24603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_FRAMEBUFFER_BINDING, 0); 24613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 24623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 24653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 24663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 24673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ImplementationColorReadTestCase : public ApiCase 24693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 24703c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 24713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ImplementationColorReadTestCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 24723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 24733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 24743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 24783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint defaultColorTypes[] = 24803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, 24823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_UNSIGNED_INT, GL_INT, GL_HALF_FLOAT, GL_FLOAT, GL_UNSIGNED_SHORT_5_6_5, 24833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, 24843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_10F_11F_11F_REV 24853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 24863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint defaultColorFormats[] = 24873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_RGBA, GL_RGBA_INTEGER, GL_RGB, GL_RGB_INTEGER, 24893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_RG, GL_RG_INTEGER, GL_RED, GL_RED_INTEGER 24903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 24913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<GLint> validColorTypes; 24933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<GLint> validColorFormats; 24943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Defined by the spec 24963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(defaultColorTypes); ++ndx) 24983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorTypes.push_back(defaultColorTypes[ndx]); 24993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(defaultColorFormats); ++ndx) 25003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(defaultColorFormats[ndx]); 25013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Extensions 25033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_format_BGRA8888") || 25053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_context.getContextInfo().isExtensionSupported("GL_APPLE_texture_format_BGRA8888")) 25063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(GL_BGRA); 25073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context.getContextInfo().isExtensionSupported("GL_EXT_read_format_bgra")) 25093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(GL_BGRA); 25113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorTypes.push_back(GL_UNSIGNED_SHORT_4_4_4_4_REV); 25123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorTypes.push_back(GL_UNSIGNED_SHORT_1_5_5_5_REV); 25133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context.getContextInfo().isExtensionSupported("GL_IMG_read_format")) 25163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(GL_BGRA); 25183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorTypes.push_back(GL_UNSIGNED_SHORT_4_4_4_4_REV); 25193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context.getContextInfo().isExtensionSupported("GL_NV_sRGB_formats")) 25223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(GL_SLUMINANCE_NV); 25243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(GL_SLUMINANCE_ALPHA_NV); 25253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context.getContextInfo().isExtensionSupported("GL_NV_bgr")) 25283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry validColorFormats.push_back(GL_BGR_NV); 25303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerAnyOf(m_testCtx, GL_IMPLEMENTATION_COLOR_READ_TYPE, &validColorTypes[0], validColorTypes.size()); 25333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerAnyOf(m_testCtx, GL_IMPLEMENTATION_COLOR_READ_FORMAT, &validColorFormats[0], validColorFormats.size()); 25343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 25383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 25393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 25403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ReadBufferCase : public ApiCase 25423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 25433c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 25443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ReadBufferCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 25453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 25463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 25473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 25513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint validInitialValues[] = {GL_BACK, GL_NONE}; 25533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerAnyOf(m_testCtx, GL_READ_BUFFER, validInitialValues, DE_LENGTH_OF_ARRAY(validInitialValues)); 25543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glReadBuffer(GL_NONE); 25573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_BUFFER, GL_NONE); 25583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glReadBuffer(GL_BACK); 25613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_BUFFER, GL_BACK); 25623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // test GL_READ_BUFFER with framebuffers 25653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint framebufferId = 0; 25673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenFramebuffers(1, &framebufferId); 25683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint renderbuffer_id = 0; 25713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenRenderbuffers(1, &renderbuffer_id); 25723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer_id); 25753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, 128, 128); 25783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindFramebuffer(GL_READ_FRAMEBUFFER, framebufferId); 25813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer_id); 25843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_BUFFER, GL_COLOR_ATTACHMENT0); 25873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteFramebuffers(1, &framebufferId); 25893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteRenderbuffers(1, &renderbuffer_id); 25903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_READ_BUFFER, GL_BACK); 25933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 25943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 25963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 25973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 25983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DrawBufferCase : public ApiCase 26003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 26013c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 26023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DrawBufferCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 26033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 26043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 26053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 26093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint validInitialValues[] = {GL_BACK, GL_NONE}; 26113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyIntegerAnyOf(m_testCtx, GL_DRAW_BUFFER0, validInitialValues, DE_LENGTH_OF_ARRAY(validInitialValues)); 26123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum bufs = GL_NONE; 26153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDrawBuffers(1, &bufs); 26163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_BUFFER0, GL_NONE); 26173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufs = GL_BACK; 26203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDrawBuffers(1, &bufs); 26213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_BUFFER0, GL_BACK); 26223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // test GL_DRAW_BUFFER with framebuffers 26253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint framebufferId = 0; 26273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenFramebuffers(1, &framebufferId); 26283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint renderbuffer_ids[2] = {0}; 26313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGenRenderbuffers(2, renderbuffer_ids); 26323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer_ids[0]); 26353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, 128, 128); 26373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer_ids[1]); 26403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, 128, 128); 26423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferId); 26453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer_ids[0]); 26483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_RENDERBUFFER, renderbuffer_ids[1]); 26503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // only the initial state the draw buffer for fragment color zero is defined 26533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_BUFFER0, GL_COLOR_ATTACHMENT0); 26543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum bufTargets[2] = {GL_NONE, GL_COLOR_ATTACHMENT1}; 26563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDrawBuffers(2, bufTargets); 26573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_BUFFER0, GL_NONE); 26583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_BUFFER1, GL_COLOR_ATTACHMENT1); 26593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteFramebuffers(1, &framebufferId); 26613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDeleteRenderbuffers(2, renderbuffer_ids); 26623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyInteger(m_testCtx, GL_DRAW_BUFFER0, GL_BACK); 26653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 26663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26673c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 26683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 26693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 26703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define FOR_EACH_VERIFIER(VERIFIERS, CODE_BLOCK) \ 26723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int _verifierNdx = 0; _verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); _verifierNdx++) \ 26733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { \ 26743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* verifier = VERIFIERS[_verifierNdx]; \ 26753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CODE_BLOCK; \ 26763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 26793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26803c827367444ee418f129b2c238299f49d3264554Jarkko PoyryIntegerStateQueryTests::IntegerStateQueryTests (Context& context) 26813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup (context, "integers", "Integer Values") 26823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierBoolean (DE_NULL) 26833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierInteger (DE_NULL) 26843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierInteger64 (DE_NULL) 26853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierFloat (DE_NULL) 26863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 26873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 26883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26893c827367444ee418f129b2c238299f49d3264554Jarkko PoyryIntegerStateQueryTests::~IntegerStateQueryTests (void) 26903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 26913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deinit(); 26923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 26933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid IntegerStateQueryTests::init (void) 26953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 26963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierBoolean == DE_NULL); 26973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierInteger == DE_NULL); 26983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierInteger64 == DE_NULL); 26993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierFloat == DE_NULL); 27003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierBoolean = new GetBooleanVerifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 27023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierInteger = new GetIntegerVerifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 27033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierInteger64 = new GetInteger64Verifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 27043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierFloat = new GetFloatVerifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 27053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct LimitedStateInteger 27073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 27093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 27103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum targetName; 27113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint value; 27123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } implementationMinLimits[] = 27133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "subpixel_bits", "SUBPIXEL_BITS has minimum value of 4", GL_SUBPIXEL_BITS, 4 }, 27153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_3d_texture_size", "MAX_3D_TEXTURE_SIZE has minimum value of 256", GL_MAX_3D_TEXTURE_SIZE, 256 }, 27163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_texture_size", "MAX_TEXTURE_SIZE has minimum value of 2048", GL_MAX_TEXTURE_SIZE, 2048}, 27173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_array_texture_layers", "MAX_ARRAY_TEXTURE_LAYERS has minimum value of 256", GL_MAX_ARRAY_TEXTURE_LAYERS, 256 }, 27183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_cube_map_texture_size", "MAX_CUBE_MAP_TEXTURE_SIZE has minimum value of 2048", GL_MAX_CUBE_MAP_TEXTURE_SIZE, 2048}, 27193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_renderbuffer_size", "MAX_RENDERBUFFER_SIZE has minimum value of 2048", GL_MAX_RENDERBUFFER_SIZE, 2048}, 27203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_draw_buffers", "MAX_DRAW_BUFFERS has minimum value of 4", GL_MAX_DRAW_BUFFERS, 4 }, 27213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_color_attachments", "MAX_COLOR_ATTACHMENTS has minimum value of 4", GL_MAX_COLOR_ATTACHMENTS, 4 }, 27223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_elements_indices", "MAX_ELEMENTS_INDICES has minimum value of 0", GL_MAX_ELEMENTS_INDICES, 0 }, 27233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_elements_vertices", "MAX_ELEMENTS_VERTICES has minimum value of 0", GL_MAX_ELEMENTS_VERTICES, 0 }, 27243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "num_extensions", "NUM_EXTENSIONS has minimum value of 0", GL_NUM_EXTENSIONS, 0 }, 27253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "major_version", "MAJOR_VERSION has minimum value of 3", GL_MAJOR_VERSION, 3 }, 27263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "minor_version", "MINOR_VERSION has minimum value of 0", GL_MINOR_VERSION, 0 }, 27273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_vertex_attribs", "MAX_VERTEX_ATTRIBS has minimum value of 16", GL_MAX_VERTEX_ATTRIBS, 16 }, 27283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_vertex_uniform_components", "MAX_VERTEX_UNIFORM_COMPONENTS has minimum value of 1024", GL_MAX_VERTEX_UNIFORM_COMPONENTS, 1024}, 27293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_vertex_uniform_vectors", "MAX_VERTEX_UNIFORM_VECTORS has minimum value of 256", GL_MAX_VERTEX_UNIFORM_VECTORS, 256 }, 27303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_vertex_uniform_blocks", "MAX_VERTEX_UNIFORM_BLOCKS has minimum value of 12", GL_MAX_VERTEX_UNIFORM_BLOCKS, 12 }, 27313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_vertex_output_components", "MAX_VERTEX_OUTPUT_COMPONENTS has minimum value of 64", GL_MAX_VERTEX_OUTPUT_COMPONENTS, 64 }, 27323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_vertex_texture_image_units", "MAX_VERTEX_TEXTURE_IMAGE_UNITS has minimum value of 16", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, 16 }, 27333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_fragment_uniform_components", "MAX_FRAGMENT_UNIFORM_COMPONENTS has minimum value of 896", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, 896 }, 27343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_fragment_uniform_vectors", "MAX_FRAGMENT_UNIFORM_VECTORS has minimum value of 224", GL_MAX_FRAGMENT_UNIFORM_VECTORS, 224 }, 27353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_fragment_uniform_blocks", "MAX_FRAGMENT_UNIFORM_BLOCKS has minimum value of 12", GL_MAX_FRAGMENT_UNIFORM_BLOCKS, 12 }, 27363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_fragment_input_components", "MAX_FRAGMENT_INPUT_COMPONENTS has minimum value of 60", GL_MAX_FRAGMENT_INPUT_COMPONENTS, 60 }, 27373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_texture_image_units", "MAX_TEXTURE_IMAGE_UNITS has minimum value of 16", GL_MAX_TEXTURE_IMAGE_UNITS, 16 }, 27383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_program_texel_offset", "MAX_PROGRAM_TEXEL_OFFSET has minimum value of 7", GL_MAX_PROGRAM_TEXEL_OFFSET, 7 }, 27393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_uniform_buffer_bindings", "MAX_UNIFORM_BUFFER_BINDINGS has minimum value of 24", GL_MAX_UNIFORM_BUFFER_BINDINGS, 24 }, 27403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_combined_uniform_blocks", "MAX_COMBINED_UNIFORM_BLOCKS has minimum value of 24", GL_MAX_COMBINED_UNIFORM_BLOCKS, 24 }, 27413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_varying_components", "MAX_VARYING_COMPONENTS has minimum value of 60", GL_MAX_VARYING_COMPONENTS, 60 }, 27423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_varying_vectors", "MAX_VARYING_VECTORS has minimum value of 15", GL_MAX_VARYING_VECTORS, 15 }, 27433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_combined_texture_image_units", "MAX_COMBINED_TEXTURE_IMAGE_UNITS has minimum value of 32", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, 32 }, 27443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_transform_feedback_interleaved_components", "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS has minimum value of 64", GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, 64 }, 27453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_transform_feedback_separate_attribs", "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS has minimum value of 4", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, 4 }, 27463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_transform_feedback_separate_components", "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS has minimum value of 4", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, 4 }, 27473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "max_samples", "MAX_SAMPLES has minimum value of 4", GL_MAX_SAMPLES, 4 }, 27483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "red_bits", "RED_BITS has minimum value of 0", GL_RED_BITS, 0 }, 27493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "green_bits", "GREEN_BITS has minimum value of 0", GL_GREEN_BITS, 0 }, 27503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blue_bits", "BLUE_BITS has minimum value of 0", GL_BLUE_BITS, 0 }, 27513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "alpha_bits", "ALPHA_BITS has minimum value of 0", GL_ALPHA_BITS, 0 }, 27523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "depth_bits", "DEPTH_BITS has minimum value of 0", GL_DEPTH_BITS, 0 }, 27533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "stencil_bits", "STENCIL_BITS has minimum value of 0", GL_STENCIL_BITS, 0 }, 27543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 27553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const LimitedStateInteger implementationMaxLimits[] = 27563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "min_program_texel_offset", "MIN_PROGRAM_TEXEL_OFFSET has maximum value of -8", GL_MIN_PROGRAM_TEXEL_OFFSET, -8 }, 27583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "uniform_buffer_offset_alignment", "UNIFORM_BUFFER_OFFSET_ALIGNMENT has minimum value of 1", GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, 256 }, 27593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 27603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note implementation defined limits have their own tests so just check the conversions to boolean, int64 and float 27623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* implementationLimitVerifiers[] = {m_verifierBoolean, m_verifierInteger64, m_verifierFloat}; 27633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(implementationMinLimits); testNdx++) 27653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(implementationLimitVerifiers, addChild(new ConstantMinimumValueTestCase(m_context, verifier, (std::string(implementationMinLimits[testNdx].name) + verifier->getTestNamePostfix()).c_str(), implementationMinLimits[testNdx].description, implementationMinLimits[testNdx].targetName, implementationMinLimits[testNdx].value))); 27663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(implementationMaxLimits); testNdx++) 27673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(implementationLimitVerifiers, addChild(new ConstantMaximumValueTestCase(m_context, verifier, (std::string(implementationMaxLimits[testNdx].name) + verifier->getTestNamePostfix()).c_str(), implementationMaxLimits[testNdx].description, implementationMaxLimits[testNdx].targetName, implementationMaxLimits[testNdx].value))); 27683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* normalVerifiers[] = {m_verifierBoolean, m_verifierInteger, m_verifierInteger64, m_verifierFloat}; 27703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(implementationLimitVerifiers, addChild(new SampleBuffersTestCase (m_context, verifier, (std::string("sample_buffers") + verifier->getTestNamePostfix()).c_str(), "SAMPLE_BUFFERS"))); 27723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new SamplesTestCase (m_context, verifier, (std::string("samples") + verifier->getTestNamePostfix()).c_str(), "SAMPLES"))); 27743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new HintTestCase (m_context, verifier, (std::string("generate_mipmap_hint") + verifier->getTestNamePostfix()).c_str(), "GENERATE_MIPMAP_HINT", GL_GENERATE_MIPMAP_HINT))); 27753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new HintTestCase (m_context, verifier, (std::string("fragment_shader_derivative_hint") + verifier->getTestNamePostfix()).c_str(), "FRAGMENT_SHADER_DERIVATIVE_HINT", GL_FRAGMENT_SHADER_DERIVATIVE_HINT))); 27763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new DepthFuncTestCase (m_context, verifier, (std::string("depth_func") + verifier->getTestNamePostfix()).c_str(), "DEPTH_FUNC"))); 27773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new CullFaceTestCase (m_context, verifier, (std::string("cull_face_mode") + verifier->getTestNamePostfix()).c_str(), "CULL_FACE_MODE"))); 27783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new FrontFaceTestCase (m_context, verifier, (std::string("front_face_mode") + verifier->getTestNamePostfix()).c_str(), "FRONT_FACE"))); 27793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ViewPortTestCase (m_context, verifier, (std::string("viewport") + verifier->getTestNamePostfix()).c_str(), "VIEWPORT"))); 27803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ScissorBoxTestCase (m_context, verifier, (std::string("scissor_box") + verifier->getTestNamePostfix()).c_str(), "SCISSOR_BOX"))); 27813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new MaxViewportDimsTestCase (m_context, verifier, (std::string("max_viewport_dims") + verifier->getTestNamePostfix()).c_str(), "MAX_VIEWPORT_DIMS"))); 27823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilRefTestCase (m_context, verifier, (std::string("stencil_ref") + verifier->getTestNamePostfix()).c_str(), "STENCIL_REF", GL_STENCIL_REF))); 27833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilRefTestCase (m_context, verifier, (std::string("stencil_back_ref") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_REF", GL_STENCIL_BACK_REF))); 27843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilRefSeparateTestCase (m_context, verifier, (std::string("stencil_ref_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_REF (separate)", GL_STENCIL_REF, GL_FRONT))); 27853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilRefSeparateTestCase (m_context, verifier, (std::string("stencil_ref_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_REF (separate)", GL_STENCIL_REF, GL_FRONT_AND_BACK))); 27863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilRefSeparateTestCase (m_context, verifier, (std::string("stencil_back_ref_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_REF (separate)", GL_STENCIL_BACK_REF, GL_BACK))); 27873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilRefSeparateTestCase (m_context, verifier, (std::string("stencil_back_ref_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_REF (separate)", GL_STENCIL_BACK_REF, GL_FRONT_AND_BACK))); 27883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct NamedStencilOp 27903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 27923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* frontDescription; 27943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum frontTarget; 27953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* backDescription; 27963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum backTarget; 27973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } stencilOps[] = 27983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "fail", "STENCIL_FAIL", GL_STENCIL_FAIL, "STENCIL_BACK_FAIL", GL_STENCIL_BACK_FAIL }, 28003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "depth_fail", "STENCIL_PASS_DEPTH_FAIL", GL_STENCIL_PASS_DEPTH_FAIL, "STENCIL_BACK_PASS_DEPTH_FAIL", GL_STENCIL_BACK_PASS_DEPTH_FAIL }, 28013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "depth_pass", "STENCIL_PASS_DEPTH_PASS", GL_STENCIL_PASS_DEPTH_PASS, "STENCIL_BACK_PASS_DEPTH_PASS", GL_STENCIL_BACK_PASS_DEPTH_PASS } 28023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 28033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(stencilOps); testNdx++) 28053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilOpTestCase (m_context, verifier, (std::string("stencil_") + stencilOps[testNdx].name + verifier->getTestNamePostfix()).c_str(), stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget))); 28073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilOpTestCase (m_context, verifier, (std::string("stencil_back_") + stencilOps[testNdx].name + verifier->getTestNamePostfix()).c_str(), stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget))); 28083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilOpSeparateTestCase (m_context, verifier, (std::string("stencil_") + stencilOps[testNdx].name + "_separate_both" + verifier->getTestNamePostfix()).c_str(), stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget, GL_FRONT_AND_BACK))); 28103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilOpSeparateTestCase (m_context, verifier, (std::string("stencil_back_") + stencilOps[testNdx].name + "_separate_both" + verifier->getTestNamePostfix()).c_str(), stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget, GL_FRONT_AND_BACK))); 28113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilOpSeparateTestCase (m_context, verifier, (std::string("stencil_") + stencilOps[testNdx].name + "_separate" + verifier->getTestNamePostfix()).c_str(), stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget, GL_FRONT))); 28133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilOpSeparateTestCase (m_context, verifier, (std::string("stencil_back_") + stencilOps[testNdx].name + "_separate" + verifier->getTestNamePostfix()).c_str(), stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget, GL_BACK))); 28143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilFuncTestCase (m_context, verifier, (std::string("stencil_func") + verifier->getTestNamePostfix()).c_str(), "STENCIL_FUNC"))); 28173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilFuncSeparateTestCase (m_context, verifier, (std::string("stencil_func_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_FUNC (separate)", GL_STENCIL_FUNC, GL_FRONT))); 28183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilFuncSeparateTestCase (m_context, verifier, (std::string("stencil_func_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_FUNC (separate)", GL_STENCIL_FUNC, GL_FRONT_AND_BACK))); 28193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilFuncSeparateTestCase (m_context, verifier, (std::string("stencil_back_func_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_FUNC (separate)", GL_STENCIL_BACK_FUNC, GL_BACK))); 28203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilFuncSeparateTestCase (m_context, verifier, (std::string("stencil_back_func_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_FUNC (separate)", GL_STENCIL_BACK_FUNC, GL_FRONT_AND_BACK))); 28213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilMaskTestCase (m_context, verifier, (std::string("stencil_value_mask") + verifier->getTestNamePostfix()).c_str(), "STENCIL_VALUE_MASK", GL_STENCIL_VALUE_MASK))); 28223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilMaskTestCase (m_context, verifier, (std::string("stencil_back_value_mask") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_VALUE_MASK", GL_STENCIL_BACK_VALUE_MASK))); 28233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilMaskSeparateTestCase (m_context, verifier, (std::string("stencil_value_mask_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_VALUE_MASK (separate)", GL_STENCIL_VALUE_MASK, GL_FRONT))); 28243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilMaskSeparateTestCase (m_context, verifier, (std::string("stencil_value_mask_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_VALUE_MASK (separate)", GL_STENCIL_VALUE_MASK, GL_FRONT_AND_BACK))); 28253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilMaskSeparateTestCase (m_context, verifier, (std::string("stencil_back_value_mask_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_VALUE_MASK (separate)", GL_STENCIL_BACK_VALUE_MASK, GL_BACK))); 28263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilMaskSeparateTestCase (m_context, verifier, (std::string("stencil_back_value_mask_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_VALUE_MASK (separate)", GL_STENCIL_BACK_VALUE_MASK, GL_FRONT_AND_BACK))); 28273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilWriteMaskTestCase (m_context, verifier, (std::string("stencil_writemask") + verifier->getTestNamePostfix()).c_str(), "STENCIL_WRITEMASK", GL_STENCIL_WRITEMASK))); 28283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilWriteMaskTestCase (m_context, verifier, (std::string("stencil_back_writemask") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_WRITEMASK", GL_STENCIL_BACK_WRITEMASK))); 28293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilWriteMaskSeparateTestCase (m_context, verifier, (std::string("stencil_writemask_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_WRITEMASK (separate)", GL_STENCIL_WRITEMASK, GL_FRONT))); 28303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilWriteMaskSeparateTestCase (m_context, verifier, (std::string("stencil_writemask_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_WRITEMASK (separate)", GL_STENCIL_WRITEMASK, GL_FRONT_AND_BACK))); 28313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilWriteMaskSeparateTestCase (m_context, verifier, (std::string("stencil_back_writemask_separate") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_WRITEMASK (separate)", GL_STENCIL_BACK_WRITEMASK, GL_BACK))); 28323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilWriteMaskSeparateTestCase (m_context, verifier, (std::string("stencil_back_writemask_separate_both") + verifier->getTestNamePostfix()).c_str(), "STENCIL_BACK_WRITEMASK (separate)", GL_STENCIL_BACK_WRITEMASK, GL_FRONT_AND_BACK))); 28333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct PixelStoreState 28353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 28373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 28383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum target; 28393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int initialValue; 28403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } pixelStoreStates[] = 28413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "unpack_image_height","UNPACK_IMAGE_HEIGHT", GL_UNPACK_IMAGE_HEIGHT, 0 }, 28433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "unpack_skip_images", "UNPACK_SKIP_IMAGES", GL_UNPACK_SKIP_IMAGES, 0 }, 28443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "unpack_row_length", "UNPACK_ROW_LENGTH", GL_UNPACK_ROW_LENGTH, 0 }, 28453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "unpack_skip_rows", "UNPACK_SKIP_ROWS", GL_UNPACK_SKIP_ROWS, 0 }, 28463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "unpack_skip_pixels", "UNPACK_SKIP_PIXELS", GL_UNPACK_SKIP_PIXELS, 0 }, 28473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "pack_row_length", "PACK_ROW_LENGTH", GL_PACK_ROW_LENGTH, 0 }, 28483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "pack_skip_rows", "PACK_SKIP_ROWS", GL_PACK_SKIP_ROWS, 0 }, 28493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "pack_skip_pixels", "PACK_SKIP_PIXELS", GL_PACK_SKIP_PIXELS, 0 } 28503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 28513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(pixelStoreStates); testNdx++) 28523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new PixelStoreTestCase(m_context, verifier, (std::string(pixelStoreStates[testNdx].name) + verifier->getTestNamePostfix()).c_str(), pixelStoreStates[testNdx].description, pixelStoreStates[testNdx].target, pixelStoreStates[testNdx].initialValue))); 28543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new PixelStoreAlignTestCase(m_context, verifier, (std::string("unpack_alignment") + verifier->getTestNamePostfix()).c_str(), "UNPACK_ALIGNMENT", GL_UNPACK_ALIGNMENT))); 28573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new PixelStoreAlignTestCase(m_context, verifier, (std::string("pack_alignment") + verifier->getTestNamePostfix()).c_str(), "PACK_ALIGNMENT", GL_PACK_ALIGNMENT))); 28583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct BlendColorState 28603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 28623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 28633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum target; 28643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int initialValue; 28653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } blendColorStates[] = 28663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blend_src_rgb", "BLEND_SRC_RGB", GL_BLEND_SRC_RGB, GL_ONE }, 28683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blend_src_alpha", "BLEND_SRC_ALPHA", GL_BLEND_SRC_ALPHA, GL_ONE }, 28693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blend_dst_rgb", "BLEND_DST_RGB", GL_BLEND_DST_RGB, GL_ZERO }, 28703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blend_dst_alpha", "BLEND_DST_ALPHA", GL_BLEND_DST_ALPHA, GL_ZERO } 28713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 28723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(blendColorStates); testNdx++) 28733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new BlendFuncTestCase (m_context, verifier, (std::string(blendColorStates[testNdx].name) + verifier->getTestNamePostfix()).c_str(), blendColorStates[testNdx].description, blendColorStates[testNdx].target, blendColorStates[testNdx].initialValue))); 28753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new BlendFuncSeparateTestCase (m_context, verifier, (std::string(blendColorStates[testNdx].name) + "_separate" + verifier->getTestNamePostfix()).c_str(), blendColorStates[testNdx].description, blendColorStates[testNdx].target, blendColorStates[testNdx].initialValue))); 28763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct BlendEquationState 28793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 28813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 28823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum target; 28833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int initialValue; 28843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } blendEquationStates[] = 28853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blend_equation_rgb", "BLEND_EQUATION_RGB", GL_BLEND_EQUATION_RGB, GL_FUNC_ADD }, 28873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "blend_equation_alpha", "BLEND_EQUATION_ALPHA", GL_BLEND_EQUATION_ALPHA, GL_FUNC_ADD } 28883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 28893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(blendEquationStates); testNdx++) 28903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new BlendEquationTestCase (m_context, verifier, (std::string(blendEquationStates[testNdx].name) + + verifier->getTestNamePostfix()).c_str(), blendEquationStates[testNdx].description, blendEquationStates[testNdx].target, blendEquationStates[testNdx].initialValue))); 28923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new BlendEquationSeparateTestCase (m_context, verifier, (std::string(blendEquationStates[testNdx].name) + "_separate" + verifier->getTestNamePostfix()).c_str(), blendEquationStates[testNdx].description, blendEquationStates[testNdx].target, blendEquationStates[testNdx].initialValue))); 28933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct ImplementationArrayReturningState 28963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 28983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 28993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum target; 29003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum targetLengthTarget; 29013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int minLength; 29023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } implementationArrayReturningStates[] = 29033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "compressed_texture_formats", "COMPRESSED_TEXTURE_FORMATS", GL_COMPRESSED_TEXTURE_FORMATS, GL_NUM_COMPRESSED_TEXTURE_FORMATS, 10 }, 29053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "program_binary_formats", "PROGRAM_BINARY_FORMATS", GL_PROGRAM_BINARY_FORMATS, GL_NUM_PROGRAM_BINARY_FORMATS, 0 }, 29063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "shader_binary_formats", "SHADER_BINARY_FORMATS", GL_SHADER_BINARY_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, 0 } 29073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 29083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(implementationArrayReturningStates); testNdx++) 29093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ImplementationArrayTestCase(m_context, verifier, (std::string(implementationArrayReturningStates[testNdx].name) + verifier->getTestNamePostfix()).c_str(), implementationArrayReturningStates[testNdx].description, implementationArrayReturningStates[testNdx].target, implementationArrayReturningStates[testNdx].targetLengthTarget, implementationArrayReturningStates[testNdx].minLength))); 29113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct BufferBindingState 29143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 29163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 29173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum target; 29183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum type; 29193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } bufferBindingStates[] = 29203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "array_buffer_binding", "ARRAY_BUFFER_BINDING", GL_ARRAY_BUFFER_BINDING, GL_ARRAY_BUFFER }, 29223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "uniform_buffer_binding", "UNIFORM_BUFFER_BINDING", GL_UNIFORM_BUFFER_BINDING, GL_UNIFORM_BUFFER }, 29233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "pixel_pack_buffer_binding", "PIXEL_PACK_BUFFER_BINDING", GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_PACK_BUFFER }, 29243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "pixel_unpack_buffer_binding", "PIXEL_UNPACK_BUFFER_BINDING", GL_PIXEL_UNPACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER }, 29253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "transform_feedback_buffer_binding", "TRANSFORM_FEEDBACK_BUFFER_BINDING", GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER}, 29263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "copy_read_buffer_binding", "COPY_READ_BUFFER_BINDING", GL_COPY_READ_BUFFER_BINDING, GL_COPY_READ_BUFFER }, 29273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "copy_write_buffer_binding", "COPY_WRITE_BUFFER_BINDING", GL_COPY_WRITE_BUFFER_BINDING, GL_COPY_WRITE_BUFFER } 29283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 29293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(bufferBindingStates); testNdx++) 29303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new BufferBindingTestCase(m_context, verifier, (std::string(bufferBindingStates[testNdx].name) + verifier->getTestNamePostfix()).c_str(), bufferBindingStates[testNdx].description, bufferBindingStates[testNdx].target, bufferBindingStates[testNdx].type))); 29323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ElementArrayBufferBindingTestCase (m_context, verifier, (std::string("element_array_buffer_binding") + verifier->getTestNamePostfix()).c_str()))); 29353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new TransformFeedbackBindingTestCase (m_context, verifier, (std::string("transform_feedback_binding") + verifier->getTestNamePostfix()).c_str()))); 29363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new CurrentProgramBindingTestCase (m_context, verifier, (std::string("current_program_binding") + verifier->getTestNamePostfix()).c_str(), "CURRENT_PROGRAM"))); 29373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new VertexArrayBindingTestCase (m_context, verifier, (std::string("vertex_array_binding") + verifier->getTestNamePostfix()).c_str(), "VERTEX_ARRAY_BINDING"))); 29383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new StencilClearValueTestCase (m_context, verifier, (std::string("stencil_clear_value") + verifier->getTestNamePostfix()).c_str(), "STENCIL_CLEAR_VALUE"))); 29393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ActiveTextureTestCase (m_context, verifier, (std::string("active_texture") + verifier->getTestNamePostfix()).c_str(), "ACTIVE_TEXTURE"))); 29403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new RenderbufferBindingTestCase (m_context, verifier, (std::string("renderbuffer_binding") + verifier->getTestNamePostfix()).c_str(), "RENDERBUFFER_BINDING"))); 29413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new SamplerObjectBindingTestCase (m_context, verifier, (std::string("sampler_binding") + verifier->getTestNamePostfix()).c_str(), "SAMPLER_BINDING"))); 29423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct TextureBinding 29443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 29463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 29473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum target; 29483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum type; 29493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } textureBindings[] = 29503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "texture_binding_2d", "TEXTURE_BINDING_2D", GL_TEXTURE_BINDING_2D, GL_TEXTURE_2D }, 29523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "texture_binding_3d", "TEXTURE_BINDING_3D", GL_TEXTURE_BINDING_3D, GL_TEXTURE_3D }, 29533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "texture_binding_2d_array", "TEXTURE_BINDING_2D_ARRAY", GL_TEXTURE_BINDING_2D_ARRAY, GL_TEXTURE_2D_ARRAY }, 29543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "texture_binding_cube_map", "TEXTURE_BINDING_CUBE_MAP", GL_TEXTURE_BINDING_CUBE_MAP, GL_TEXTURE_CUBE_MAP } 29553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 29563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(textureBindings); testNdx++) 29583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new TextureBindingTestCase(m_context, verifier, (std::string(textureBindings[testNdx].name) + verifier->getTestNamePostfix()).c_str(), textureBindings[testNdx].description, textureBindings[testNdx].target, textureBindings[testNdx].type))); 29603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new FrameBufferBindingTestCase (m_context, verifier, (std::string("framebuffer_binding") + verifier->getTestNamePostfix()).c_str(), "DRAW_FRAMEBUFFER_BINDING and READ_FRAMEBUFFER_BINDING"))); 29643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ImplementationColorReadTestCase (m_context, verifier, (std::string("implementation_color_read") + verifier->getTestNamePostfix()).c_str(), "IMPLEMENTATION_COLOR_READ_TYPE and IMPLEMENTATION_COLOR_READ_FORMAT"))); 29653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new ReadBufferCase (m_context, verifier, (std::string("read_buffer") + verifier->getTestNamePostfix()).c_str(), "READ_BUFFER"))); 29663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(normalVerifiers, addChild(new DrawBufferCase (m_context, verifier, (std::string("draw_buffer") + verifier->getTestNamePostfix()).c_str(), "DRAW_BUFFER"))); 29673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 29683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid IntegerStateQueryTests::deinit (void) 29703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 29713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierBoolean) 29723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierBoolean; 29743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierBoolean = DE_NULL; 29753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierInteger) 29773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierInteger; 29793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierInteger = DE_NULL; 29803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierInteger64) 29823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierInteger64; 29843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierInteger64 = DE_NULL; 29853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierFloat) 29873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierFloat; 29893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierFloat = DE_NULL; 29903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry this->TestCaseGroup::deinit(); 29933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 29943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 29963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles3 29973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 2998