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