1 #ifndef _ESEXTCTEXTURECUBEMAPARRAYSAMPLING_HPP 2 #define _ESEXTCTEXTURECUBEMAPARRAYSAMPLING_HPP 3 /*------------------------------------------------------------------------- 4 * OpenGL Conformance Test Suite 5 * ----------------------------- 6 * 7 * Copyright (c) 2014-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 * \file esextcTextureCubeMapArraySampling.hpp 28 * \brief Texture Cube Map Array Sampling (Test 1) 29 */ /*-------------------------------------------------------------------*/ 30 31 #include "../esextcTestCaseBase.hpp" 32 33 #include <string> 34 35 namespace glcts 36 { 37 38 /** Implementation of (Test 1) for texture_cube_map_array extension. Test description follows: 39 * 40 * Make sure sampling cube-map array textures works correctly. 41 * 42 * Category: Functionality tests, 43 * Optional dependency on EXT_geometry_shader; 44 * Optional dependency on EXT_tessellation_shader; 45 * Optional dependency on OES_texture_stencil8; 46 * 47 * Priority: Must-have. 48 * 49 * Verify that both mutable and immutable cube-map array textures initialized 50 * with: 51 * 52 * * a color-renderable internalformat (GL_RGBA8); 53 * * a depth-renderable internalformat (GL_DEPTH_COMPONENT32F); 54 * * GL_RGBA32I internalformat; 55 * * GL_RGBA32UI internalformat; 56 * * GL_STENCIL_INDEX8 internalformat; 57 * * GL_COMPRESSED_RGBA8_ETC2_EAC internalformat; 58 * 59 * can be correctly sampled from: 60 * 61 * * a compute shader. 62 * * a fragment shader; 63 * * a geometry shader; (if supported) 64 * * a tessellation control shader; (if supported) 65 * * a tessellation evaluation shader; (if supported) 66 * * a vertex shader. 67 * 68 * For depth textures, the test should verify results reported by 69 * samplerCubeArray and samplerCubeArrayShadow samplers are valid. 70 * 71 * Use the following texture sampling GLSL functions: 72 * 73 * * texture(); 74 * * textureLod() (lod argument set to 0 and n_total_texture_mipmaps-1; 75 * in the former case we expect base mip-map data to be 76 * used, in the latter it should be the last mip-map that 77 * is used as texel data source) 78 * * textureGrad() (dPdx, dPdy should be calculated as distance to "right" 79 * and "top" "neighbours". Set of neighbours should 80 * ensure sampling of base and last mipmap level); 81 * * textureGather(); 82 * 83 * The following samplers should be used: (whichever applies for texture 84 * considered) 85 * 86 * * isamplerCubeArray; 87 * * samplerCubeArray; 88 * * samplerCubeArrayShadow; 89 * * usamplerCubeArray; 90 * 91 * The following cube-map array texture resolutions should be used for the 92 * purpose of the test: 93 * 94 * * not compressed formats 95 * [width x height x depth] 96 * 1) 64 x 64 x 18; 97 * 2) 117 x 117 x 6; 98 * 3) 256 x 256 x 6; 99 * 4) 173 x 173 x 12; 100 * * compressed formats 101 * [width x height x depth] 102 * 1) 8 x 8 x 12 103 * 2) 13 x 13 x 12; 104 * 105 * In case of color data, for m-th mip-map level of n-th face at i-th layer, 106 * the mip-map should be filled with the following color: 107 * 108 * ((m+1)/n_mipmaps, (n+1)/6, (i+1)/n_layers, 1.0 / 4.0) 109 * 110 * For signed/unsigned integer data, remove the denominator from all channels. 111 * 112 * For compressed formats, each component should be equal: 113 * 114 * (m * n_layers * 6) + (i * 6) + n 115 * 116 * In case of depth data, for m-th mip-map level of n-th face at i-th layer, 117 * the mip-map should be filled with the following depth: 118 * 119 * (m+1 + n+1 + i+1) / (n_mipmaps + 6 + n_layers) 120 * 121 * In case of stencil data, for m-th mip-map level of n-th face at i-th layer, 122 * the mip-map should be filled with the following stencil index value: 123 * 124 * (m+1 + n+1 + i+1) / (n_mipmaps + 6 + n_layers) * 255 125 * 126 * The test should use the maximum allowed amount of mip-maps, equal to: 127 * 128 * (floor(log2(max(width, height))) + 1; 129 * 130 * In each iteration, make sure that type of the uniform (as reported by 131 * glGetActiveUniform() and glGetProgramResourceiv() ) used for the test 132 * iteration is valid. 133 **/ 134 class TextureCubeMapArraySamplingTest : public TestCaseBase 135 { 136 public: 137 /* Public methods */ 138 TextureCubeMapArraySamplingTest(Context& context, const ExtParameters& extParams, const char* name, 139 const char* description); 140 ~TextureCubeMapArraySamplingTest(void)141 virtual ~TextureCubeMapArraySamplingTest(void) 142 { 143 } 144 145 virtual IterateResult iterate(void); 146 147 private: 148 /* Enums */ 149 /** Identifies vertex attribute 150 * 151 **/ 152 enum attributeId 153 { 154 Position, 155 TextureCoordinates, 156 TextureCoordinatesForGather, 157 Lod, 158 GradX, 159 GradY, 160 RefZ, 161 }; 162 163 /** Identifies type of sampler 164 * 165 **/ 166 enum samplerType 167 { 168 Float = 0, 169 Int, 170 UInt, 171 Depth, 172 Stencil 173 }; 174 175 /** Identifies type of sampling function 176 * 177 **/ 178 enum samplingFunction 179 { 180 Texture = 0, 181 TextureLod, 182 TextureGrad, 183 TextureGather, 184 }; 185 186 /** Identifies shader stage 187 * 188 **/ 189 enum shaderType 190 { 191 Compute = 0, 192 Fragment, 193 Geometry, 194 Tesselation_Control, 195 Tesselation_Evaluation, 196 Vertex 197 }; 198 199 /* Structures */ 200 /** Defines vertex attribute 201 * 202 **/ 203 struct attributeDefinition 204 { 205 const glw::GLchar* name; 206 const glw::GLchar* type; 207 attributeId attribute_id; 208 int binding; 209 }; 210 211 /** Provide set of "getComponents" routines 212 * 213 **/ 214 struct componentProvider 215 { 216 void (*getColorFloatComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 217 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLfloat* out_components); 218 219 void (*getColorUByteComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 220 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLubyte* out_components); 221 222 void (*getColorUintComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 223 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLuint* out_components); 224 225 void (*getColorIntComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 226 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLint* out_components); 227 228 void (*getDepthComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 229 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLfloat* out_components); 230 231 void (*getStencilComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 232 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLuint* out_components); 233 234 void (*getCompressedComponents)(glw::GLuint pixel_index, glw::GLint cube_face, glw::GLint layer_index, 235 glw::GLint n_layers, glw::GLint n_mipmap_levels, glw::GLubyte* out_components); 236 }; 237 238 /** Defines a GL "format" 239 * 240 **/ 241 struct formatInfo 242 { 243 formatInfo(glw::GLenum internal_format, glw::GLenum format, glw::GLenum type, bool is_compressed); 244 245 glw::GLenum m_internal_format; 246 glw::GLenum m_format; 247 glw::GLenum m_type; 248 bool m_is_compressed; 249 }; 250 251 /** Defines type of sampler, source and destination GL formats 252 * 253 **/ 254 struct formatDefinition 255 { 256 formatDefinition(glw::GLenum internal_format, glw::GLenum format, glw::GLenum type, bool is_compressed, 257 samplerType sampler_type, const glw::GLchar* name); 258 259 formatDefinition(glw::GLenum src_internal_format, glw::GLenum src_format, glw::GLenum src_type, 260 bool src_is_compressed, glw::GLenum dst_internal_format, glw::GLenum dst_format, 261 glw::GLenum dst_type, samplerType sampler_type, const glw::GLchar* name); 262 263 formatInfo m_source; 264 formatInfo m_destination; 265 samplerType m_sampler_type; 266 const glw::GLchar* m_name; 267 }; 268 269 /** Defines cube map texture resolution 270 * 271 **/ 272 struct resolutionDefinition 273 { 274 resolutionDefinition(glw::GLuint width, glw::GLuint height, glw::GLuint depth); 275 276 glw::GLuint m_width; 277 glw::GLuint m_height; 278 glw::GLuint m_depth; 279 }; 280 281 /** Defines sampling function 282 * 283 **/ 284 struct samplingFunctionDefinition 285 { 286 samplingFunctionDefinition(samplingFunction function, const glw::GLchar* name); 287 288 samplingFunction m_function; 289 const glw::GLchar* m_name; 290 }; 291 292 /** Defines sampling shader stage and type of primitive used by draw call 293 * 294 **/ 295 struct shaderConfiguration 296 { 297 shaderConfiguration(shaderType type, glw::GLenum primitive_type, const glw::GLchar* name); 298 299 shaderType m_type; 300 glw::GLenum m_primitive_type; 301 const glw::GLchar* m_name; 302 }; 303 304 /* Typedefs */ 305 typedef std::vector<formatDefinition> formatsVectorType; 306 typedef std::vector<bool> mutablitiesVectorType; 307 typedef std::vector<resolutionDefinition> resolutionsVectorType; 308 typedef std::vector<samplingFunctionDefinition> samplingFunctionsVectorType; 309 typedef std::vector<shaderConfiguration> shadersVectorType; 310 311 /* Classes */ 312 313 /** Defines vertex buffer 314 * 315 **/ 316 class bufferDefinition 317 { 318 public: 319 bufferDefinition(); 320 ~bufferDefinition(); 321 322 void init(const glw::Functions& gl, glw::GLsizeiptr buffer_size, glw::GLvoid* buffer_data); 323 324 void bind(glw::GLenum target) const; 325 void bind(glw::GLenum target, glw::GLuint index) const; 326 327 static const glw::GLuint m_invalid_buffer_object_id; 328 329 private: 330 const glw::Functions* m_gl; 331 glw::GLuint m_buffer_object_id; 332 }; 333 334 /** Defines a collection of vertex buffers for specific texture resolution 335 * 336 **/ 337 class bufferCollection 338 { 339 public: 340 void init(const glw::Functions& gl, const formatDefinition& format, const resolutionDefinition& resolution); 341 342 bufferDefinition postion; 343 bufferDefinition texture_coordinate; 344 bufferDefinition texture_coordinate_for_gather; 345 bufferDefinition lod; 346 bufferDefinition grad_x; 347 bufferDefinition grad_y; 348 bufferDefinition refZ; 349 }; 350 351 /** Wrapper for texture object id 352 * 353 **/ 354 class textureDefinition 355 { 356 public: 357 textureDefinition(); 358 ~textureDefinition(); 359 360 void init(const glw::Functions& gl); 361 362 void bind(glw::GLenum binding_point) const; 363 364 glw::GLuint getTextureId() const; 365 366 void setupImage(glw::GLuint image_unit, glw::GLenum internal_format); 367 void setupSampler(glw::GLuint texture_unit, const glw::GLchar* sampler_name, glw::GLuint program_id, 368 bool is_shadow); 369 370 static const glw::GLuint m_invalid_uniform_location; 371 static const glw::GLuint m_invalid_texture_object_id; 372 373 private: 374 const glw::Functions* m_gl; 375 glw::GLuint m_texture_object_id; 376 }; 377 378 /** Wrapper for shader object id 379 * 380 **/ 381 class shaderDefinition 382 { 383 public: 384 shaderDefinition(); 385 ~shaderDefinition(); 386 387 void init(const glw::Functions& gl, glw::GLenum shader_stage, const std::string& source, 388 class TextureCubeMapArraySamplingTest* test); 389 390 bool compile(); 391 392 void attach(glw::GLuint program_object_id) const; 393 394 glw::GLuint getShaderId() const; 395 static const glw::GLuint m_invalid_shader_object_id; 396 397 const std::string& getSource() const; 398 399 private: 400 const glw::Functions* m_gl; 401 glw::GLenum m_shader_stage; 402 std::string m_source; 403 glw::GLuint m_shader_object_id; 404 }; 405 406 /** Defines a collection of shaders for specific sampling routine 407 * 408 **/ 409 class shaderCollectionForSamplingRoutine 410 { 411 public: shaderCollectionForSamplingRoutine()412 shaderCollectionForSamplingRoutine() : m_sampling_function(Texture) 413 { 414 } 415 ~shaderCollectionForSamplingRoutine()416 ~shaderCollectionForSamplingRoutine() 417 { 418 } 419 420 void init(const glw::Functions& gl, const formatDefinition& format, const samplingFunction& sampling_function, 421 TextureCubeMapArraySamplingTest& test); 422 423 shaderDefinition pass_through_vertex_shader; 424 shaderDefinition pass_through_tesselation_control_shader; 425 426 shaderDefinition sampling_compute_shader; 427 shaderDefinition sampling_fragment_shader; 428 shaderDefinition sampling_geometry_shader; 429 shaderDefinition sampling_tesselation_control_shader; 430 shaderDefinition sampling_tesselation_evaluation_shader; 431 shaderDefinition sampling_vertex_shader; 432 433 samplingFunction m_sampling_function; 434 }; 435 436 /** Defines a complete set of shaders for one format and sampling routine 437 * 438 **/ 439 struct shaderGroup 440 { 441 void init(); 442 443 const shaderDefinition* pass_through_fragment_shader; 444 const shaderDefinition* pass_through_tesselation_control_shader; 445 const shaderDefinition* pass_through_tesselation_evaluation_shader; 446 const shaderDefinition* pass_through_vertex_shader; 447 const shaderDefinition* sampling_compute_shader; 448 const shaderDefinition* sampling_fragment_shader; 449 const shaderDefinition* sampling_geometry_shader; 450 const shaderDefinition* sampling_tesselation_control_shader; 451 const shaderDefinition* sampling_tesselation_evaluation_shader; 452 const shaderDefinition* sampling_vertex_shader; 453 }; 454 455 /** Defines a collection of shaders for one format 456 * 457 **/ 458 class shaderCollectionForTextureFormat 459 { 460 public: shaderCollectionForTextureFormat()461 shaderCollectionForTextureFormat() 462 { 463 } 464 ~shaderCollectionForTextureFormat()465 ~shaderCollectionForTextureFormat() 466 { 467 } 468 469 void init(const glw::Functions& gl, const formatDefinition& format, 470 const samplingFunctionsVectorType& sampling_routines, TextureCubeMapArraySamplingTest& test); 471 472 void getShaderGroup(samplingFunction function, shaderGroup& shader_group) const; 473 474 private: 475 shaderDefinition pass_through_fragment_shader; 476 shaderDefinition pass_through_tesselation_control_shader; 477 shaderDefinition pass_through_tesselation_evaluation_shader; 478 479 typedef std::vector<shaderCollectionForSamplingRoutine> shaderCollectionForSamplingFunctionVectorType; 480 shaderCollectionForSamplingFunctionVectorType per_sampling_routine; 481 }; 482 483 /** Wrapper for program object id 484 * 485 **/ 486 class programDefinition 487 { 488 public: 489 programDefinition(); 490 ~programDefinition(); 491 492 void init(const glw::Functions& gl, const shaderGroup& shader_group, shaderType shader_type, bool isContextES); 493 494 bool link(); 495 496 glw::GLuint getProgramId() const; 497 static const glw::GLuint m_invalid_program_object_id; 498 499 const shaderDefinition* getShader(shaderType shader_type) const; 500 501 private: 502 const shaderDefinition* compute_shader; 503 const shaderDefinition* geometry_shader; 504 const shaderDefinition* fragment_shader; 505 const shaderDefinition* tesselation_control_shader; 506 const shaderDefinition* tesselation_evaluation_shader; 507 const shaderDefinition* vertex_shader; 508 509 glw::GLuint m_program_object_id; 510 511 private: 512 const glw::Functions* m_gl; 513 }; 514 515 /** Collection of programs for one sampling routine 516 * 517 **/ 518 class programCollectionForFunction 519 { 520 public: 521 void init(const glw::Functions& gl, const shaderGroup& shader_group, TextureCubeMapArraySamplingTest& test, 522 bool isContextES); 523 524 const programDefinition* getProgram(shaderType shader_type) const; 525 526 private: 527 programDefinition program_with_sampling_compute_shader; 528 programDefinition program_with_sampling_fragment_shader; 529 programDefinition program_with_sampling_geometry_shader; 530 programDefinition program_with_sampling_tesselation_control_shader; 531 programDefinition program_with_sampling_tesselation_evaluation_shader; 532 programDefinition program_with_sampling_vertex_shader; 533 }; 534 535 /** Program collection for one format 536 * 537 **/ 538 class programCollectionForFormat 539 { 540 public: 541 void init(const glw::Functions& gl, const shaderCollectionForTextureFormat& shader_collection, 542 TextureCubeMapArraySamplingTest& test, bool isContextES); 543 544 const programCollectionForFunction* getPrograms(samplingFunction function) const; 545 546 private: 547 programCollectionForFunction m_programs_for_texture; 548 programCollectionForFunction m_programs_for_textureLod; 549 programCollectionForFunction m_programs_for_textureGrad; 550 programCollectionForFunction m_programs_for_textureGather; 551 }; 552 553 /** Wrapper for vertex array object id 554 * 555 **/ 556 class vertexArrayObjectDefinition 557 { 558 public: 559 vertexArrayObjectDefinition(); 560 ~vertexArrayObjectDefinition(); 561 562 void init(const glw::Functions& gl, const formatDefinition& format, const samplingFunction& sampling_function, 563 const bufferCollection& buffers, glw::GLuint program_id); 564 565 private: 566 void setupAttribute(const attributeDefinition& attribute, const bufferCollection& buffers, 567 glw::GLuint program_id); 568 569 static const glw::GLuint m_invalid_attribute_location; 570 static const glw::GLuint m_invalid_vertex_array_object_id; 571 572 const glw::Functions* m_gl; 573 glw::GLuint m_vertex_array_object_id; 574 }; 575 576 /* Methods */ 577 glw::GLuint checkUniformAndResourceApi(glw::GLuint program_id, const glw::GLchar* sampler_name, 578 samplerType sampler_type); 579 580 void compile(shaderDefinition& info); 581 582 void dispatch(glw::GLuint program_id, glw::GLuint width, glw::GLuint height); 583 584 void draw(glw::GLuint program_id, glw::GLenum m_primitive_type, glw::GLuint n_vertices, glw::GLenum format); 585 586 static void getAttributes(samplerType sampler_type, const attributeDefinition*& out_attribute_definitions, 587 glw::GLuint& out_n_attributes); 588 589 static void getAttributes(samplingFunction sampling_function, const attributeDefinition*& out_attribute_definitions, 590 glw::GLuint& out_n_attributes); 591 592 void getColorType(samplerType sampler_type, const glw::GLchar*& out_color_type, 593 const glw::GLchar*& out_interpolation_type, const glw::GLchar*& out_sampler_type, 594 glw::GLuint& out_n_components, bool& out_is_shadow); 595 596 void getColorType(samplerType sampler_type, const glw::GLchar*& out_color_type, 597 const glw::GLchar*& out_interpolation_type, const glw::GLchar*& out_sampler_type, 598 const glw::GLchar*& out_image_type, const glw::GLchar*& out_image_format, 599 glw::GLuint& out_n_components, bool& out_is_shadow); 600 601 void getPassThroughFragmentShaderCode(samplerType sampler_type, std::string& out_fragment_shader_code); 602 603 void getPassThroughTesselationControlShaderCode(const samplerType& sampler_type, 604 const samplingFunction& sampling_function, 605 std::string& out_tesselation_control_shader_code); 606 607 void getPassThroughTesselationEvaluationShaderCode(samplerType sampler_type, 608 std::string& out_tesselation_evaluation_shader_code); 609 610 void getPassThroughVertexShaderCode(const samplerType& sampler_type, const samplingFunction& sampling_function, 611 std::string& out_vertex_shader_code); 612 613 void getSamplingComputeShaderCode(const samplerType& sampler_type, const samplingFunction& sampling_function, 614 std::string& out_vertex_shader_code); 615 616 void getSamplingFragmentShaderCode(const samplerType& sampler_type, const samplingFunction& sampling_function, 617 std::string& out_fragment_shader_code); 618 619 void getSamplingFunctionCall(samplingFunction sampling_function, const glw::GLchar* color_type, 620 glw::GLuint n_components, const glw::GLchar* attribute_name_prefix, 621 const glw::GLchar* attribute_index, const glw::GLchar* color_variable_name, 622 const glw::GLchar* color_variable_index, const glw::GLchar* sampler_name, 623 std::string& out_code); 624 625 void getSamplingGeometryShaderCode(const samplerType& sampler_type, const samplingFunction& sampling_function, 626 std::string& out_geometry_shader_code); 627 628 void getSamplingTesselationControlShaderCode(const samplerType& sampler_type, 629 const samplingFunction& sampling_function, 630 std::string& out_tesselation_control_shader_code); 631 632 void getSamplingTesselationEvaluationShaderCode(const samplerType& sampler_type, 633 const samplingFunction& sampling_function, 634 std::string& out_tesselation_evaluation_shader_code); 635 636 void getSamplingVertexShaderCode(const samplerType& sampler_type, const samplingFunction& sampling_function, 637 std::string& out_vertex_shader_code); 638 639 void getShadowSamplingFunctionCall(samplingFunction sampling_function, const glw::GLchar* color_type, 640 glw::GLuint n_components, const glw::GLchar* attribute_name_prefix, 641 const glw::GLchar* attribute_index, const glw::GLchar* color_variable_name, 642 const glw::GLchar* color_variable_index, const glw::GLchar* sampler_name, 643 std::string& out_code); 644 645 static bool isSamplerSupportedByFunction(const samplerType sampler_type, const samplingFunction sampling_function); 646 647 void link(programDefinition& info); 648 649 void logCompilationLog(const shaderDefinition& info); 650 651 void logLinkingLog(const programDefinition& info); 652 653 void logProgram(const programDefinition& info); 654 655 void prepareCompresedTexture(const textureDefinition& texture, const formatDefinition& format, 656 const resolutionDefinition& resolution, bool mutability); 657 658 void prepareTexture(const textureDefinition& texture, const formatDefinition& format, 659 const resolutionDefinition& resolution, bool mutability); 660 661 void setupSharedStorageBuffer(const attributeDefinition& attribute, const bufferCollection& buffers, 662 glw::GLuint program_id); 663 664 void setupSharedStorageBuffers(const formatDefinition& format, const samplingFunction& sampling_function, 665 const bufferCollection& buffers, glw::GLuint program_id); 666 667 void testFormats(formatsVectorType& formats, resolutionsVectorType& resolutions); 668 669 void testTexture(const formatDefinition& format, bool mutability, const resolutionDefinition& resolution, 670 textureDefinition& texture, programCollectionForFormat& program_collection); 671 672 bool verifyResult(const formatDefinition& format, const resolutionDefinition& resolution, 673 const samplingFunction sampling_function, unsigned char* data); 674 675 bool verifyResultHelper(const formatDefinition& format, const resolutionDefinition& resolution, 676 const componentProvider& component_provider, unsigned char* data); 677 678 /* Fields */ 679 formatsVectorType m_formats; 680 formatsVectorType m_compressed_formats; 681 samplingFunctionsVectorType m_functions; 682 mutablitiesVectorType m_mutabilities; 683 resolutionsVectorType m_resolutions; 684 resolutionsVectorType m_compressed_resolutions; 685 shadersVectorType m_shaders; 686 687 glw::GLuint m_framebuffer_object_id; 688 689 /* Static variables */ 690 static const glw::GLuint m_get_type_api_status_program_resource; 691 static const glw::GLuint m_get_type_api_status_uniform; 692 693 /* Fields */ 694 glw::GLuint compiled_shaders; 695 glw::GLuint invalid_shaders; 696 glw::GLuint linked_programs; 697 glw::GLuint invalid_programs; 698 glw::GLuint tested_cases; 699 glw::GLuint failed_cases; 700 glw::GLuint invalid_type_cases; 701 702 /* Static variables */ 703 static const glw::GLchar* const attribute_grad_x; 704 static const glw::GLchar* const attribute_grad_y; 705 static const glw::GLchar* const attribute_lod; 706 static const glw::GLchar* const attribute_refZ; 707 static const glw::GLchar* const attribute_texture_coordinate; 708 static const glw::GLchar* const compute_shader_body; 709 static const glw::GLchar* const compute_shader_layout_binding; 710 static const glw::GLchar* const compute_shader_buffer; 711 static const glw::GLchar* const compute_shader_color; 712 static const glw::GLchar* const compute_shader_image_store; 713 static const glw::GLchar* const compute_shader_layout; 714 static const glw::GLchar* const compute_shader_param; 715 static const glw::GLchar* const fragment_shader_input; 716 static const glw::GLchar* const fragment_shader_output; 717 static const glw::GLchar* const fragment_shader_pass_through_body_code; 718 static const glw::GLchar* const fragment_shader_sampling_body_code; 719 static const glw::GLchar* const geometry_shader_emit_vertex_code; 720 static const glw::GLchar* const geometry_shader_extension; 721 static const glw::GLchar* const geometry_shader_layout; 722 static const glw::GLchar* const geometry_shader_sampling_body_code; 723 static const glw::GLchar* const image_float; 724 static const glw::GLchar* const image_int; 725 static const glw::GLchar* const image_name; 726 static const glw::GLchar* const image_uint; 727 static const glw::GLchar* const interpolation_flat; 728 static const glw::GLchar* const sampler_depth; 729 static const glw::GLchar* const sampler_float; 730 static const glw::GLchar* const sampler_int; 731 static const glw::GLchar* const sampler_name; 732 static const glw::GLchar* const sampler_uint; 733 static const glw::GLchar* const shader_code_preamble; 734 static const glw::GLchar* const shader_precision; 735 static const glw::GLchar* const shader_input; 736 static const glw::GLchar* const shader_layout; 737 static const glw::GLchar* const shader_output; 738 static const glw::GLchar* const shader_uniform; 739 static const glw::GLchar* const shader_writeonly; 740 static const glw::GLchar* const tesselation_control_shader_layout; 741 static const glw::GLchar* const tesselation_control_shader_sampling_body_code; 742 static const glw::GLchar* const tesselation_control_shader_output; 743 static const glw::GLchar* const tesselation_evaluation_shader_input; 744 static const glw::GLchar* const tesselation_evaluation_shader_layout; 745 static const glw::GLchar* const tesselation_evaluation_shader_pass_through_body_code; 746 static const glw::GLchar* const tesselation_evaluation_shader_sampling_body_code; 747 static const glw::GLchar* const tesselation_shader_extension; 748 static const glw::GLchar* const texture_func; 749 static const glw::GLchar* const textureGather_func; 750 static const glw::GLchar* const textureGrad_func; 751 static const glw::GLchar* const textureLod_func; 752 static const glw::GLchar* const type_float; 753 static const glw::GLchar* const type_ivec4; 754 static const glw::GLchar* const type_uint; 755 static const glw::GLchar* const type_uvec4; 756 static const glw::GLchar* const type_vec3; 757 static const glw::GLchar* const type_vec4; 758 static const glw::GLchar* const vertex_shader_body_code; 759 static const glw::GLchar* const vertex_shader_input; 760 static const glw::GLchar* const vertex_shader_output; 761 static const glw::GLchar* const vertex_shader_position; 762 }; 763 764 } /* glcts */ 765 766 #endif // _ESEXTCTEXTURECUBEMAPARRAYSAMPLING_HPP 767