1833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/*------------------------------------------------------------------------- 2833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* OpenGL Conformance Test Suite 3833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* ----------------------------- 4833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 5833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* Copyright (c) 2017 The Khronos Group Inc. 6833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 7833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* Licensed under the Apache License, Version 2.0 (the "License"); 8833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* you may not use this file except in compliance with the License. 9833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* You may obtain a copy of the License at 10833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 11833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* http://www.apache.org/licenses/LICENSE-2.0 12833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 13833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* Unless required by applicable law or agreed to in writing, software 14833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* distributed under the License is distributed on an "AS IS" BASIS, 15833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* See the License for the specific language governing permissions and 17833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* limitations under the License. 18833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 19833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ /*! 20833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* \file glcPolygonOffsetClampTests.cpp 21833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* \brief Conformance tests for the EXT_polygon_offset_clamp functionality. 22833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ /*-------------------------------------------------------------------*/ 23833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 24833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include "glcPolygonOffsetClampTests.hpp" 25833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include "gluContextInfo.hpp" 26833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include "gluShaderProgram.hpp" 27833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include "glwEnums.hpp" 28833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include "tcuRenderTarget.hpp" 29833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include "tcuTestLog.hpp" 30833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 31833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski#include <stdio.h> 32833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 33833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiusing namespace glw; 34833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiusing namespace glu; 35833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 36833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskinamespace glcts 37833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 38833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 39833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiconst char* poc_shader_version_450core = "#version 450 core\n\n"; 40833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiconst char* poc_shader_version_310es = "#version 310 es\n\n"; 41833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 42833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiconst char* poc_vertexColor = "in highp vec3 vertex;\n" 43833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "\n" 44833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "void main()\n" 45833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "{\n" 46833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " gl_Position = vec4(vertex, 1);\n" 47833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "}\n"; 48833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 49833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiconst char* poc_fragmentColor = "out highp vec4 fragColor;\n" 50833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "\n" 51833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "void main()\n" 52833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "{\n" 53833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " fragColor = vec4(1, 1, 1, 1);\n" 54833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "}\n"; 55833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 56833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiconst char* poc_vertexTexture = "in highp vec3 vertex;\n" 57833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "in highp vec2 texCoord;\n" 58833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "out highp vec2 varyingtexCoord;\n" 59833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "\n" 60833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "void main()\n" 61833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "{\n" 62833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " gl_Position = vec4(vertex, 1);\n" 63833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " varyingtexCoord = texCoord;\n" 64833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "}\n"; 65833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 66833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskiconst char* poc_fragmentTexture = "in highp vec2 varyingtexCoord;\n" 67833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "out highp vec4 fragColor;\n" 68833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "\n" 69833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "layout (location = 0) uniform highp sampler2D tex;\n" 70833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "\n" 71833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "void main()\n" 72833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "{\n" 73833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " highp vec4 v = texture(tex, varyingtexCoord);\n" 74833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " int r = int(v.r * 65536.0) % 256;\n" 75833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " int g = int(v.r * 65536.0) / 256;\n" 76833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski " fragColor = vec4(float(r) / 255.0, float(g) / 255.0, 0.0, 1.0);\n" 77833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "}\n"; 78833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 79833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Constructor. 80833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 81833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param context Rendering context 82833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param name Test name 83833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param description Test description 84833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ 85833a9d392044464e0271ae9c4bc4a262193f24b4Filip DemczewskiPolygonOffsetClampTestCaseBase::PolygonOffsetClampTestCaseBase(deqp::Context& context, const char* name, 86833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski const char* description) 87833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski : TestCase(context, name, description) 88833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 895e30a0c40b29675e3503ce94018e53bd4cf705bfPiotr Byszewski glu::ContextType contextType = m_context.getRenderContext().getType(); 905e30a0c40b29675e3503ce94018e53bd4cf705bfPiotr Byszewski m_extensionSupported = glu::contextSupports(contextType, glu::ApiType::core(4, 6)); 915e30a0c40b29675e3503ce94018e53bd4cf705bfPiotr Byszewski m_extensionSupported |= context.getContextInfo().isExtensionSupported("GL_EXT_polygon_offset_clamp"); 925e30a0c40b29675e3503ce94018e53bd4cf705bfPiotr Byszewski m_extensionSupported |= context.getContextInfo().isExtensionSupported("GL_ARB_polygon_offset_clamp"); 93833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 94833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 95833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskitcu::TestNode::IterateResult PolygonOffsetClampTestCaseBase::iterate() 96833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 97833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (!m_extensionSupported) 98833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 99833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "Not supported"); 100833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return STOP; 101833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 102833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 103833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski test(m_context.getRenderContext().getFunctions()); 104833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 105833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return STOP; 106833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 107833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 108833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Constructor. 109833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 110833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param context Rendering context 111833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ 112833a9d392044464e0271ae9c4bc4a262193f24b4Filip DemczewskiPolygonOffsetClampAvailabilityTestCase::PolygonOffsetClampAvailabilityTestCase(deqp::Context& context) 113833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski : PolygonOffsetClampTestCaseBase(context, "PolygonOffsetClampAvailability", 114833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "Verifies if queries for GL_EXT_polygon_offset_clamp extension works properly") 115833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 116833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 117833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 118833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClampAvailabilityTestCase::test(const glw::Functions& gl) 119833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 120833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 121833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski glw::GLboolean data; 122833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.getBooleanv(GL_POLYGON_OFFSET_CLAMP_EXT, &data); 123833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getBooleanv error occurred"); 124833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 125833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 126833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski glw::GLint data; 127833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.getIntegerv(GL_POLYGON_OFFSET_CLAMP_EXT, &data); 128833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getBooleanv error occurred"); 129833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 130833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 131833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski glw::GLint64 data; 132833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.getInteger64v(GL_POLYGON_OFFSET_CLAMP_EXT, &data); 133833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getBooleanv error occurred"); 134833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 135833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 136833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski glw::GLfloat data; 137833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.getFloatv(GL_POLYGON_OFFSET_CLAMP_EXT, &data); 138833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getBooleanv error occurred"); 139833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 140833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 141833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // OpenGL ES does not support getDoublev query 142833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (glu::isContextTypeGLCore(m_context.getRenderContext().getType())) 143833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 144833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski glw::GLdouble data; 145833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.getDoublev(GL_POLYGON_OFFSET_CLAMP_EXT, &data); 146833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getBooleanv error occurred"); 147833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 148833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 149c1748560576961295f54e25197f72e625bf3b239Alexander Galazin gl.polygonOffsetClamp(1.0f, 1.0f, 0.5f); 150c1748560576961295f54e25197f72e625bf3b239Alexander Galazin GLU_EXPECT_NO_ERROR(gl.getError(), "polygonOffsetClamp error occurred"); 151833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 152833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 153833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 154833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 155833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Constructor. 156833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 157833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param context Rendering context 158833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ 159833a9d392044464e0271ae9c4bc4a262193f24b4Filip DemczewskiPolygonOffsetClampValueTestCaseBase::PolygonOffsetClampValueTestCaseBase(deqp::Context& context, const char* name, 160833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski const char* description) 161833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski : PolygonOffsetClampTestCaseBase(context, name, description) 162833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski , m_fbo(0) 163833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski , m_depthBuf(0) 164833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski , m_colorBuf(0) 165833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski , m_fboReadback(0) 166833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski , m_colorBufReadback(0) 167833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 168833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 169833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 170833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Initialization method that creates framebuffer with depth attachment 171833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 172833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClampValueTestCaseBase::init() 173833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 174833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 175833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 176833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genTextures(1, &m_depthBuf); 177833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "genTextures"); 178833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindTexture(GL_TEXTURE_2D, m_depthBuf); 179833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindTexture"); 180833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texStorage2D(GL_TEXTURE_2D, 1, GL_DEPTH_COMPONENT16, 64, 64); 181833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texStorage2D"); 182833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 183833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteri"); 184833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 185833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteri"); 186833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 187833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genTextures(1, &m_colorBuf); 188833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "genTextures"); 189833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindTexture(GL_TEXTURE_2D, m_colorBuf); 190833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindTexture"); 191833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 64, 64); 192833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texStorage2D"); 193833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 194833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteri"); 195833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 196833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteri"); 197833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 198833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genFramebuffers(1, &m_fbo); 199833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "genFramebuffers"); 200833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 201833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindFramebuffer"); 202833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthBuf, 0); 203833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "framebufferTexture2D"); 204833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuf, 0); 205833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "framebufferTexture2D"); 206833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 207833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (!glu::isContextTypeGLCore(m_context.getRenderContext().getType())) 208833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 209833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genTextures(1, &m_colorBufReadback); 210833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "genTextures"); 211833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindTexture(GL_TEXTURE_2D, m_colorBufReadback); 212833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindTexture"); 213833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 64, 64); 214833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texStorage2D"); 215833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 216833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteri"); 217833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 218833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteri"); 219833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 220833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genFramebuffers(1, &m_fboReadback); 221833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "genFramebuffers"); 222833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fboReadback); 223833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindFramebuffer"); 224833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBufReadback, 0); 225833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "framebufferTexture2D"); 226833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 227833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 228833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.viewport(0, 0, 64, 64); 229833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 230833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 231833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** De-Initialization method that releases 232833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 233833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClampValueTestCaseBase::deinit() 234833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 235833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 236833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 237833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, 0); 238833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindFramebuffer"); 239833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 240833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (m_fbo) 241833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteFramebuffers(1, &m_fbo); 242833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (m_depthBuf) 243833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteTextures(1, &m_depthBuf); 244833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (m_colorBuf) 245833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteTextures(1, &m_colorBuf); 246833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 247833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (!glu::isContextTypeGLCore(m_context.getRenderContext().getType())) 248833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 249833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (m_colorBufReadback) 250833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteTextures(1, &m_colorBufReadback); 251833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (m_fboReadback) 252833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteFramebuffers(1, &m_fboReadback); 253833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 254833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 255833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 256833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Testing method that verifies if depth values generated after polygon offset clamp are as expected. 257833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * 258833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * @param gl Function bindings 259833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 260833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClampValueTestCaseBase::test(const glw::Functions& gl) 261833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 262833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski const GLfloat vertices[] = { -1.0f, -1.0f, 0.5f, -1.0f, 1.0f, 0.5f, 1.0f, -1.0f, 0.5f, 1.0f, 1.0f, 0.5f }; 263833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 264833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Prepare shader program 265833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski std::string vertexColor; 266833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski std::string fragmentColor; 267833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (glu::isContextTypeGLCore(m_context.getRenderContext().getType())) 268833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski vertexColor = std::string(poc_shader_version_450core); 269833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski else 270833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski vertexColor = std::string(poc_shader_version_310es); 271833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski fragmentColor = vertexColor; 272833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 273833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski vertexColor = vertexColor + poc_vertexColor; 274833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski fragmentColor = fragmentColor + poc_fragmentColor; 275833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 276833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski ProgramSources testSources = makeVtxFragSources(vertexColor, fragmentColor); 277833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski ShaderProgram testProgram(gl, testSources); 278833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 279833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (!testProgram.isOk()) 280833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 281833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.getLog() << tcu::TestLog::Message << "TestProgram build failed.\n" 282833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Vertex: " << testProgram.getShaderInfo(SHADERTYPE_VERTEX).infoLog << "\n" 283833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Fragment: " << testProgram.getShaderInfo(SHADERTYPE_FRAGMENT).infoLog << "\n" 284833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Program: " << testProgram.getProgramInfo().infoLog << tcu::TestLog::EndMessage; 285833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 286833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 287833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return; 288833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 289833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 290833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski ShaderProgram* readDepthProgram = DE_NULL; 291833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLuint readDepthProgramId = 0; 292833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 293833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Prepare shader program for reading depth buffer indirectly 294833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (!glu::isContextTypeGLCore(m_context.getRenderContext().getType())) 295833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 296833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski std::string vertexTexture = std::string(poc_shader_version_310es) + poc_vertexTexture; 297833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski std::string fragmentTexture = std::string(poc_shader_version_310es) + poc_fragmentTexture; 298833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 299833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski ProgramSources readDepthSources = makeVtxFragSources(vertexTexture, fragmentTexture); 300833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 301833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski readDepthProgram = new ShaderProgram(gl, readDepthSources); 302833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 303833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (!readDepthProgram->isOk()) 304833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 305833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.getLog() << tcu::TestLog::Message << "ReadDepthProgram build failed.\n" 306833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Vertex: " << readDepthProgram->getShaderInfo(SHADERTYPE_VERTEX).infoLog << "\n" 307833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Fragment: " << readDepthProgram->getShaderInfo(SHADERTYPE_FRAGMENT).infoLog << "\n" 308833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Program: " << readDepthProgram->getProgramInfo().infoLog << tcu::TestLog::EndMessage; 309833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 310833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 311833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return; 312833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 313833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 314833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski readDepthProgramId = readDepthProgram->getProgram(); 315833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 316833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 317833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.useProgram(testProgram.getProgram()); 318833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram"); 319833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 320833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLuint vao; 321833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLuint arrayBuffer; 322833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 323833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Setup depth testing 324833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.enable(GL_DEPTH_TEST); 325833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable"); 326833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 327833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.depthFunc(GL_ALWAYS); 328833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc"); 329833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 330833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Generate vertex array object 331833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genVertexArrays(1, &vao); 332833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glGenVertexArrays"); 333833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 334833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindVertexArray(vao); 335833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray"); 336833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 337833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Setup vertex array buffer 338833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.genBuffers(1, &arrayBuffer); 339833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glGenBuffers"); 340833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 341833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindBuffer(GL_ARRAY_BUFFER, arrayBuffer); 342833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer"); 343833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 344833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); 345833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBufferData"); 346833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 347833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Setup vertex attrib pointer 348833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.enableVertexAttribArray(0); 349833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray"); 350833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 351833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.vertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); 352833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer"); 353833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 354833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Bind framebuffer for drawing 355833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 356833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer"); 357833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 358833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski bool result = true; 35942d218eb376986969507b5a0693dd444c27f6aceAdam Czupryna for (GLuint i = 0; i < m_testValues.size(); ++i) 360833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 361833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Prepare verification variables 362833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLfloat depthValue = 0.0f; 363833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLfloat depthValueOffset = 0.0f; 364833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLfloat depthValueOffsetClamp = 0.0f; 365833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 366833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Draw reference polygon 367833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.disable(GL_POLYGON_OFFSET_FILL); 368833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDisable"); 369833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 370833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 371833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glClear"); 372833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 373833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.drawArrays(GL_TRIANGLE_STRIP, 0, 4); 374833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays"); 375833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 376833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Get reference depth value 377833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski depthValue = readDepthValue(gl, readDepthProgramId); 378833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 379833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Draw polygon with depth offset 380833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.enable(GL_POLYGON_OFFSET_FILL); 381833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable"); 382833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 383833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 384833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer"); 385833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 386833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.polygonOffset(m_testValues[i].factor, m_testValues[i].units); 387833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glPolygonOffset"); 388833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 389833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.drawArrays(GL_TRIANGLE_STRIP, 0, 4); 390833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays"); 391833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 392833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski depthValueOffset = readDepthValue(gl, readDepthProgramId); 393833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 394833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Draw reference polygon 395833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.disable(GL_POLYGON_OFFSET_FILL); 396833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDisable"); 397833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 398833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 399833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer"); 400833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 401833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 402833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glClear"); 403833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 404833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.drawArrays(GL_TRIANGLE_STRIP, 0, 4); 405833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays"); 406833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 407833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Draw polygon with depth offset 408833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.enable(GL_POLYGON_OFFSET_FILL); 409833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable"); 410833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 411c1748560576961295f54e25197f72e625bf3b239Alexander Galazin gl.polygonOffsetClamp(m_testValues[i].factor, m_testValues[i].units, m_testValues[i].clamp); 4125e30a0c40b29675e3503ce94018e53bd4cf705bfPiotr Byszewski GLU_EXPECT_NO_ERROR(gl.getError(), "glPolygonOffsetClamp"); 413833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 414833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.drawArrays(GL_TRIANGLE_STRIP, 0, 4); 415833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays"); 416833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 417833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski depthValueOffsetClamp = readDepthValue(gl, readDepthProgramId); 418833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 419833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Verify results 420833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski result = result && verify(i, depthValue, depthValueOffset, depthValueOffsetClamp); 421833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 422833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 423833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Cleanup 424833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.disableVertexAttribArray(0); 425833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDisableVertexAttribArray"); 426833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 427833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteVertexArrays(1, &arrayBuffer); 428833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteVertexArrays"); 429833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 430833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.deleteVertexArrays(1, &vao); 431833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteVertexArrays"); 432833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 433833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.disable(GL_POLYGON_OFFSET_FILL); 434833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDisable"); 435833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 436833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (readDepthProgram) 437833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski delete readDepthProgram; 438833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 439833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (result) 440833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 441833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski else 442833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 443833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 444833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 445833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Method . 446833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * 447833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * @param gl Function bindings 448833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 449833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskifloat PolygonOffsetClampValueTestCaseBase::readDepthValue(const glw::Functions& gl, const GLuint readDepthProgramId) 450833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 451833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLfloat depthValue = 0.0f; 452833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 453833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (glu::isContextTypeGLCore(m_context.getRenderContext().getType())) 454833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 455833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.readPixels(0, 0, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depthValue); 456833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glReadPixels"); 457833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 458833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // OpenGL ES does not support reading pixels directly from depth buffer 459833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski else 460833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 461833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Bind framebuffer for readback 462833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fboReadback); 463833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer"); 464833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 465833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.disable(GL_DEPTH_TEST); 466833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDisable"); 467833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 468833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.useProgram(readDepthProgramId); 469833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram"); 470833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 471833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.activeTexture(GL_TEXTURE0); 472833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture"); 473833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindTexture(GL_TEXTURE_2D, m_depthBuf); 474833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture"); 475833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.uniform1i(0, 0); 476833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i"); 477833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 478833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.drawArrays(GL_TRIANGLE_STRIP, 0, 4); 479833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays"); 480833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 481833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLubyte pixels[4]; 482833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.readPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 483833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glReadPixels"); 484833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 485833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.enable(GL_DEPTH_TEST); 486833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable"); 487833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 488833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Convert read depth value to GLfloat normalized 489833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski depthValue = (GLfloat)(pixels[0] + pixels[1] * 256) / 0xFFFF; 490833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 491833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Bind framebuffer for drawing 492833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 493833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer"); 494833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 495833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 496833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return depthValue; 497833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 498833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 499833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Constructor. 500833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 501833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param context Rendering context 502833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ 503833a9d392044464e0271ae9c4bc4a262193f24b4Filip DemczewskiPolygonOffsetClampMinMaxTestCase::PolygonOffsetClampMinMaxTestCase(deqp::Context& context) 504833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski : PolygonOffsetClampValueTestCaseBase( 505833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski context, "PolygonOffsetClampMinMax", 506833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "Verifies if polygon offset clamp works as expected for non-zero, finite clamp values") 507833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 508833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 509833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 510833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Initialization method that fills polygonOffset* testing values 511833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 512833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClampMinMaxTestCase::init() 513833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 514833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski PolygonOffsetClampValueTestCaseBase::init(); 515833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 516833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.clear(); 517833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.push_back(PolygonOffsetClampValues(0.0f, -1000.0f, -0.0001f)); // Min offset case 518833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.push_back(PolygonOffsetClampValues(0.0f, 1000.0f, 0.0001f)); // Max offset case 519833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 520833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 521833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Verification method that determines if depth values are as expected 522833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * 523833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * @param caseNo Case iteration number 524833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * @param depth Reference depth value 525833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * @param offsetDepth Case iteration number 526833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski * @param offsetClampDepth Case iteration number 527833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 52842d218eb376986969507b5a0693dd444c27f6aceAdam Czuprynabool PolygonOffsetClampMinMaxTestCase::verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, 529833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLfloat offsetClampDepth) 530833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 531833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Min offset case 532833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (caseNo == 0) 533833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 534833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (depth <= offsetDepth || depth <= offsetClampDepth || offsetDepth >= offsetClampDepth) 535833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 536833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.getLog() << tcu::TestLog::Message << "PolygonOffsetClampEXT failed at MIN offset test.\n" 537833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Expected result: " 538833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "refDepth[" << depth << "] > " 539833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "offsetClampDepth[" << offsetClampDepth << "] > " 540833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "offsetDepth[" << offsetDepth << "]" << tcu::TestLog::EndMessage; 541833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 542833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return false; 543833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 544833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 545833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Max offset case 546833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski else if (caseNo == 1) 547833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 548833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (depth >= offsetDepth || depth >= offsetClampDepth || offsetDepth <= offsetClampDepth) 549833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 550833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.getLog() << tcu::TestLog::Message << "PolygonOffsetClampEXT failed at MAX offset test.\n" 551833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Expected result: " 552833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "refDepth[" << depth << "] < " 553833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "offsetClampDepth[" << offsetClampDepth << "] < " 554833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "offsetDepth[" << offsetDepth << "]" << tcu::TestLog::EndMessage; 555833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 556833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return false; 557833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 558833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 559833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski // Undefined case 560833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski else 561833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return false; 562833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 563833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return true; 564833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 565833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 566833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Constructor. 567833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 568833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param context Rendering context 569833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ 570833a9d392044464e0271ae9c4bc4a262193f24b4Filip DemczewskiPolygonOffsetClampZeroInfinityTestCase::PolygonOffsetClampZeroInfinityTestCase(deqp::Context& context) 571833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski : PolygonOffsetClampValueTestCaseBase( 572833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski context, "PolygonOffsetClampZeroInfinity", 573833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "Verifies if polygon offset clamp works as expected for zero and infinite clamp values") 574833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 575833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 576833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 577833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Initialization method that fills polygonOffset* testing values 578833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski */ 579833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClampZeroInfinityTestCase::init() 580833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 581833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski PolygonOffsetClampValueTestCaseBase::init(); 582833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 583833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.clear(); 584833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.push_back(PolygonOffsetClampValues(0.0f, -1000.0f, 0.0f)); // Min offset, zero clamp case 585833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.push_back(PolygonOffsetClampValues(0.0f, -1000.0f, -INFINITY)); // Min Offset, infinity clamp case 586833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.push_back(PolygonOffsetClampValues(0.0f, 1000.0f, 0.0f)); // Max offset, zero clamp case 587833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testValues.push_back(PolygonOffsetClampValues(0.0f, 1000.0f, INFINITY)); // Max Offset, infinity clamp case 588833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 589833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 59042d218eb376986969507b5a0693dd444c27f6aceAdam Czuprynabool PolygonOffsetClampZeroInfinityTestCase::verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, 591833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski GLfloat offsetClampDepth) 592833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 593833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski DE_UNREF(caseNo); 594833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 595833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski if (depth == offsetDepth || depth == offsetClampDepth || offsetDepth != offsetClampDepth) 596833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski { 597833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski m_testCtx.getLog() << tcu::TestLog::Message 598833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "PolygonOffsetClampEXT failed at Zero/Infinity offset clamp test.\n" 599833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "Expected result: " 600833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "refDepth[" << depth << "] != " 601833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "(offsetClampDepth[" << offsetClampDepth << "] == " 602833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski << "offsetDepth[" << offsetDepth << "])" << tcu::TestLog::EndMessage; 603833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 604833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return false; 605833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski } 606833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 607833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski return true; 608833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 609833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 610833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Constructor. 611833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* 612833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski* @param context Rendering context. 613833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski*/ 614833a9d392044464e0271ae9c4bc4a262193f24b4Filip DemczewskiPolygonOffsetClamp::PolygonOffsetClamp(deqp::Context& context) 615833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski : TestCaseGroup(context, "polygon_offset_clamp", 616833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski "Verify conformance of CTS_EXT_polygon_offset_clamp implementation") 617833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 618833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 619833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski 620833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski/** Initializes the test group contents. */ 621833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewskivoid PolygonOffsetClamp::init() 622833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski{ 623833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski addChild(new PolygonOffsetClampAvailabilityTestCase(m_context)); 624833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski addChild(new PolygonOffsetClampMinMaxTestCase(m_context)); 625833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski addChild(new PolygonOffsetClampZeroInfinityTestCase(m_context)); 626833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} 627833a9d392044464e0271ae9c4bc4a262193f24b4Filip Demczewski} /* glcts namespace */ 628