1 /*-------------------------------------------------------------------------
2 * OpenGL Conformance Test Suite
3 * -----------------------------
4 *
5 * Copyright (c) 2017 The Khronos Group Inc.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 */ /*!
20 * \file gl4cLimitsTests.cpp
21 * \brief Verifies all limits
22 */ /*-------------------------------------------------------------------*/
23
24 #include "gl4cLimitsTests.hpp"
25 #include "glcLimitTest.hpp"
26
27 using namespace glw;
28
29 namespace gl4cts
30 {
31
32 template <typename Type>
33 struct Limit
34 {
35 const char* name;
36 deUint32 token;
37 Type boundry;
38 bool isMaximum; // when true boundry is maximal acceptable value
39 const char* builtin;
40 };
41
42 /** Constructor.
43 *
44 * @param context Rendering context.
45 **/
LimitsTests(deqp::Context & context)46 LimitsTests::LimitsTests(deqp::Context& context) : TestCaseGroup(context, "limits", "Verifies all limits")
47 {
48 }
49
init(void)50 void LimitsTests::init(void)
51 {
52 const GLint minVertexUniformBlocks = 14;
53 const GLint minVertexUniformComponents = 1024;
54
55 const GLint minGeometryUniformBlocks = 14;
56 const GLint minGeometryUniformComponents = 1024;
57
58 const GLint minTessControlUniformBlocks = 14;
59 const GLint minTessControlUniformComponents = 1024;
60
61 const GLint minTessEvaluationUniformBlocks = 14;
62 const GLint minTessEvaluationUniformComponents = 1024;
63
64 const GLint minFragmentUniformBlocks = 14;
65 const GLint minFragmentUniformComponents = 1024;
66
67 const GLint minUniformBlockSize = 16384;
68
69 const GLint cvuc = (minVertexUniformBlocks*minUniformBlockSize)/4 + minVertexUniformComponents;
70 const GLint cguc = (minGeometryUniformBlocks*minUniformBlockSize)/4 + minGeometryUniformComponents;
71 const GLint ctcuc = (minTessControlUniformBlocks*minUniformBlockSize)/4 + minTessControlUniformComponents;
72 const GLint cteuc = (minTessEvaluationUniformBlocks*minUniformBlockSize)/4 + minTessEvaluationUniformComponents;
73 const GLint cfuc = (minFragmentUniformBlocks*minUniformBlockSize)/4 + minFragmentUniformComponents;
74
75 static const Limit<GLint> intLimits[] =
76 {
77 { "max_clip_distances", GL_MAX_CLIP_DISTANCES, 8, 0, "gl_MaxClipDistances" },
78 { "max_cull_distances", GL_MAX_CULL_DISTANCES, 8, 0, "gl_MaxCullDistances" },
79 { "max_combined_clip_and_cull_distances", GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES, 8, 0, "gl_MaxCombinedClipAndCullDistances" },
80 { "max_3d_texture_size", GL_MAX_3D_TEXTURE_SIZE, 2048, 0, "" },
81 { "max_texture_size", GL_MAX_TEXTURE_SIZE, 16384, 0, "" },
82 { "max_array_texture_layers", GL_MAX_ARRAY_TEXTURE_LAYERS, 2048, 0, "" },
83 { "max_cube_map_texture_size", GL_MAX_CUBE_MAP_TEXTURE_SIZE, 16384, 0, "" },
84 { "max_renderbuffer_size", GL_MAX_RENDERBUFFER_SIZE, 16384, 0, "" },
85 { "max_viewports", GL_MAX_VIEWPORTS, 16, 0, "gl_MaxViewports" },
86 { "max_elements_indices", GL_MAX_ELEMENTS_INDICES, 0, 0, "" }, // there is no minimum
87 { "max_elements_vertices", GL_MAX_ELEMENTS_VERTICES, 0, 0, "" },
88 { "max_vertex_attrib_relative_offset", GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, 2047, 0, "" },
89 { "max_vertex_attrib_bindings", GL_MAX_VERTEX_ATTRIB_BINDINGS, 16, 0, "" },
90 { "max_vertex_attrib_stride", GL_MAX_VERTEX_ATTRIB_STRIDE, 2048, 0, "" },
91 { "max_texture_buffer_size", GL_MAX_TEXTURE_BUFFER_SIZE, 65536, 0, "" },
92 { "max_rectangle_texture_size", GL_MAX_RECTANGLE_TEXTURE_SIZE, 16384, 0, "" },
93 { "min_map_buffer_alignment", GL_MIN_MAP_BUFFER_ALIGNMENT, 64, 0, "" },
94 { "max_vertex_attribs", GL_MAX_VERTEX_ATTRIBS, 16, 0, "gl_MaxVertexAttribs" },
95 { "max_vertex_uniform_components", GL_MAX_VERTEX_UNIFORM_COMPONENTS, 1024, 0, "gl_MaxVertexUniformComponents" },
96 { "max_vertex_uniform_vectors", GL_MAX_VERTEX_UNIFORM_VECTORS, 256, 0, "gl_MaxVertexUniformVectors" },
97 { "max_vertex_uniform_blocks", GL_MAX_VERTEX_UNIFORM_BLOCKS, 14, 0, "" },
98 { "max_vertex_output_components", GL_MAX_VERTEX_OUTPUT_COMPONENTS, 64, 0, "gl_MaxVertexOutputComponents" },
99 { "max_vertex_texture_image_units", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxVertexTextureImageUnits" },
100 { "max_vertex_atomic_counter_buffers", GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS, 0, 0, "gl_MaxVertexAtomicCounterBuffers" },
101 { "max_vertex_atomic_counters", GL_MAX_VERTEX_ATOMIC_COUNTERS, 0, 0, "gl_MaxVertexAtomicCounters" },
102 { "max_vertex_shader_storage_blocks", GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, 0, 0, "" },
103 { "max_tess_gen_level", GL_MAX_TESS_GEN_LEVEL, 64, 0, "gl_MaxTessGenLevel" },
104 { "max_patch_vertices", GL_MAX_PATCH_VERTICES, 32, 0, "gl_MaxPatchVertices" },
105 { "max_tess_control_uniform_components", GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS, 1024, 0, "gl_MaxTessControlUniformComponents" },
106 { "max_tess_control_texture_image_units", GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxTessControlTextureImageUnits" },
107 { "max_tess_control_output_components", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS, 128, 0, "gl_MaxTessControlOutputComponents" },
108 { "max_tess_patch_components", GL_MAX_TESS_PATCH_COMPONENTS, 120, 0, "gl_MaxTessPatchComponents" },
109 { "max_tess_control_total_output_components", GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS, 4096, 0, "gl_MaxTessControlTotalOutputComponents" },
110 { "max_tess_control_input_components", GL_MAX_TESS_CONTROL_INPUT_COMPONENTS, 128, 0, "gl_MaxTessControlInputComponents" },
111 { "max_tess_control_uniform_blocks", GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS, 14, 0, "" },
112 { "max_tess_control_atomic_counter_buffers", GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS, 0, 0, "gl_MaxTessControlAtomicCounterBuffers" },
113 { "max_tess_control_atomic_counters", GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS, 0, 0, "gl_MaxTessControlAtomicCounters" },
114 { "max_tess_control_shader_storage_blocks", GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS, 0, 0, "" },
115 { "max_tess_evaluation_uniform_components", GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS, 1024, 0, "gl_MaxTessEvaluationUniformComponents" },
116 { "max_tess_evaluation_texture_image_units", GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxTessEvaluationTextureImageUnits" },
117 { "max_tess_evaluation_output_components", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS, 128, 0, "gl_MaxTessEvaluationOutputComponents" },
118 { "max_tess_evaluation_input_components", GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS, 128, 0, "gl_MaxTessEvaluationInputComponents" },
119 { "max_tess_evaluation_uniform_blocks", GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, 14, 0, "" },
120 { "max_tess_evaluation_atomic_counter_buffers", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS, 0, 0, "gl_MaxTessEvaluationAtomicCounterBuffers" },
121 { "max_tess_evaluation_atomic_counters", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS, 0, 0, "gl_MaxTessEvaluationAtomicCounters" },
122 { "max_tess_evaluation_shader_storage_blocks", GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS, 0, 0, "" },
123 { "max_geometry_uniform_components", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS, 1024, 0, "gl_MaxGeometryUniformComponents" },
124 { "max_geometry_uniform_blocks", GL_MAX_GEOMETRY_UNIFORM_BLOCKS, 14, 0, "" },
125 { "max_geometry_input_components", GL_MAX_GEOMETRY_INPUT_COMPONENTS, 64, 0, "gl_MaxGeometryInputComponents" },
126 { "max_geometry_output_components", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, 128, 0, "gl_MaxGeometryOutputComponents" },
127 { "max_geometry_output_vertices", GL_MAX_GEOMETRY_OUTPUT_VERTICES, 256, 0, "gl_MaxGeometryOutputVertices" },
128 { "max_geometry_total_output_components", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 1024, 0, "gl_MaxGeometryTotalOutputComponents" },
129 { "max_geometry_texture_image_units", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxGeometryTextureImageUnits" },
130 { "max_geometry_shader_invocations", GL_MAX_GEOMETRY_SHADER_INVOCATIONS, 32, 0, "" },
131 { "max_vertex_streams", GL_MAX_VERTEX_STREAMS, 4, 0, "" },
132 { "max_geometry_atomic_counter_buffers", GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS, 0, 0, "gl_MaxGeometryAtomicCounterBuffers" },
133 { "max_geometry_atomic_counters", GL_MAX_GEOMETRY_ATOMIC_COUNTERS, 0, 0, "gl_MaxGeometryAtomicCounters" },
134 { "max_geometry_shader_storage_blocks", GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, 0, 0, "" },
135 { "max_fragment_uniform_components", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, 1024, 0, "gl_MaxFragmentUniformComponents" },
136 { "max_fragment_uniform_vectors", GL_MAX_FRAGMENT_UNIFORM_VECTORS, 256, 0, "gl_MaxFragmentUniformVectors" },
137 { "max_fragment_uniform_blocks", GL_MAX_FRAGMENT_UNIFORM_BLOCKS, 14, 0, "" },
138 { "max_fragment_input_components", GL_MAX_FRAGMENT_INPUT_COMPONENTS, 128, 0, "gl_MaxFragmentInputComponents" },
139 { "max_texture_image_units", GL_MAX_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxTextureImageUnits" },
140 { "min_program_texture_gather_offset", GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET, -8, 1, "" },
141 { "max_program_texture_gather_offset", GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET, 7, 0, "" },
142 { "max_fragment_atomic_counter_buffers", GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, 1, 0, "gl_MaxFragmentAtomicCounterBuffers" },
143 { "max_fragment_atomic_counters", GL_MAX_FRAGMENT_ATOMIC_COUNTERS, 8, 0, "gl_MaxFragmentAtomicCounters" },
144 { "max_fragment_shader_storage_blocks", GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, 8, 0, "" },
145 { "max_compute_work_group_invocations", GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, 1024, 0, "" },
146 { "max_compute_uniform_blocks", GL_MAX_COMPUTE_UNIFORM_BLOCKS, 14, 0, "" },
147 { "max_compute_texture_image_units", GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxComputeTextureImageUnits" },
148 { "max_compute_atomic_counter_buffers", GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, 8, 0, "gl_MaxComputeAtomicCounterBuffers" },
149 { "max_compute_atomic_counters", GL_MAX_COMPUTE_ATOMIC_COUNTERS, 8, 0, "gl_MaxComputeAtomicCounters" },
150 { "max_compute_shared_memory_size", GL_MAX_COMPUTE_SHARED_MEMORY_SIZE, 32768, 0, "" },
151 { "max_compute_uniform_components", GL_MAX_COMPUTE_UNIFORM_COMPONENTS, 1024, 0, "gl_MaxComputeUniformComponents" },
152 { "max_compute_image_uniforms", GL_MAX_COMPUTE_IMAGE_UNIFORMS, 8, 0, "gl_MaxComputeImageUniforms" },
153 { "max_combined_compute_uniform_components", GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, 0, 0, "" }, // minimum was not specified
154 { "max_compute_shader_storage_blocks", GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, 8, 0, "" },
155 { "min_program_texel_offset", GL_MIN_PROGRAM_TEXEL_OFFSET, -8, 1, "gl_MinProgramTexelOffset" },
156 { "max_program_texel_offset", GL_MAX_PROGRAM_TEXEL_OFFSET, 7, 0, "gl_MaxProgramTexelOffset" },
157 { "max_uniform_buffer_bindings", GL_MAX_UNIFORM_BUFFER_BINDINGS, 84, 0, "" },
158 { "max_uniform_block_size", GL_MAX_UNIFORM_BLOCK_SIZE, 16384, 0, "" },
159 { "max_combined_uniform_blocks", GL_MAX_COMBINED_UNIFORM_BLOCKS, 70, 0, "" },
160 { "max_varying_components", GL_MAX_VARYING_COMPONENTS, 60, 0, "gl_MaxVaryingComponents" },
161 { "max_varying_vectors", GL_MAX_VARYING_VECTORS, 15, 0, "gl_MaxVaryingVectors" },
162 { "max_combined_texture_image_units", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, 80, 0, "gl_MaxCombinedTextureImageUnits" },
163 { "max_subroutines", GL_MAX_SUBROUTINES, 256, 0, "" },
164 { "max_subroutine_uniform_locations", GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS, 1024, 0, "" },
165 { "max_uniform_locations", GL_MAX_UNIFORM_LOCATIONS, 1024, 0, "" },
166 { "max_atomic_counter_buffer_bindings", GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, 1, 0, "" },
167 { "max_atomic_counter_buffer_size", GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, 32, 0, "gl_MaxAtomicCounterBufferSize" },
168 { "max_combined_atomic_counter_buffers", GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, 1, 0, "gl_MaxCombinedAtomicCounterBuffers" },
169 { "max_combined_atomic_counters", GL_MAX_COMBINED_ATOMIC_COUNTERS, 8, 0, "gl_MaxCombinedAtomicCounters" },
170 { "max_shader_storage_buffer_bindings", GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, 8, 0, "" },
171 { "max_combined_shader_storage_blocks", GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, 8, 0, "" },
172 { "max_image_units", GL_MAX_IMAGE_UNITS, 8, 0, "gl_MaxImageUnits" },
173 { "max_combined_shader_output_resources", GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, 8, 0, "gl_MaxCombinedShaderOutputResources" },
174 { "max_image_samples", GL_MAX_IMAGE_SAMPLES, 0, 0, "gl_MaxImageSamples" },
175 { "max_vertex_image_uniforms", GL_MAX_VERTEX_IMAGE_UNIFORMS, 0, 0, "gl_MaxVertexImageUniforms" },
176 { "max_tess_control_image_uniforms", GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS, 0, 0, "gl_MaxTessControlImageUniforms" },
177 { "max_tess_evaluation_image_uniforms", GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS, 0, 0, "gl_MaxTessEvaluationImageUniforms" },
178 { "max_geometry_image_uniforms", GL_MAX_GEOMETRY_IMAGE_UNIFORMS, 0, 0, "gl_MaxGeometryImageUniforms" },
179 { "max_fragment_image_uniforms", GL_MAX_FRAGMENT_IMAGE_UNIFORMS, 8, 0, "gl_MaxFragmentImageUniforms" },
180 { "max_combined_image_uniforms", GL_MAX_COMBINED_IMAGE_UNIFORMS, 8, 0, "gl_MaxCombinedImageUniforms" },
181 { "max_combined_vertex_uniform_components", GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, cvuc, 0, "" },
182 { "max_combined_geometry_uniform_components", GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, cguc, 0, "" },
183 { "max_combined_tess_control_uniform_components", GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS, ctcuc, 0, "" },
184 { "max_combined_tess_evaluation_uniform_components", GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS, cteuc, 0, "" },
185 { "max_combined_fragment_uniform_components", GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, cfuc, 0, "" },
186 { "max_debug_message_length", GL_MAX_DEBUG_MESSAGE_LENGTH, 1, 0, "" },
187 { "max_debug_logged_messages", GL_MAX_DEBUG_LOGGED_MESSAGES, 1, 0, "" },
188 { "max_debug_group_stack_depth", GL_MAX_DEBUG_GROUP_STACK_DEPTH, 64, 0, "" },
189 { "max_label_length", GL_MAX_LABEL_LENGTH, 256, 0, "" },
190 { "max_framebuffer_width", GL_MAX_FRAMEBUFFER_WIDTH, 16384, 0, "" },
191 { "max_framebuffer_height", GL_MAX_FRAMEBUFFER_HEIGHT, 16384, 0, "" },
192 { "max_framebuffer_layers", GL_MAX_FRAMEBUFFER_LAYERS, 2048, 0, "" },
193 { "max_framebuffer_samples", GL_MAX_FRAMEBUFFER_SAMPLES, 4, 0, "" },
194 { "max_sample_mask_words", GL_MAX_SAMPLE_MASK_WORDS, 1, 0, "" },
195 { "max_samples", GL_MAX_SAMPLES, 4, 0, "gl_MaxSamples" },
196 { "max_color_texture_samples", GL_MAX_COLOR_TEXTURE_SAMPLES, 1, 0, "" },
197 { "max_depth_texture_samples", GL_MAX_DEPTH_TEXTURE_SAMPLES, 1, 0, "" },
198 { "max_integer_samples", GL_MAX_INTEGER_SAMPLES, 1, 0, "" },
199 { "max_draw_buffers", GL_MAX_DRAW_BUFFERS, 8, 0, "gl_MaxDrawBuffers" },
200 { "max_dual_source_draw_buffers", GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, 1, 0, "" },
201 { "max_color_attachments", GL_MAX_COLOR_ATTACHMENTS, 8, 0, "" },
202 { "max_transform_feedback_interleaved_components", GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, 64, 0, "gl_MaxTransformFeedbackInterleavedComponents" },
203 { "max_transform_feedback_separate_attribs", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, 4, 0, "" },
204 { "max_transform_feedback_separate_components", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, 4, 0, "" },
205 { "max_transform_feedback_buffers", GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, 4, 0, "gl_MaxTransformFeedbackBuffers" },
206 { "max_atomic_counter_bindings", GL_NONE, 4, 0, "gl_MaxAtomicCounterBindings" },
207 { "max_combined_image_units_and_fragment_outputs", GL_NONE, 4, 0, "gl_MaxCombinedImageUnitsAndFragmentOutputs" },
208 { "max_geometry_varying_components", GL_NONE, 4, 0, "gl_MaxGeometryVaryingComponents" }
209 };
210
211 static const Limit<GLint64> int64Limits[] =
212 {
213 { "max_shader_storage_block_size", GL_MAX_SHADER_STORAGE_BLOCK_SIZE, 134217728, 0, "" },
214 { "max_element_index", GL_MAX_ELEMENT_INDEX, 4294967295LL, 0, "" },
215 };
216
217 static const Limit<GLuint64> uint64Limits[] =
218 {
219 { "max_server_wait_timeout", GL_MAX_SERVER_WAIT_TIMEOUT, 0, 0, "" },
220 };
221
222 static const Limit<GLfloat> floatLimits[] =
223 {
224 { "max_texture_lod_bias", GL_MAX_TEXTURE_LOD_BIAS, 2.0, 0, "" },
225 { "min_fragment_interpolation_offset", GL_MIN_FRAGMENT_INTERPOLATION_OFFSET, -0.5, 1, "" },
226 { "max_fragment_interpolation_offset", GL_MAX_FRAGMENT_INTERPOLATION_OFFSET, 0.5, 0, "" },
227 };
228
229 static const Limit<tcu::IVec3> ivec3Limits[] =
230 {
231 { "max_compute_work_group_count", GL_MAX_COMPUTE_WORK_GROUP_COUNT, tcu::IVec3(65535,65535,65535), 0, "gl_MaxComputeWorkGroupCount" },
232 { "max_compute_work_group_size", GL_MAX_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(1024, 1024, 64), 0, "gl_MaxComputeWorkGroupSize" },
233 };
234
235 for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(intLimits); idx++)
236 {
237 const Limit<GLint>& limit = intLimits[idx];
238 addChild(new glcts::LimitCase<GLint>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum, "450", limit.builtin ));
239 }
240
241 for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(int64Limits); idx++)
242 {
243 const Limit<GLint64>& limit = int64Limits[idx];
244 addChild(new glcts::LimitCase<GLint64>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum, "450", limit.builtin ));
245 }
246
247 for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(uint64Limits); idx++)
248 {
249 const Limit<GLuint64>& limit = uint64Limits[idx];
250 addChild(new glcts::LimitCase<GLuint64>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum, "450", limit.builtin ));
251 }
252
253 for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(floatLimits); idx++)
254 {
255 const Limit<GLfloat>& limit = floatLimits[idx];
256 addChild(new glcts::LimitCase<GLfloat>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum, "450", limit.builtin ));
257 }
258
259 for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(ivec3Limits); idx++)
260 {
261 const Limit<tcu::IVec3>& limit = ivec3Limits[idx];
262 addChild(new glcts::LimitCase<tcu::IVec3>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum, "450", limit.builtin ));
263 }
264 }
265
266 } /* glcts namespace */
267