999957dca409404944730b1b6577bb5fc3d99e95
[platform/upstream/VK-GL-CTS.git] / external / openglcts / modules / common / glcPolygonOffsetClampTests.hpp
1 #ifndef _GLCPOLYGONOFFSETCLAMPTESTS_HPP
2 #define _GLCPOLYGONOFFSETCLAMPTESTS_HPP
3 /*-------------------------------------------------------------------------
4 * OpenGL Conformance Test Suite
5 * -----------------------------
6 *
7 * Copyright (c) 2017 The Khronos Group Inc.
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 */ /*!
22 * \file  glcPolygonOffsetClampTests.hpp
23 * \brief Conformance tests for the EXT_polygon_offset_clamp functionality.
24 */ /*-------------------------------------------------------------------*/
25
26 #include "esextcTestCaseBase.hpp"
27 #include "glcTestCase.hpp"
28 #include "gluShaderProgram.hpp"
29
30 #include <string>
31
32 using namespace glw;
33
34 namespace glcts
35 {
36
37 struct PolygonOffsetClampValues
38 {
39         GLfloat factor;
40         GLfloat units;
41         GLfloat clamp;
42
43         PolygonOffsetClampValues(GLfloat _f, GLfloat _u, GLfloat _c) : factor(_f), units(_u), clamp(_c)
44         {
45         }
46 };
47
48 /** Tests base class
49 **/
50 class PolygonOffsetClampTestCaseBase : public deqp::TestCase
51 {
52 public:
53         /* Public methods */
54         PolygonOffsetClampTestCaseBase(deqp::Context& context, const char* name, const char* description);
55
56         virtual tcu::TestNode::IterateResult iterate();
57
58 protected:
59         /* Protected methods */
60         virtual void test(const glw::Functions& gl) = DE_NULL;
61
62         /* Protected members */
63         bool m_extensionSupported;
64 };
65
66 /** Test verifies if polygon offset clamp works as expected for non-zero, finite clamp values
67 **/
68 class PolygonOffsetClampAvailabilityTestCase : public PolygonOffsetClampTestCaseBase
69 {
70 public:
71         /* Public methods */
72         PolygonOffsetClampAvailabilityTestCase(deqp::Context& context);
73
74 protected:
75         /* Protected methods */
76         void test(const glw::Functions& gl);
77 };
78
79 /** Base class for polygon offset clamp depth values verifying
80 **/
81 class PolygonOffsetClampValueTestCaseBase : public PolygonOffsetClampTestCaseBase
82 {
83 public:
84         /* Public methods */
85         PolygonOffsetClampValueTestCaseBase(deqp::Context& context, const char* name, const char* description);
86
87         virtual void init();
88         virtual void deinit();
89
90 protected:
91         /* Protected members */
92         GLuint m_fbo;
93         GLuint m_depthBuf;
94         GLuint m_colorBuf;
95         GLuint m_fboReadback;
96         GLuint m_colorBufReadback;
97
98         std::vector<PolygonOffsetClampValues> m_testValues;
99
100         /* Protected methods */
101         void test(const glw::Functions& gl);
102
103         float readDepthValue(const glw::Functions& gl, const GLuint readDepthProgramId);
104
105         virtual bool verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth) = DE_NULL;
106 };
107
108 /** Test verifies if polygon offset clamp works as expected for zero and infinite clamp values
109 **/
110 class PolygonOffsetClampMinMaxTestCase : public PolygonOffsetClampValueTestCaseBase
111 {
112 public:
113         /* Public methods */
114         PolygonOffsetClampMinMaxTestCase(deqp::Context& context);
115
116         void init();
117
118 protected:
119         /* Protected methods */
120         bool verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth);
121 };
122
123 /** Test verifies ...
124 **/
125 class PolygonOffsetClampZeroInfinityTestCase : public PolygonOffsetClampValueTestCaseBase
126 {
127 public:
128         /* Public methods */
129         PolygonOffsetClampZeroInfinityTestCase(deqp::Context& context);
130
131         void init();
132
133 protected:
134         /* Protected methods */
135         bool verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth);
136 };
137
138 /** Test group which encapsulates all ARB_shader_group_vote conformance tests */
139 class PolygonOffsetClamp : public deqp::TestCaseGroup
140 {
141 public:
142         /* Public methods */
143         PolygonOffsetClamp(deqp::Context& context);
144
145         void init();
146
147 private:
148         PolygonOffsetClamp(const PolygonOffsetClamp& other);
149 };
150
151 } /* glcts namespace */
152
153 #endif // _GLCPOLYGONOFFSETCLAMPTESTS_HPP