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 32 namespace glu 33 { 34 class ShaderProgram; 35 class RenderContext; 36 } // glu 37 38 namespace deqp 39 { 40 namespace gls 41 { 42 namespace AttributeLocationTestUtil 43 { 44 45 class AttribType 46 { 47 public: 48 AttribType (const std::string& name, deUint32 locationSize, deUint32 typeEnum); 49 getName(void) const50 const std::string& getName (void) const { return m_name; } getLocationSize(void) const51 deUint32 getLocationSize (void) const { return m_locationSize; } getGLTypeEnum(void) const52 deUint32 getGLTypeEnum (void) const { return m_glTypeEnum; } 53 54 private: 55 std::string m_name; 56 deUint32 m_locationSize; 57 deUint32 m_glTypeEnum; 58 }; 59 60 class Cond 61 { 62 public: 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); operator ==(const Cond & other) const71 bool operator== (const Cond& other) const { return m_negate == other.m_negate && m_name == other.m_name; } operator !=(const Cond & other) const72 bool operator!= (const Cond& other) const { return !(*this == other); } getName(void) const73 const std::string getName (void) const { return m_name; } getNegate(void) const74 bool getNegate (void) const { return m_negate; } 75 76 private: 77 bool m_negate; 78 std::string m_name; 79 }; 80 81 class Attribute 82 { 83 public: 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 getType(void) const102 const AttribType getType (void) const { return m_type; } getName(void) const103 const std::string& getName (void) const { return m_name; } getLayoutLocation(void) const104 deInt32 getLayoutLocation (void) const { return m_layoutLocation; } getCondition(void) const105 const Cond& getCondition (void) const { return m_cond; } getArraySize(void) const106 int getArraySize (void) const { return m_arraySize; } 107 108 private: 109 AttribType m_type; 110 std::string m_name; 111 deInt32 m_layoutLocation; 112 Cond m_cond; 113 int m_arraySize; 114 }; 115 116 class Bind 117 { 118 public: 119 Bind (const std::string& attribute, deUint32 location); 120 getAttributeName(void) const121 const std::string& getAttributeName (void) const { return m_attribute; } getLocation(void) const122 deUint32 getLocation (void) const { return m_location; } 123 124 private: 125 std::string m_attribute; 126 deUint32 m_location; 127 }; 128 129 } // AttributeLocationTestUtil 130 131 // Simple bind attribute test 132 class BindAttributeTest : public tcu::TestCase 133 { 134 public: 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 144 private: 145 glu::RenderContext& m_renderCtx; 146 const AttribType m_type; 147 const int m_arraySize; 148 }; 149 150 // Bind maximum number of attributes 151 class BindMaxAttributesTest : public tcu::TestCase 152 { 153 public: 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 163 private: 164 glu::RenderContext& m_renderCtx; 165 const AttribType m_type; 166 const int m_arraySize; 167 }; 168 169 class BindAliasingAttributeTest : public tcu::TestCase 170 { 171 public: 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 182 private: 183 glu::RenderContext& m_renderCtx; 184 const AttribType m_type; 185 const int m_offset; 186 const int m_arraySize; 187 }; 188 189 class BindMaxAliasingAttributeTest : public tcu::TestCase 190 { 191 public: 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 201 private: 202 glu::RenderContext& m_renderCtx; 203 const AttribType m_type; 204 const int m_arraySize; 205 }; 206 207 class BindInactiveAliasingAttributeTest : public tcu::TestCase 208 { 209 public: 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 219 private: 220 glu::RenderContext& m_renderCtx; 221 const AttribType m_type; 222 const int m_arraySize; 223 }; 224 225 class BindHoleAttributeTest : public tcu::TestCase 226 { 227 public: 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 237 private: 238 glu::RenderContext& m_renderCtx; 239 const AttribType m_type; 240 const int m_arraySize; 241 }; 242 243 class PreAttachBindAttributeTest : public tcu::TestCase 244 { 245 public: 246 PreAttachBindAttributeTest (tcu::TestContext& testCtx, 247 glu::RenderContext& renderCtx); 248 249 virtual IterateResult iterate (void); 250 251 private: 252 glu::RenderContext& m_renderCtx; 253 }; 254 255 class PreLinkBindAttributeTest : public tcu::TestCase 256 { 257 public: 258 typedef AttributeLocationTestUtil::AttribType AttribType; 259 260 PreLinkBindAttributeTest (tcu::TestContext& testCtx, 261 glu::RenderContext& renderCtx); 262 263 virtual IterateResult iterate (void); 264 265 private: 266 glu::RenderContext& m_renderCtx; 267 }; 268 269 class PostLinkBindAttributeTest : public tcu::TestCase 270 { 271 public: 272 typedef AttributeLocationTestUtil::AttribType AttribType; 273 274 PostLinkBindAttributeTest (tcu::TestContext& testCtx, 275 glu::RenderContext& renderCtx); 276 277 virtual IterateResult iterate (void); 278 279 private: 280 glu::RenderContext& m_renderCtx; 281 }; 282 283 class BindReattachAttributeTest : public tcu::TestCase 284 { 285 public: 286 typedef AttributeLocationTestUtil::AttribType AttribType; 287 288 BindReattachAttributeTest (tcu::TestContext& testCtx, 289 glu::RenderContext& renderCtx); 290 291 virtual IterateResult iterate (void); 292 293 private: 294 glu::RenderContext& m_renderCtx; 295 }; 296 297 class LocationAttributeTest : public tcu::TestCase 298 { 299 public: 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 309 private: 310 glu::RenderContext& m_renderCtx; 311 const AttribType m_type; 312 const int m_arraySize; 313 }; 314 315 class LocationMaxAttributesTest : public tcu::TestCase 316 { 317 public: 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 327 private: 328 glu::RenderContext& m_renderCtx; 329 const AttribType m_type; 330 const int m_arraySize; 331 }; 332 333 class LocationHoleAttributeTest : public tcu::TestCase 334 { 335 public: 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 345 private: 346 glu::RenderContext& m_renderCtx; 347 const AttribType m_type; 348 const int m_arraySize; 349 }; 350 351 class MixedAttributeTest : public tcu::TestCase 352 { 353 public: 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 363 private: 364 glu::RenderContext& m_renderCtx; 365 const AttribType m_type; 366 const int m_arraySize; 367 }; 368 369 class MixedMaxAttributesTest : public tcu::TestCase 370 { 371 public: 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 381 private: 382 glu::RenderContext& m_renderCtx; 383 const AttribType m_type; 384 const int m_arraySize; 385 }; 386 387 class MixedHoleAttributeTest : public tcu::TestCase 388 { 389 public: 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 399 private: 400 glu::RenderContext& m_renderCtx; 401 const AttribType m_type; 402 const int m_arraySize; 403 }; 404 405 class BindRelinkAttributeTest : public tcu::TestCase 406 { 407 public: 408 typedef AttributeLocationTestUtil::AttribType AttribType; 409 410 BindRelinkAttributeTest (tcu::TestContext& testCtx, 411 glu::RenderContext& renderCtx); 412 413 virtual IterateResult iterate (void); 414 415 private: 416 glu::RenderContext& m_renderCtx; 417 }; 418 419 class BindRelinkHoleAttributeTest : public tcu::TestCase 420 { 421 public: 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 431 private: 432 glu::RenderContext& m_renderCtx; 433 const AttribType m_type; 434 const int m_arraySize; 435 }; 436 437 class MixedRelinkHoleAttributeTest : public tcu::TestCase 438 { 439 public: 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 449 private: 450 glu::RenderContext& m_renderCtx; 451 const AttribType m_type; 452 const int m_arraySize; 453 }; 454 455 class PreAttachMixedAttributeTest : public tcu::TestCase 456 { 457 public: 458 typedef AttributeLocationTestUtil::AttribType AttribType; 459 460 PreAttachMixedAttributeTest (tcu::TestContext& testCtx, 461 glu::RenderContext& renderCtx); 462 463 virtual IterateResult iterate (void); 464 465 private: 466 glu::RenderContext& m_renderCtx; 467 }; 468 469 class PreLinkMixedAttributeTest : public tcu::TestCase 470 { 471 public: 472 typedef AttributeLocationTestUtil::AttribType AttribType; 473 474 PreLinkMixedAttributeTest (tcu::TestContext& testCtx, 475 glu::RenderContext& renderCtx); 476 477 virtual IterateResult iterate (void); 478 479 private: 480 glu::RenderContext& m_renderCtx; 481 }; 482 483 class PostLinkMixedAttributeTest : public tcu::TestCase 484 { 485 public: 486 typedef AttributeLocationTestUtil::AttribType AttribType; 487 488 PostLinkMixedAttributeTest (tcu::TestContext& testCtx, 489 glu::RenderContext& renderCtx); 490 491 virtual IterateResult iterate (void); 492 493 private: 494 glu::RenderContext& m_renderCtx; 495 }; 496 497 class MixedReattachAttributeTest : public tcu::TestCase 498 { 499 public: 500 typedef AttributeLocationTestUtil::AttribType AttribType; 501 502 MixedReattachAttributeTest (tcu::TestContext& testCtx, 503 glu::RenderContext& renderCtx); 504 505 virtual IterateResult iterate (void); 506 507 private: 508 glu::RenderContext& m_renderCtx; 509 }; 510 511 class MixedRelinkAttributeTest : public tcu::TestCase 512 { 513 public: 514 typedef AttributeLocationTestUtil::AttribType AttribType; 515 516 MixedRelinkAttributeTest(tcu::TestContext& testCtx, 517 glu::RenderContext& renderCtx); 518 519 virtual IterateResult iterate (void); 520 521 private: 522 glu::RenderContext& m_renderCtx; 523 }; 524 525 } // gls 526 } // deqp 527 528 #endif // _GLSATTRIBUTELOCATIONTESTS_HPP 529