1#ifndef _GLSATTRIBUTELOCATIONTESTS_HPP 2#define _GLSATTRIBUTELOCATIONTESTS_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program OpenGL (ES) Module 5 * ----------------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 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 Attribute location tests 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27#include "tcuTestCase.hpp" 28 29#include <string> 30#include <vector> 31 32namespace glu 33{ 34class ShaderProgram; 35class RenderContext; 36} // glu 37 38namespace deqp 39{ 40namespace gls 41{ 42namespace AttributeLocationTestUtil 43{ 44 45class AttribType 46{ 47public: 48 AttribType (const std::string& name, deUint32 locationSize, deUint32 typeEnum); 49 50 const std::string& getName (void) const { return m_name; } 51 deUint32 getLocationSize (void) const { return m_locationSize; } 52 deUint32 getGLTypeEnum (void) const { return m_glTypeEnum; } 53 54private: 55 std::string m_name; 56 deUint32 m_locationSize; 57 deUint32 m_glTypeEnum; 58}; 59 60class Cond 61{ 62public: 63 enum ConstCond 64 { 65 COND_ALWAYS, 66 COND_NEVER 67 }; 68 69 Cond (ConstCond cond); 70 explicit Cond (const std::string& name, bool negate = true); 71 bool operator== (const Cond& other) const { return m_negate == other.m_negate && m_name == other.m_name; } 72 bool operator!= (const Cond& other) const { return !(*this == other); } 73 const std::string getName (void) const { return m_name; } 74 bool getNegate (void) const { return m_negate; } 75 76private: 77 bool m_negate; 78 std::string m_name; 79}; 80 81class Attribute 82{ 83public: 84 enum 85 { 86 // Location is not defined 87 LOC_UNDEF = -1 88 }; 89 90 enum 91 { 92 // Not an array 93 NOT_ARRAY = -1 94 }; 95 96 Attribute (const AttribType& type, 97 const std::string& name, 98 deInt32 layoutLocation = LOC_UNDEF, 99 const Cond& cond = Cond::COND_ALWAYS, 100 int arraySize = NOT_ARRAY); 101 102 const AttribType getType (void) const { return m_type; } 103 const std::string& getName (void) const { return m_name; } 104 deInt32 getLayoutLocation (void) const { return m_layoutLocation; } 105 const Cond& getCondition (void) const { return m_cond; } 106 int getArraySize (void) const { return m_arraySize; } 107 108private: 109 AttribType m_type; 110 std::string m_name; 111 deInt32 m_layoutLocation; 112 Cond m_cond; 113 int m_arraySize; 114}; 115 116class Bind 117{ 118public: 119 Bind (const std::string& attribute, deUint32 location); 120 121 const std::string& getAttributeName (void) const { return m_attribute; } 122 deUint32 getLocation (void) const { return m_location; } 123 124private: 125 std::string m_attribute; 126 deUint32 m_location; 127}; 128 129} // AttributeLocationTestUtil 130 131// Simple bind attribute test 132class BindAttributeTest : public tcu::TestCase 133{ 134public: 135 typedef AttributeLocationTestUtil::AttribType AttribType; 136 137 BindAttributeTest (tcu::TestContext& testCtx, 138 glu::RenderContext& renderCtx, 139 const AttribType& type, 140 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 141 142 virtual IterateResult iterate (void); 143 144private: 145 glu::RenderContext& m_renderCtx; 146 const AttribType m_type; 147 const int m_arraySize; 148}; 149 150// Bind maximum number of attributes 151class BindMaxAttributesTest : public tcu::TestCase 152{ 153public: 154 typedef AttributeLocationTestUtil::AttribType AttribType; 155 156 BindMaxAttributesTest (tcu::TestContext& testCtx, 157 glu::RenderContext& renderCtx, 158 const AttribType& type, 159 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 160 161 virtual IterateResult iterate (void); 162 163private: 164 glu::RenderContext& m_renderCtx; 165 const AttribType m_type; 166 const int m_arraySize; 167}; 168 169class BindAliasingAttributeTest : public tcu::TestCase 170{ 171public: 172 typedef AttributeLocationTestUtil::AttribType AttribType; 173 174 BindAliasingAttributeTest (tcu::TestContext& testCtx, 175 glu::RenderContext& renderCtx, 176 const AttribType& type, 177 int offset = 0, 178 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 179 180 virtual IterateResult iterate (void); 181 182private: 183 glu::RenderContext& m_renderCtx; 184 const AttribType m_type; 185 const int m_offset; 186 const int m_arraySize; 187}; 188 189class BindMaxAliasingAttributeTest : public tcu::TestCase 190{ 191public: 192 typedef AttributeLocationTestUtil::AttribType AttribType; 193 194 BindMaxAliasingAttributeTest (tcu::TestContext& testCtx, 195 glu::RenderContext& renderCtx, 196 const AttribType& type, 197 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 198 199 virtual IterateResult iterate (void); 200 201private: 202 glu::RenderContext& m_renderCtx; 203 const AttribType m_type; 204 const int m_arraySize; 205}; 206 207class BindInactiveAliasingAttributeTest : public tcu::TestCase 208{ 209public: 210 typedef AttributeLocationTestUtil::AttribType AttribType; 211 212 BindInactiveAliasingAttributeTest (tcu::TestContext& testCtx, 213 glu::RenderContext& renderCtx, 214 const AttribType& type, 215 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 216 217 virtual IterateResult iterate (void); 218 219private: 220 glu::RenderContext& m_renderCtx; 221 const AttribType m_type; 222 const int m_arraySize; 223}; 224 225class BindHoleAttributeTest : public tcu::TestCase 226{ 227public: 228 typedef AttributeLocationTestUtil::AttribType AttribType; 229 230 BindHoleAttributeTest (tcu::TestContext& testCtx, 231 glu::RenderContext& renderCtx, 232 const AttribType& type, 233 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 234 235 virtual IterateResult iterate (void); 236 237private: 238 glu::RenderContext& m_renderCtx; 239 const AttribType m_type; 240 const int m_arraySize; 241}; 242 243class PreAttachBindAttributeTest : public tcu::TestCase 244{ 245public: 246 PreAttachBindAttributeTest (tcu::TestContext& testCtx, 247 glu::RenderContext& renderCtx); 248 249 virtual IterateResult iterate (void); 250 251private: 252 glu::RenderContext& m_renderCtx; 253}; 254 255class PreLinkBindAttributeTest : public tcu::TestCase 256{ 257public: 258 typedef AttributeLocationTestUtil::AttribType AttribType; 259 260 PreLinkBindAttributeTest (tcu::TestContext& testCtx, 261 glu::RenderContext& renderCtx); 262 263 virtual IterateResult iterate (void); 264 265private: 266 glu::RenderContext& m_renderCtx; 267}; 268 269class PostLinkBindAttributeTest : public tcu::TestCase 270{ 271public: 272 typedef AttributeLocationTestUtil::AttribType AttribType; 273 274 PostLinkBindAttributeTest (tcu::TestContext& testCtx, 275 glu::RenderContext& renderCtx); 276 277 virtual IterateResult iterate (void); 278 279private: 280 glu::RenderContext& m_renderCtx; 281}; 282 283class BindReattachAttributeTest : public tcu::TestCase 284{ 285public: 286 typedef AttributeLocationTestUtil::AttribType AttribType; 287 288 BindReattachAttributeTest (tcu::TestContext& testCtx, 289 glu::RenderContext& renderCtx); 290 291 virtual IterateResult iterate (void); 292 293private: 294 glu::RenderContext& m_renderCtx; 295}; 296 297class LocationAttributeTest : public tcu::TestCase 298{ 299public: 300 typedef AttributeLocationTestUtil::AttribType AttribType; 301 302 LocationAttributeTest (tcu::TestContext& testCtx, 303 glu::RenderContext& renderCtx, 304 const AttribType& type, 305 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 306 307 virtual IterateResult iterate (void); 308 309private: 310 glu::RenderContext& m_renderCtx; 311 const AttribType m_type; 312 const int m_arraySize; 313}; 314 315class LocationMaxAttributesTest : public tcu::TestCase 316{ 317public: 318 typedef AttributeLocationTestUtil::AttribType AttribType; 319 320 LocationMaxAttributesTest (tcu::TestContext& testCtx, 321 glu::RenderContext& renderCtx, 322 const AttribType& type, 323 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 324 325 virtual IterateResult iterate (void); 326 327private: 328 glu::RenderContext& m_renderCtx; 329 const AttribType m_type; 330 const int m_arraySize; 331}; 332 333class LocationHoleAttributeTest : public tcu::TestCase 334{ 335public: 336 typedef AttributeLocationTestUtil::AttribType AttribType; 337 338 LocationHoleAttributeTest (tcu::TestContext& testCtx, 339 glu::RenderContext& renderCtx, 340 const AttribType& type, 341 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 342 343 virtual IterateResult iterate (void); 344 345private: 346 glu::RenderContext& m_renderCtx; 347 const AttribType m_type; 348 const int m_arraySize; 349}; 350 351class MixedAttributeTest : public tcu::TestCase 352{ 353public: 354 typedef AttributeLocationTestUtil::AttribType AttribType; 355 356 MixedAttributeTest (tcu::TestContext& testCtx, 357 glu::RenderContext& renderCtx, 358 const AttribType& type, 359 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 360 361 virtual IterateResult iterate (void); 362 363private: 364 glu::RenderContext& m_renderCtx; 365 const AttribType m_type; 366 const int m_arraySize; 367}; 368 369class MixedMaxAttributesTest : public tcu::TestCase 370{ 371public: 372 typedef AttributeLocationTestUtil::AttribType AttribType; 373 374 MixedMaxAttributesTest (tcu::TestContext& testCtx, 375 glu::RenderContext& renderCtx, 376 const AttribType& type, 377 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 378 379 virtual IterateResult iterate (void); 380 381private: 382 glu::RenderContext& m_renderCtx; 383 const AttribType m_type; 384 const int m_arraySize; 385}; 386 387class MixedHoleAttributeTest : public tcu::TestCase 388{ 389public: 390 typedef AttributeLocationTestUtil::AttribType AttribType; 391 392 MixedHoleAttributeTest (tcu::TestContext& testCtx, 393 glu::RenderContext& renderCtx, 394 const AttribType& type, 395 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 396 397 virtual IterateResult iterate (void); 398 399private: 400 glu::RenderContext& m_renderCtx; 401 const AttribType m_type; 402 const int m_arraySize; 403}; 404 405class BindRelinkAttributeTest : public tcu::TestCase 406{ 407public: 408 typedef AttributeLocationTestUtil::AttribType AttribType; 409 410 BindRelinkAttributeTest (tcu::TestContext& testCtx, 411 glu::RenderContext& renderCtx); 412 413 virtual IterateResult iterate (void); 414 415private: 416 glu::RenderContext& m_renderCtx; 417}; 418 419class BindRelinkHoleAttributeTest : public tcu::TestCase 420{ 421public: 422 typedef AttributeLocationTestUtil::AttribType AttribType; 423 424 BindRelinkHoleAttributeTest (tcu::TestContext& testCtx, 425 glu::RenderContext& renderCtx, 426 const AttribType& type, 427 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 428 429 virtual IterateResult iterate (void); 430 431private: 432 glu::RenderContext& m_renderCtx; 433 const AttribType m_type; 434 const int m_arraySize; 435}; 436 437class MixedRelinkHoleAttributeTest : public tcu::TestCase 438{ 439public: 440 typedef AttributeLocationTestUtil::AttribType AttribType; 441 442 MixedRelinkHoleAttributeTest (tcu::TestContext& testCtx, 443 glu::RenderContext& renderCtx, 444 const AttribType& type, 445 int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY); 446 447 virtual IterateResult iterate (void); 448 449private: 450 glu::RenderContext& m_renderCtx; 451 const AttribType m_type; 452 const int m_arraySize; 453}; 454 455class PreAttachMixedAttributeTest : public tcu::TestCase 456{ 457public: 458 typedef AttributeLocationTestUtil::AttribType AttribType; 459 460 PreAttachMixedAttributeTest (tcu::TestContext& testCtx, 461 glu::RenderContext& renderCtx); 462 463 virtual IterateResult iterate (void); 464 465private: 466 glu::RenderContext& m_renderCtx; 467}; 468 469class PreLinkMixedAttributeTest : public tcu::TestCase 470{ 471public: 472 typedef AttributeLocationTestUtil::AttribType AttribType; 473 474 PreLinkMixedAttributeTest (tcu::TestContext& testCtx, 475 glu::RenderContext& renderCtx); 476 477 virtual IterateResult iterate (void); 478 479private: 480 glu::RenderContext& m_renderCtx; 481}; 482 483class PostLinkMixedAttributeTest : public tcu::TestCase 484{ 485public: 486 typedef AttributeLocationTestUtil::AttribType AttribType; 487 488 PostLinkMixedAttributeTest (tcu::TestContext& testCtx, 489 glu::RenderContext& renderCtx); 490 491 virtual IterateResult iterate (void); 492 493private: 494 glu::RenderContext& m_renderCtx; 495}; 496 497class MixedReattachAttributeTest : public tcu::TestCase 498{ 499public: 500 typedef AttributeLocationTestUtil::AttribType AttribType; 501 502 MixedReattachAttributeTest (tcu::TestContext& testCtx, 503 glu::RenderContext& renderCtx); 504 505 virtual IterateResult iterate (void); 506 507private: 508 glu::RenderContext& m_renderCtx; 509}; 510 511class MixedRelinkAttributeTest : public tcu::TestCase 512{ 513public: 514 typedef AttributeLocationTestUtil::AttribType AttribType; 515 516 MixedRelinkAttributeTest(tcu::TestContext& testCtx, 517 glu::RenderContext& renderCtx); 518 519 virtual IterateResult iterate (void); 520 521private: 522 glu::RenderContext& m_renderCtx; 523}; 524 525} // gls 526} // deqp 527 528#endif // _GLSATTRIBUTELOCATIONTESTS_HPP 529