#ifndef _GLCPOLYGONOFFSETCLAMPTESTS_HPP #define _GLCPOLYGONOFFSETCLAMPTESTS_HPP /*------------------------------------------------------------------------- * OpenGL Conformance Test Suite * ----------------------------- * * Copyright (c) 2017 The Khronos Group Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ /*! * \file glcPolygonOffsetClampTests.hpp * \brief Conformance tests for the EXT_polygon_offset_clamp functionality. */ /*-------------------------------------------------------------------*/ #include "esextcTestCaseBase.hpp" #include "glcTestCase.hpp" #include "gluShaderProgram.hpp" #include using namespace glw; namespace glcts { struct PolygonOffsetClampValues { GLfloat factor; GLfloat units; GLfloat clamp; PolygonOffsetClampValues(GLfloat _f, GLfloat _u, GLfloat _c) : factor(_f), units(_u), clamp(_c) { } }; /** Tests base class **/ class PolygonOffsetClampTestCaseBase : public deqp::TestCase { public: /* Public methods */ PolygonOffsetClampTestCaseBase(deqp::Context& context, const char* name, const char* description); virtual tcu::TestNode::IterateResult iterate(); protected: /* Protected methods */ virtual void test(const glw::Functions& gl) = DE_NULL; /* Protected members */ bool m_extensionSupported; }; /** Test verifies if polygon offset clamp works as expected for non-zero, finite clamp values **/ class PolygonOffsetClampAvailabilityTestCase : public PolygonOffsetClampTestCaseBase { public: /* Public methods */ PolygonOffsetClampAvailabilityTestCase(deqp::Context& context); protected: /* Protected methods */ void test(const glw::Functions& gl); }; /** Base class for polygon offset clamp depth values verifying **/ class PolygonOffsetClampValueTestCaseBase : public PolygonOffsetClampTestCaseBase { public: /* Public methods */ PolygonOffsetClampValueTestCaseBase(deqp::Context& context, const char* name, const char* description); virtual void init(); virtual void deinit(); protected: /* Protected members */ GLuint m_fbo; GLuint m_depthBuf; GLuint m_colorBuf; GLuint m_fboReadback; GLuint m_colorBufReadback; std::vector m_testValues; /* Protected methods */ void test(const glw::Functions& gl); float readDepthValue(const glw::Functions& gl, const GLuint readDepthProgramId); virtual bool verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth) = DE_NULL; }; /** Test verifies if polygon offset clamp works as expected for zero and infinite clamp values **/ class PolygonOffsetClampMinMaxTestCase : public PolygonOffsetClampValueTestCaseBase { public: /* Public methods */ PolygonOffsetClampMinMaxTestCase(deqp::Context& context); void init(); protected: /* Protected methods */ bool verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth); }; /** Test verifies if polygon offset clamp works as expected for zero and infinite clamp values **/ class PolygonOffsetClampZeroInfinityTestCase : public PolygonOffsetClampValueTestCaseBase { public: /* Public methods */ PolygonOffsetClampZeroInfinityTestCase(deqp::Context& context); void init(); protected: /* Protected methods */ bool verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth); }; /** Test group which encapsulates all ARB_shader_group_vote conformance tests */ class PolygonOffsetClamp : public deqp::TestCaseGroup { public: /* Public methods */ PolygonOffsetClamp(deqp::Context& context); void init(); private: PolygonOffsetClamp(const PolygonOffsetClamp& other); }; } /* glcts namespace */ #endif // _GLCPOLYGONOFFSETCLAMPTESTS_HPP