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