13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 2.0 Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Float State Query tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es2fFloatStateQueryTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsStateQueryUtil.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es2fApiCase.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuRenderTarget.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuFormatUtil.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deRandom.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deMath.h" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <limits> 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glw; // GLint and other GL types 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace deqp::gls; 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing deqp::gls::StateQueryUtil::StateQueryMemoryWriteGuard; 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles2 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace FloatStateQueryVerifiers 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyryconst int FLOAT_EXPANSION_E = 0x03FF; // 10 bits error allowed, requires 22 accurate bits 52b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyryconst int FLOAT_EXPANSION_E_64 = 0x07FF; 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 543c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLint64 expandGLFloatToInteger (GLfloat f) 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLuint64 referenceValue = (GLint64)((f * double(0xFFFFFFFFULL) - 1) / 2); 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return referenceValue; 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 603c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLint clampToGLint (GLint64 val) 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return (GLint)de::clamp<GLint64>(val, std::numeric_limits<GLint>::min(), std::numeric_limits<GLint>::max()); 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// StateVerifier 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StateVerifier : protected glu::CallLogWrapper 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier (const glw::Functions& gl, tcu::TestLog& log, const char* testNamePostfix); 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~StateVerifier (); // make GCC happy 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* getTestNamePostfix (void) const; 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference) = DE_NULL; 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // "Expanded" == Float to int conversion converts from [-1.0 to 1.0] -> [MIN_INT MAX_INT] 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference) = DE_NULL; 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1) = DE_NULL; 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3) = DE_NULL; 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // verify that the given range is completely whitin the GL state range 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max) = DE_NULL; 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* const m_testNamePostfix; 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 913c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateVerifier::StateVerifier (const glw::Functions& gl, tcu::TestLog& log, const char* testNamePostfix) 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : glu::CallLogWrapper (gl, log) 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_testNamePostfix (testNamePostfix) 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enableLogging(true); 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 983c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateVerifier::~StateVerifier () 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* StateVerifier::getTestNamePostfix (void) const 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_testNamePostfix; 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// GetBooleanVerifier 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetBooleanVerifier : public StateVerifier 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetBooleanVerifier (const glw::Functions& gl, tcu::TestLog& log); 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1); 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3); 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max); 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1203c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetBooleanVerifier::GetBooleanVerifier (const glw::Functions& gl, tcu::TestLog& log) 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getboolean") 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean> state; 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, &state); 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean expectedGLState = reference ? GL_TRUE : GL_FALSE; 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state != expectedGLState) 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1393c827367444ee418f129b2c238299f49d3264554Jarkko 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; 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference, -1.0f, 1.0f)); 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyFloat(testCtx, name, reference); 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1) 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f)); 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f)); 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean referenceAsGLBoolean[] = 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference0 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE), 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference1 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE), 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean[2]> boolVector2; 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, boolVector2); 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!boolVector2.verifyValidity(testCtx)) 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (boolVector2[0] != referenceAsGLBoolean[0] || 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry boolVector2[1] != referenceAsGLBoolean[1]) 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (boolVector2[0] ? "GL_TRUE" : "GL_FALSE") << " " 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (boolVector2[1] ? "GL_TRUE" : "GL_FALSE") << " " 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << TestLog::EndMessage; 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3) 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLboolean referenceAsGLBoolean[] = 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference0 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE), 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference1 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE), 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference2 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE), 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry reference3 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE), 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean[4]> boolVector4; 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, boolVector4); 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!boolVector4.verifyValidity(testCtx)) 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (boolVector4[0] != referenceAsGLBoolean[0] || 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry boolVector4[1] != referenceAsGLBoolean[1] || 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry boolVector4[2] != referenceAsGLBoolean[2] || 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry boolVector4[3] != referenceAsGLBoolean[3]) 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (referenceAsGLBoolean[0] ? "GL_TRUE" : "GL_FALSE") << " " 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (referenceAsGLBoolean[1] ? "GL_TRUE" : "GL_FALSE") << " " 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (referenceAsGLBoolean[2] ? "GL_TRUE" : "GL_FALSE") << " " 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (referenceAsGLBoolean[3] ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value"); 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetBooleanVerifier::verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max) 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLboolean[2]> range; 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBooleanv(name, range); 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!range.verifyValidity(testCtx)) 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (range[0] == GL_FALSE) 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (max < 0 || min < 0) 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: range [" << min << ", " << max << "] is not in range [" << (range[0] == GL_TRUE ? "GL_TRUE" : (range[0] == GL_FALSE ? "GL_FALSE" : "non-boolean")) << ", " << (range[1] == GL_TRUE ? "GL_TRUE" : (range[1] == GL_FALSE ? "GL_FALSE" : "non-boolean")) << "]" << TestLog::EndMessage; 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean range"); 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (range[1] == GL_FALSE) 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (max > 0 || min > 0) 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: range [" << min << ", " << max << "] is not in range [" << (range[0] == GL_TRUE ? "GL_TRUE" : (range[0] == GL_FALSE ? "GL_FALSE" : "non-boolean")) << ", " << (range[1] == GL_TRUE ? "GL_TRUE" : (range[1] == GL_FALSE ? "GL_FALSE" : "non-boolean")) << "]" << TestLog::EndMessage; 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean range"); 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//GetIntegerVerifier 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetIntegerVerifier : public StateVerifier 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetIntegerVerifier (const glw::Functions& gl, tcu::TestLog& log); 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1); 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3); 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max); 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2623c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetIntegerVerifier::GetIntegerVerifier (const glw::Functions& gl, tcu::TestLog& log) 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getinteger") 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint expectedGLStateMax = StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint>(reference); 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint expectedGLStateMin = StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint>(reference); 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < expectedGLStateMin || state > expectedGLStateMax) 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected rounding to the nearest integer, valid range [" << expectedGLStateMin << "," << expectedGLStateMax << "]; got " << state << TestLog::EndMessage; 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference, -1.0f, 1.0f)); 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::toHex; 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint expectedGLStateMax = clampToGLint(expandGLFloatToInteger(reference) + FLOAT_EXPANSION_E); 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint expectedGLStateMin = clampToGLint(expandGLFloatToInteger(reference) - FLOAT_EXPANSION_E); 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint> state; 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, &state); 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < expectedGLStateMin || state > expectedGLStateMax) 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << toHex(expectedGLStateMin) << "," << toHex(expectedGLStateMax) << "]; got " << toHex((GLint)state) << TestLog::EndMessage; 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1) 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f)); 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f)); 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::toHex; 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint referenceAsGLintMin[] = 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E), 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E) 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint referenceAsGLintMax[] = 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E), 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E) 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint[2]> floatVector2; 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, floatVector2); 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector2.verifyValidity(testCtx)) 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector2[0] < referenceAsGLintMin[0] || floatVector2[0] > referenceAsGLintMax[0] || 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector2[1] < referenceAsGLintMin[1] || floatVector2[1] > referenceAsGLintMax[1]) 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: expected in ranges " 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], " 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "]" 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "; got " 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector2[0]) << ", " 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector2[1]) << " "<< TestLog::EndMessage; 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3) 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::toHex; 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint referenceAsGLintMin[] = 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E), 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E), 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference2) - FLOAT_EXPANSION_E), 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference3) - FLOAT_EXPANSION_E) 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint referenceAsGLintMax[] = 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E), 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E), 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference2) + FLOAT_EXPANSION_E), 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry clampToGLint(expandGLFloatToInteger(reference3) + FLOAT_EXPANSION_E) 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint[4]> floatVector4; 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, floatVector4); 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector4.verifyValidity(testCtx)) 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector4[0] < referenceAsGLintMin[0] || floatVector4[0] > referenceAsGLintMax[0] || 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[1] < referenceAsGLintMin[1] || floatVector4[1] > referenceAsGLintMax[1] || 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[2] < referenceAsGLintMin[2] || floatVector4[2] > referenceAsGLintMax[2] || 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[3] < referenceAsGLintMin[3] || floatVector4[3] > referenceAsGLintMax[3]) 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: expected in ranges " 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], " 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "], " 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[2]) << " " << toHex(referenceAsGLintMax[2]) << "], " 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[3]) << " " << toHex(referenceAsGLintMax[3]) << "]" 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "; got " 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[0]) << ", " 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[1]) << ", " 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[2]) << ", " 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[3]) << " "<< TestLog::EndMessage; 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetIntegerVerifier::verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max) 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint testRangeAsGLint[] = 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint>(min), 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint>(max) 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint[2]> range; 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetIntegerv(name, range); 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!range.verifyValidity(testCtx)) 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // check if test range outside of gl state range 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testRangeAsGLint[0] < range[0] || 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testRangeAsGLint[1] > range[1]) 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: range [" 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << testRangeAsGLint[0] << ", " 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << testRangeAsGLint[1] << "]" 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " is not in range [" 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << range[0] << ", " 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << range[1] << "]" << TestLog::EndMessage; 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer range"); 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//GetInteger64Verifier 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetInteger64Verifier : public StateVerifier 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetInteger64Verifier (const glw::Functions& gl, tcu::TestLog& log); 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1); 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3); 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max); 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4473c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetInteger64Verifier::GetInteger64Verifier (const glw::Functions& gl, tcu::TestLog& log) 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getinteger64") 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 expectedGLStateMax = StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint64>(reference); 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 expectedGLStateMin = StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint64>(reference); 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < expectedGLStateMin || state > expectedGLStateMax) 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected rounding to the nearest integer, valid range [" << expectedGLStateMin << "," << expectedGLStateMax << "]; got " << state << TestLog::EndMessage; 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference, -1.0f, 1.0f)); 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::toHex; 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 480b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry const GLint64 expectedGLStateMax = expandGLFloatToInteger(reference) + FLOAT_EXPANSION_E_64; 481b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry const GLint64 expectedGLStateMin = expandGLFloatToInteger(reference) - FLOAT_EXPANSION_E_64; 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64> state; 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, &state); 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state < expectedGLStateMin || state > expectedGLStateMax) 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << toHex(expectedGLStateMin) << "," << toHex(expectedGLStateMax) << "]; got " << toHex((GLint64)state) << TestLog::EndMessage; 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1) 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f)); 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f)); 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::toHex; 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 referenceAsGLintMin[] = 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 507b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E_64, 508b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E_64 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 referenceAsGLintMax[] = 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 512b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E_64, 513b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E_64 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64[2]> floatVector2; 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, floatVector2); 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector2.verifyValidity(testCtx)) 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector2[0] < referenceAsGLintMin[0] || floatVector2[0] > referenceAsGLintMax[0] || 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector2[1] < referenceAsGLintMin[1] || floatVector2[1] > referenceAsGLintMax[1]) 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: expected in ranges " 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], " 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "]" 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "; got " 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector2[0]) << ", " 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector2[1]) << " "<< TestLog::EndMessage; 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3) 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::toHex; 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 referenceAsGLintMin[] = 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 545b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E_64, 546b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E_64, 547b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference2) - FLOAT_EXPANSION_E_64, 548b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference3) - FLOAT_EXPANSION_E_64 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 referenceAsGLintMax[] = 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 552b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E_64, 553b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E_64, 554b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference2) + FLOAT_EXPANSION_E_64, 555b6017bbcad91d601e38d44c5ce129eb7580e75cbJarkko Pöyry expandGLFloatToInteger(reference3) + FLOAT_EXPANSION_E_64 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64[4]> floatVector4; 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, floatVector4); 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector4.verifyValidity(testCtx)) 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector4[0] < referenceAsGLintMin[0] || floatVector4[0] > referenceAsGLintMax[0] || 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[1] < referenceAsGLintMin[1] || floatVector4[1] > referenceAsGLintMax[1] || 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[2] < referenceAsGLintMin[2] || floatVector4[2] > referenceAsGLintMax[2] || 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[3] < referenceAsGLintMin[3] || floatVector4[3] > referenceAsGLintMax[3]) 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: expected in ranges " 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], " 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "], " 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[2]) << " " << toHex(referenceAsGLintMax[2]) << "], " 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "[" << toHex(referenceAsGLintMin[3]) << " " << toHex(referenceAsGLintMax[3]) << "]" 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "; got " 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[0]) << ", " 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[1]) << ", " 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[2]) << ", " 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << toHex(floatVector4[3]) << " "<< TestLog::EndMessage; 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value"); 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetInteger64Verifier::verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max) 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLint64 testRangeAsGLint[] = 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint64>(min), 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint64>(max) 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLint64[2]> range; 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInteger64v(name, range); 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!range.verifyValidity(testCtx)) 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // check if test range outside of gl state range 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testRangeAsGLint[0] < range[0] || 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testRangeAsGLint[1] > range[1]) 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: range [" 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << testRangeAsGLint[0] << ", " 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << testRangeAsGLint[1] << "]" 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " is not in range [" 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << range[0] << ", " 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << range[1] << "]" << TestLog::EndMessage; 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer range"); 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//GetFloatVerifier 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetFloatVerifier : public StateVerifier 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GetFloatVerifier (const glw::Functions& gl, tcu::TestLog& log); 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference); 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1); 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3); 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max); 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6323c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGetFloatVerifier::GetFloatVerifier (const glw::Functions& gl, tcu::TestLog& log) 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateVerifier(gl, log, "_getfloat") 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyFloat (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat> state; 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, &state); 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!state.verifyValidity(testCtx)) 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (state != reference) 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference << "; got " << state << TestLog::EndMessage; 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyFloatExpanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference) 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference, -1.0f, 1.0f)); 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry verifyFloat(testCtx, name, reference); 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyFloat2Expanded (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1) 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f)); 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f)); 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat[2]> floatVector2; 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, floatVector2); 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector2.verifyValidity(testCtx)) 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector2[0] != reference0 || 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector2[1] != reference1) 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference0 << ", " << reference1 << "; got " << floatVector2[0] << " " << floatVector2[1] << TestLog::EndMessage; 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyFloat4Color (tcu::TestContext& testCtx, GLenum name, GLfloat reference0, GLfloat reference1, GLfloat reference2, GLfloat reference3) 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat[4]> floatVector4; 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, floatVector4); 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector4.verifyValidity(testCtx)) 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector4[0] != reference0 || 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[1] != reference1 || 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[2] != reference2 || 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector4[3] != reference3) 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "// ERROR: expected "<< reference0 << ", " << reference1 << ", " << reference2 << ", " << reference3 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "; got " << floatVector4[0] << ", " << floatVector4[1] << ", " << floatVector4[2] << ", " << floatVector4[3] 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << TestLog::EndMessage; 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value"); 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GetFloatVerifier::verifyFloatRange (tcu::TestContext& testCtx, GLenum name, GLfloat min, GLfloat max) 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using tcu::TestLog; 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateQueryMemoryWriteGuard<GLfloat[2]> floatVector2; 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(name, floatVector2); 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!floatVector2.verifyValidity(testCtx)) 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (floatVector2[0] > min || 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry floatVector2[1] < max) 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << min << ", " << max << "]; got [" << floatVector2[0] << " " << floatVector2[1] << "]" << TestLog::EndMessage; 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (testCtx.getTestResult() == QP_TEST_RESULT_PASS) 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float range"); 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // FloatStateQueryVerifiers 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace FloatStateQueryVerifiers; 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DepthRangeCase : public ApiCase 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DepthRangeCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat2Expanded(m_testCtx, GL_DEPTH_RANGE, 0.0f, 1.0f); 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct FixedTest 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float n, f; 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } fixedTests[] = 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 0.5f, 1.0f }, 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 0.0f, 0.5f }, 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 0.0f, 0.0f }, 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1.0f, 1.0f } 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx) 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDepthRangef(fixedTests[ndx].n, fixedTests[ndx].f); 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat2Expanded(m_testCtx, GL_DEPTH_RANGE, fixedTests[ndx].n, fixedTests[ndx].f); 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLfloat n = rnd.getFloat(0, 1); 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLfloat f = rnd.getFloat(0, 1); 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glDepthRangef(n, f); 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat2Expanded(m_testCtx, GL_DEPTH_RANGE, n, f); 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass LineWidthCase : public ApiCase 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry LineWidthCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLfloat range[2] = {1}; 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range); 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_LINE_WIDTH, 1.0f); 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat reference = rnd.getFloat(range[0], range[1]); 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glLineWidth(reference); 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_LINE_WIDTH, reference); 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PolygonOffsetFactorCase : public ApiCase 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PolygonOffsetFactorCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_FACTOR, 0.0f); 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const float fixedTests[] = 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 0.0f, 0.5f, -0.5f, 1.5f 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx) 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glPolygonOffset(fixedTests[ndx], 0); 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_FACTOR, fixedTests[ndx]); 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat reference = rnd.getFloat(-64000, 64000); 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glPolygonOffset(reference, 0); 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_FACTOR, reference); 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PolygonOffsetUnitsCase : public ApiCase 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PolygonOffsetUnitsCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_UNITS, 0.0f); 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const float fixedTests[] = 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 0.0f, 0.5f, -0.5f, 1.5f 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx) 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glPolygonOffset(0, fixedTests[ndx]); 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_UNITS, fixedTests[ndx]); 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat reference = rnd.getFloat(-64000, 64000); 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glPolygonOffset(0, reference); 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_UNITS, reference); 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SampleCoverageCase : public ApiCase 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SampleCoverageCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, 1.0f); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const float fixedTests[] = 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 0.0f, 0.5f, 0.45f, 0.55f 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx) 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glSampleCoverage(fixedTests[ndx], GL_FALSE); 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, fixedTests[ndx]); 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const float clampTests[] = 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry -1.0f, -1.5f, 1.45f, 3.55f 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(clampTests); ++ndx) 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glSampleCoverage(clampTests[ndx], GL_FALSE); 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, de::clamp(clampTests[ndx], 0.0f, 1.0f)); 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLfloat reference = rnd.getFloat(0, 1); 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLboolean invert = rnd.getBool() ? GL_TRUE : GL_FALSE; 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glSampleCoverage(reference, invert); 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, reference); 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ColorClearCase : public ApiCase 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ColorClearCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note Initial color clear value check is temorarily removed. (until the framework does not alter it) 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry //m_verifier->verifyFloat4Color(m_testCtx, GL_COLOR_CLEAR_VALUE, 0, 0, 0, 0); 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry //expectError(GL_NO_ERROR); 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct FixedTest 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float r, g, b, a; 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } fixedTests[] = 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 0.5f, 1.0f, 0.5f, 1.0f }, 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 0.0f, 0.5f, 0.0f, 0.5f }, 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 0.0f, 0.0f, 0.0f, 0.0f }, 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1.0f, 1.0f, 1.0f, 1.0f }, 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx) 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glClearColor(fixedTests[ndx].r, fixedTests[ndx].g, fixedTests[ndx].b, fixedTests[ndx].a); 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat4Color(m_testCtx, GL_COLOR_CLEAR_VALUE, fixedTests[ndx].r, fixedTests[ndx].g, fixedTests[ndx].b, fixedTests[ndx].a); 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat r = rnd.getFloat(0, 1); 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat g = rnd.getFloat(0, 1); 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat b = rnd.getFloat(0, 1); 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat a = rnd.getFloat(0, 1); 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glClearColor(r, g, b, a); 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloat4Color(m_testCtx, GL_COLOR_CLEAR_VALUE, r, g, b, a); 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DepthClearCase : public ApiCase 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DepthClearCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numIterations = 120; 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0xabcdef); 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloatExpanded(m_testCtx, GL_DEPTH_CLEAR_VALUE, 1); 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < numIterations; ++i) 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const GLfloat ref = rnd.getFloat(0, 1); 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glClearDepthf(ref); 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloatExpanded(m_testCtx, GL_DEPTH_CLEAR_VALUE, ref); 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass AliasedPointSizeRangeCase : public ApiCase 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry AliasedPointSizeRangeCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloatRange(m_testCtx, GL_ALIASED_POINT_SIZE_RANGE, 1, 1); 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass AliasedLineWidthRangeCase : public ApiCase 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry AliasedLineWidthRangeCase (Context& context, StateVerifier* verifier, const char* name, const char* description) 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ApiCase (context, name, description) 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifier (verifier) 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void test (void) 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifier->verifyFloatRange(m_testCtx, GL_ALIASED_LINE_WIDTH_RANGE, 1, 1); 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* m_verifier; 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define FOR_EACH_VERIFIER(VERIFIERS, CODE_BLOCK) \ 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int _verifierNdx = 0; _verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); _verifierNdx++) \ 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { \ 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* verifier = VERIFIERS[_verifierNdx]; \ 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CODE_BLOCK; \ 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11033c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFloatStateQueryTests::FloatStateQueryTests (Context& context) 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup (context, "floats", "Float Values") 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierBoolean (DE_NULL) 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierInteger (DE_NULL) 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_verifierFloat (DE_NULL) 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11113c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFloatStateQueryTests::~FloatStateQueryTests (void) 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deinit(); 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FloatStateQueryTests::init (void) 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierBoolean == DE_NULL); 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierInteger == DE_NULL); 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_verifierFloat == DE_NULL); 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierBoolean = new GetBooleanVerifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierInteger = new GetIntegerVerifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierFloat = new GetFloatVerifier (m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog()); 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateVerifier* verifiers[] = {m_verifierBoolean, m_verifierInteger, m_verifierFloat}; 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new DepthRangeCase (m_context, verifier, (std::string("depth_range") + verifier->getTestNamePostfix()).c_str(), "DEPTH_RANGE"))); 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new LineWidthCase (m_context, verifier, (std::string("line_width") + verifier->getTestNamePostfix()).c_str(), "LINE_WIDTH"))); 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new PolygonOffsetFactorCase (m_context, verifier, (std::string("polygon_offset_factor") + verifier->getTestNamePostfix()).c_str(), "POLYGON_OFFSET_FACTOR"))); 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new PolygonOffsetUnitsCase (m_context, verifier, (std::string("polygon_offset_units") + verifier->getTestNamePostfix()).c_str(), "POLYGON_OFFSET_UNITS"))); 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new SampleCoverageCase (m_context, verifier, (std::string("sample_coverage_value") + verifier->getTestNamePostfix()).c_str(), "SAMPLE_COVERAGE_VALUE"))); 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new ColorClearCase (m_context, verifier, (std::string("color_clear_value") + verifier->getTestNamePostfix()).c_str(), "COLOR_CLEAR_VALUE"))); 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new DepthClearCase (m_context, verifier, (std::string("depth_clear_value") + verifier->getTestNamePostfix()).c_str(), "DEPTH_CLEAR_VALUE"))); 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new AliasedPointSizeRangeCase (m_context, verifier, (std::string("aliased_point_size_range") + verifier->getTestNamePostfix()).c_str(), "ALIASED_POINT_SIZE_RANGE"))); 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FOR_EACH_VERIFIER(verifiers, addChild(new AliasedLineWidthRangeCase (m_context, verifier, (std::string("aliased_line_width_range") + verifier->getTestNamePostfix()).c_str(), "ALIASED_LINE_WIDTH_RANGE"))); 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FloatStateQueryTests::deinit (void) 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierBoolean) 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierBoolean; 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierBoolean = DE_NULL; 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierInteger) 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierInteger; 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierInteger = DE_NULL; 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_verifierFloat) 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_verifierFloat; 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_verifierFloat = DE_NULL; 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry this->TestCaseGroup::deinit(); 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles2 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 1163