Home | History | Annotate | Download | only in gl
      1 #ifndef _GL4CSHADERDRAWPARAMETERSTESTS_HPP
      2 #define _GL4CSHADERDRAWPARAMETERSTESTS_HPP
      3 /*-------------------------------------------------------------------------
      4  * OpenGL Conformance Test Suite
      5  * -----------------------------
      6  *
      7  * Copyright (c) 2016 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
     23  * \brief
     24  */ /*-------------------------------------------------------------------*/
     25 
     26 /**
     27  */ /*!
     28  * \file  gl4cShaderDrawParametersTests.hpp
     29  * \brief Conformance tests for the GL_ARB_shader_draw_parameters functionality.
     30  */ /*-------------------------------------------------------------------*/
     31 #include "glcTestCase.hpp"
     32 #include "glwDefs.hpp"
     33 #include "tcuDefs.hpp"
     34 
     35 using namespace glw;
     36 using namespace glu;
     37 
     38 namespace gl4cts
     39 {
     40 
     41 typedef struct
     42 {
     43 	GLuint count;
     44 	GLuint instanceCount;
     45 	GLuint first;
     46 	GLuint baseInstance;
     47 } SDPDrawArraysIndirectCommand;
     48 
     49 typedef struct
     50 {
     51 	GLuint count;
     52 	GLuint instanceCount;
     53 	GLuint firstIndex;
     54 	GLuint baseVertex;
     55 	GLuint baseInstance;
     56 } SDPDrawElementsIndirectCommand;
     57 
     58 struct ResultPoint
     59 {
     60 	GLfloat x;
     61 	GLfloat y;
     62 	GLfloat red;
     63 	GLfloat green;
     64 	GLfloat blue;
     65 
     66 	ResultPoint(GLfloat _x, GLfloat _y, GLfloat _red, GLfloat _green, GLfloat _blue)
     67 		: x(_x), y(_y), red(_red), green(_green), blue(_blue)
     68 	{
     69 		// Left blank
     70 	}
     71 };
     72 
     73 /** Test verifies if extension is available for GLSL
     74  **/
     75 class ShaderDrawParametersExtensionTestCase : public deqp::TestCase
     76 {
     77 public:
     78 	/* Public methods */
     79 	ShaderDrawParametersExtensionTestCase(deqp::Context& context);
     80 
     81 	tcu::TestNode::IterateResult iterate();
     82 
     83 private:
     84 	/* Private members */
     85 };
     86 
     87 /** This is base class for drawing commands tests
     88  **/
     89 class ShaderDrawParametersTestBase : public deqp::TestCase
     90 {
     91 public:
     92 	/* Public methods */
     93 	ShaderDrawParametersTestBase(deqp::Context& context, const char* name, const char* description);
     94 
     95 	virtual void				 init();
     96 	virtual void				 deinit();
     97 	tcu::TestNode::IterateResult iterate();
     98 
     99 private:
    100 	/* Private methods */
    101 	bool draw();
    102 	bool verify();
    103 
    104 protected:
    105 	/* Protected members */
    106 	GLuint m_vao;
    107 	GLuint m_arrayBuffer;
    108 	GLuint m_elementBuffer;
    109 	GLuint m_drawIndirectBuffer;
    110 	GLuint m_parameterBuffer;
    111 
    112 	std::vector<ResultPoint> m_resultPoints;
    113 
    114 	/* Protected methods */
    115 	virtual void initChild();
    116 	virtual void deinitChild();
    117 	virtual void drawCommand();
    118 };
    119 
    120 class ShaderDrawArraysParametersTestCase : public ShaderDrawParametersTestBase
    121 {
    122 public:
    123 	/* Public methods */
    124 	ShaderDrawArraysParametersTestCase(deqp::Context& context)
    125 		: ShaderDrawParametersTestBase(context, "ShaderDrawArraysParameters",
    126 									   "Verifies shader draw parameters with DrawArrays command")
    127 	{
    128 	}
    129 
    130 private:
    131 	/* Private methods */
    132 	virtual void initChild();
    133 	virtual void deinitChild();
    134 	virtual void drawCommand();
    135 };
    136 
    137 class ShaderDrawElementsParametersTestCase : public ShaderDrawParametersTestBase
    138 {
    139 public:
    140 	/* Public methods */
    141 	ShaderDrawElementsParametersTestCase(deqp::Context& context)
    142 		: ShaderDrawParametersTestBase(context, "ShaderDrawElementsParameters",
    143 									   "Verifies shader draw parameters with DrawElements command")
    144 	{
    145 	}
    146 
    147 private:
    148 	/* Private methods */
    149 	virtual void initChild();
    150 	virtual void deinitChild();
    151 	virtual void drawCommand();
    152 };
    153 
    154 class ShaderDrawArraysIndirectParametersTestCase : public ShaderDrawParametersTestBase
    155 {
    156 public:
    157 	/* Public methods */
    158 	ShaderDrawArraysIndirectParametersTestCase(deqp::Context& context)
    159 		: ShaderDrawParametersTestBase(context, "ShaderDrawArraysIndirectParameters",
    160 									   "Verifies shader draw parameters with DrawArraysIndirect command")
    161 	{
    162 	}
    163 
    164 private:
    165 	/* Private methods */
    166 	virtual void initChild();
    167 	virtual void deinitChild();
    168 	virtual void drawCommand();
    169 };
    170 
    171 class ShaderDrawElementsIndirectParametersTestCase : public ShaderDrawParametersTestBase
    172 {
    173 public:
    174 	/* Public methods */
    175 	ShaderDrawElementsIndirectParametersTestCase(deqp::Context& context)
    176 		: ShaderDrawParametersTestBase(context, "ShaderDrawElementsIndirectParameters",
    177 									   "Verifies shader draw parameters with DrawElementsIndirect command")
    178 	{
    179 	}
    180 
    181 private:
    182 	/* Private methods */
    183 	virtual void initChild();
    184 	virtual void deinitChild();
    185 	virtual void drawCommand();
    186 };
    187 
    188 class ShaderDrawArraysInstancedParametersTestCase : public ShaderDrawParametersTestBase
    189 {
    190 public:
    191 	/* Public methods */
    192 	ShaderDrawArraysInstancedParametersTestCase(deqp::Context& context)
    193 		: ShaderDrawParametersTestBase(context, "ShaderDrawArraysInstancedParameters",
    194 									   "Verifies shader draw parameters with DrawArraysInstanced command")
    195 	{
    196 	}
    197 
    198 private:
    199 	/* Private methods */
    200 	virtual void initChild();
    201 	virtual void deinitChild();
    202 	virtual void drawCommand();
    203 };
    204 
    205 class ShaderDrawElementsInstancedParametersTestCase : public ShaderDrawParametersTestBase
    206 {
    207 public:
    208 	/* Public methods */
    209 	ShaderDrawElementsInstancedParametersTestCase(deqp::Context& context)
    210 		: ShaderDrawParametersTestBase(context, "ShaderDrawElementsInstancedParameters",
    211 									   "Verifies shader draw parameters with DrawElementsInstanced command")
    212 	{
    213 	}
    214 
    215 private:
    216 	/* Private methods */
    217 	virtual void initChild();
    218 	virtual void deinitChild();
    219 	virtual void drawCommand();
    220 };
    221 
    222 class ShaderMultiDrawArraysParametersTestCase : public ShaderDrawParametersTestBase
    223 {
    224 public:
    225 	/* Public methods */
    226 	ShaderMultiDrawArraysParametersTestCase(deqp::Context& context)
    227 		: ShaderDrawParametersTestBase(context, "ShaderMultiDrawArraysParameters",
    228 									   "Verifies shader draw parameters with MultiDrawArrays command")
    229 	{
    230 	}
    231 
    232 private:
    233 	/* Private methods */
    234 	virtual void initChild();
    235 	virtual void deinitChild();
    236 	virtual void drawCommand();
    237 };
    238 
    239 class ShaderMultiDrawElementsParametersTestCase : public ShaderDrawParametersTestBase
    240 {
    241 public:
    242 	/* Public methods */
    243 	ShaderMultiDrawElementsParametersTestCase(deqp::Context& context)
    244 		: ShaderDrawParametersTestBase(context, "ShaderMultiDrawElementsParameters",
    245 									   "Verifies shader draw parameters with MultiDrawElements command")
    246 	{
    247 	}
    248 
    249 private:
    250 	/* Private methods */
    251 	virtual void initChild();
    252 	virtual void deinitChild();
    253 	virtual void drawCommand();
    254 };
    255 
    256 class ShaderMultiDrawArraysIndirectParametersTestCase : public ShaderDrawParametersTestBase
    257 {
    258 public:
    259 	/* Public methods */
    260 	ShaderMultiDrawArraysIndirectParametersTestCase(deqp::Context& context)
    261 		: ShaderDrawParametersTestBase(context, "ShaderMultiDrawArraysIndirectParameters",
    262 									   "Verifies shader draw parameters with MultiDrawArraysIndirect command")
    263 	{
    264 	}
    265 
    266 private:
    267 	/* Private methods */
    268 	virtual void initChild();
    269 	virtual void deinitChild();
    270 	virtual void drawCommand();
    271 };
    272 
    273 class ShaderMultiDrawElementsIndirectParametersTestCase : public ShaderDrawParametersTestBase
    274 {
    275 public:
    276 	/* Public methods */
    277 	ShaderMultiDrawElementsIndirectParametersTestCase(deqp::Context& context)
    278 		: ShaderDrawParametersTestBase(context, "ShaderMultiDrawElementsIndirectParameters",
    279 									   "Verifies shader draw parameters with MultiDrawElementsIndirect command")
    280 	{
    281 	}
    282 
    283 private:
    284 	/* Private methods */
    285 	virtual void initChild();
    286 	virtual void deinitChild();
    287 	virtual void drawCommand();
    288 };
    289 
    290 class ShaderMultiDrawArraysIndirectCountParametersTestCase : public ShaderDrawParametersTestBase
    291 {
    292 public:
    293 	/* Public methods */
    294 	ShaderMultiDrawArraysIndirectCountParametersTestCase(deqp::Context& context)
    295 		: ShaderDrawParametersTestBase(context, "MultiDrawArraysIndirectCountParameters",
    296 									   "Verifies shader draw parameters with MultiDrawArraysIndirectCount command")
    297 	{
    298 	}
    299 
    300 private:
    301 	/* Private methods */
    302 	virtual void initChild();
    303 	virtual void deinitChild();
    304 	virtual void drawCommand();
    305 };
    306 
    307 class ShaderMultiDrawElementsIndirectCountParametersTestCase : public ShaderDrawParametersTestBase
    308 {
    309 public:
    310 	/* Public methods */
    311 	ShaderMultiDrawElementsIndirectCountParametersTestCase(deqp::Context& context)
    312 		: ShaderDrawParametersTestBase(context, "MultiDrawElementIndirectCountParameters",
    313 									   "Verifies shader draw parameters with MultiDrawElementIndirectCount command")
    314 	{
    315 	}
    316 
    317 private:
    318 	/* Private methods */
    319 	virtual void initChild();
    320 	virtual void deinitChild();
    321 	virtual void drawCommand();
    322 };
    323 
    324 /** Test group which encapsulates all sparse buffer conformance tests */
    325 class ShaderDrawParametersTests : public deqp::TestCaseGroup
    326 {
    327 public:
    328 	/* Public methods */
    329 	ShaderDrawParametersTests(deqp::Context& context);
    330 
    331 	void init();
    332 
    333 private:
    334 	ShaderDrawParametersTests(const ShaderDrawParametersTests& other);
    335 	ShaderDrawParametersTests& operator=(const ShaderDrawParametersTests& other);
    336 };
    337 
    338 } /* gl4cts namespace */
    339 
    340 #endif // _GL4CSHADERDRAWPARAMETERSTESTS_HPP
    341