1 #ifndef _ESEXTCGEOMETRYSHADERCONSTANTVARIABLES_HPP 2 #define _ESEXTCGEOMETRYSHADERCONSTANTVARIABLES_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 #include "../esextcTestCaseBase.hpp" 27 28 namespace glcts 29 { 30 /** Implementation of Test Group 15 from CTS_EXT_geometry_shader. Description follows: 31 * 32 * 1. gl_MaxGeometry* constants should reflect values reported for 33 * corresponding GL_MAX_GEOMETRY_* properties. 34 * 35 * Category: API; 36 * Functional Test. 37 * 38 * Using transform feedback, query values of the following constants in 39 * a geometry shader and transfer them to a buffer object: 40 * 41 * * gl_MaxGeometryInputComponents; 42 * * gl_MaxGeometryOutputComponents; 43 * * gl_MaxGeometryImageUniforms; 44 * * gl_MaxGeometryTextureImageUnits; 45 * * gl_MaxGeometryOutputVertices; 46 * * gl_MaxGeometryTotalOutputComponents; 47 * * gl_MaxGeometryUniformComponents; 48 * * gl_MaxGeometryAtomicCounters; 49 * * gl_MaxGeometryAtomicCounterBuffers; 50 * 51 * The test should then map the buffer object into client-space for reading 52 * and compare them against values reported by glGetIntegerv() for 53 * corresponding pnames. Test should fail if any of the values do not match. 54 * 55 * 56 * 2. Implementation-dependent constants are the same for all compatible 57 * getters. The value reported meets minimum maximum requirements enforced 58 * by the specification. 59 * 60 * Category: API; 61 * 62 * The following properties should be checked: 63 * 64 * 1) GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT (min: 0); 65 * 2) GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT (min: 0); 66 * 3) GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT (min: 16); 67 * 4) GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT (min: 0); 68 * 5) GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT (min: 0); 69 * 6) GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT (min: 1024); 70 * 7) GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT (min: 12); 71 * 8) GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT (min: 64); 72 * 9) GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT (min: 128); 73 * 10) GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT (min: 256); 74 * 11) GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT (min: 1024); 75 * 12) GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT (min: 32); 76 * 13) GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT (min: 77 * GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT * GL_MAX_UNIFORM_BLOCK_SIZE / 4 + 78 * + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT); 79 * 14) GL_LAYER_PROVOKING_VERTEX_EXT (accepted values: 80 * GL_PROVOKING_VERTEX (*), 81 * GL_FIRST_VERTEX_CONVENTION_EXT, 82 * GL_LAST_VERTEX_CONVENTION_EXT, 83 * GL_UNDEFINED_VERTEX_EXT) 84 * 15) GL_MAX_FRAMEBUFFER_LAYERS_EXT (min: 2048) 85 * 86 * (*) Only applicable to OpenGL. The ES extension does not allow this value. 87 **/ 88 89 class GeometryShaderConstantVariables : public TestCaseBase 90 { 91 public: 92 /* Public methods */ 93 GeometryShaderConstantVariables(Context& context, const ExtParameters& extParams, const char* name, 94 const char* description); 95 ~GeometryShaderConstantVariables()96 virtual ~GeometryShaderConstantVariables() 97 { 98 } 99 100 void deinit(void); 101 IterateResult iterate(void); 102 103 private: 104 /* Private methods */ 105 void initTest(void); 106 107 /* Private variables */ 108 static const char* m_fragment_shader_code; 109 static const char* m_geometry_shader_code; 110 static const char* m_vertex_shader_code; 111 static const char* m_feedbackVaryings[]; 112 113 glw::GLuint m_fragment_shader_id; 114 glw::GLuint m_geometry_shader_id; 115 glw::GLuint m_vertex_shader_id; 116 glw::GLuint m_program_id; 117 118 glw::GLuint m_bo_id; 119 glw::GLuint m_vao_id; 120 121 /* EXT_geometry_shader specific constant values */ 122 const int m_min_MaxGeometryImagesUniforms; 123 const int m_min_MaxGeometryTextureImagesUnits; 124 const int m_min_MaxGeometryShaderStorageBlocks; 125 const int m_min_MaxGeometryAtomicCounterBuffers; 126 const int m_min_MaxGeometryAtomicCounters; 127 128 const int m_min_MaxFramebufferLayers; 129 const int m_min_MaxGeometryInputComponents; 130 const int m_min_MaxGeometryOutputComponents; 131 const int m_min_MaxGeometryOutputVertices; 132 const int m_min_MaxGeometryShaderInvocations; 133 const int m_min_MaxGeometryTotalOutputComponents; 134 const int m_min_MaxGeometryUniformBlocks; 135 const int m_min_MaxGeometryUniformComponents; 136 }; 137 138 } // namespace glcts 139 140 #endif // _ESEXTCGEOMETRYSHADERCONSTANTVARIABLES_HPP 141