xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cLimitsTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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     uint32_t 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         {"max_clip_distances", GL_MAX_CLIP_DISTANCES, 8, 0, "gl_MaxClipDistances"},
77         {"max_cull_distances", GL_MAX_CULL_DISTANCES, 8, 0, "gl_MaxCullDistances"},
78         {"max_combined_clip_and_cull_distances", GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES, 8, 0,
79          "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,
101          "gl_MaxVertexAtomicCounterBuffers"},
102         {"max_vertex_atomic_counters", GL_MAX_VERTEX_ATOMIC_COUNTERS, 0, 0, "gl_MaxVertexAtomicCounters"},
103         {"max_vertex_shader_storage_blocks", GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, 0, 0, ""},
104         {"max_tess_gen_level", GL_MAX_TESS_GEN_LEVEL, 64, 0, "gl_MaxTessGenLevel"},
105         {"max_patch_vertices", GL_MAX_PATCH_VERTICES, 32, 0, "gl_MaxPatchVertices"},
106         {"max_tess_control_uniform_components", GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS, 1024, 0,
107          "gl_MaxTessControlUniformComponents"},
108         {"max_tess_control_texture_image_units", GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS, 16, 0,
109          "gl_MaxTessControlTextureImageUnits"},
110         {"max_tess_control_output_components", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS, 128, 0,
111          "gl_MaxTessControlOutputComponents"},
112         {"max_tess_patch_components", GL_MAX_TESS_PATCH_COMPONENTS, 120, 0, "gl_MaxTessPatchComponents"},
113         {"max_tess_control_total_output_components", GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS, 4096, 0,
114          "gl_MaxTessControlTotalOutputComponents"},
115         {"max_tess_control_input_components", GL_MAX_TESS_CONTROL_INPUT_COMPONENTS, 128, 0,
116          "gl_MaxTessControlInputComponents"},
117         {"max_tess_control_uniform_blocks", GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS, 14, 0, ""},
118         {"max_tess_control_atomic_counter_buffers", GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS, 0, 0,
119          "gl_MaxTessControlAtomicCounterBuffers"},
120         {"max_tess_control_atomic_counters", GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS, 0, 0,
121          "gl_MaxTessControlAtomicCounters"},
122         {"max_tess_control_shader_storage_blocks", GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS, 0, 0, ""},
123         {"max_tess_evaluation_uniform_components", GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS, 1024, 0,
124          "gl_MaxTessEvaluationUniformComponents"},
125         {"max_tess_evaluation_texture_image_units", GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, 16, 0,
126          "gl_MaxTessEvaluationTextureImageUnits"},
127         {"max_tess_evaluation_output_components", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS, 128, 0,
128          "gl_MaxTessEvaluationOutputComponents"},
129         {"max_tess_evaluation_input_components", GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS, 128, 0,
130          "gl_MaxTessEvaluationInputComponents"},
131         {"max_tess_evaluation_uniform_blocks", GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, 14, 0, ""},
132         {"max_tess_evaluation_atomic_counter_buffers", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS, 0, 0,
133          "gl_MaxTessEvaluationAtomicCounterBuffers"},
134         {"max_tess_evaluation_atomic_counters", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS, 0, 0,
135          "gl_MaxTessEvaluationAtomicCounters"},
136         {"max_tess_evaluation_shader_storage_blocks", GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS, 0, 0, ""},
137         {"max_geometry_uniform_components", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS, 1024, 0,
138          "gl_MaxGeometryUniformComponents"},
139         {"max_geometry_uniform_blocks", GL_MAX_GEOMETRY_UNIFORM_BLOCKS, 14, 0, ""},
140         {"max_geometry_input_components", GL_MAX_GEOMETRY_INPUT_COMPONENTS, 64, 0, "gl_MaxGeometryInputComponents"},
141         {"max_geometry_output_components", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, 128, 0, "gl_MaxGeometryOutputComponents"},
142         {"max_geometry_output_vertices", GL_MAX_GEOMETRY_OUTPUT_VERTICES, 256, 0, "gl_MaxGeometryOutputVertices"},
143         {"max_geometry_total_output_components", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 1024, 0,
144          "gl_MaxGeometryTotalOutputComponents"},
145         {"max_geometry_texture_image_units", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, 16, 0,
146          "gl_MaxGeometryTextureImageUnits"},
147         {"max_geometry_shader_invocations", GL_MAX_GEOMETRY_SHADER_INVOCATIONS, 32, 0, ""},
148         {"max_vertex_streams", GL_MAX_VERTEX_STREAMS, 4, 0, ""},
149         {"max_geometry_atomic_counter_buffers", GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS, 0, 0,
150          "gl_MaxGeometryAtomicCounterBuffers"},
151         {"max_geometry_atomic_counters", GL_MAX_GEOMETRY_ATOMIC_COUNTERS, 0, 0, "gl_MaxGeometryAtomicCounters"},
152         {"max_geometry_shader_storage_blocks", GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, 0, 0, ""},
153         {"max_fragment_uniform_components", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, 1024, 0,
154          "gl_MaxFragmentUniformComponents"},
155         {"max_fragment_uniform_vectors", GL_MAX_FRAGMENT_UNIFORM_VECTORS, 256, 0, "gl_MaxFragmentUniformVectors"},
156         {"max_fragment_uniform_blocks", GL_MAX_FRAGMENT_UNIFORM_BLOCKS, 14, 0, ""},
157         {"max_fragment_input_components", GL_MAX_FRAGMENT_INPUT_COMPONENTS, 128, 0, "gl_MaxFragmentInputComponents"},
158         {"max_texture_image_units", GL_MAX_TEXTURE_IMAGE_UNITS, 16, 0, "gl_MaxTextureImageUnits"},
159         {"min_program_texture_gather_offset", GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET, -8, 1, ""},
160         {"max_program_texture_gather_offset", GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET, 7, 0, ""},
161         {"max_fragment_atomic_counter_buffers", GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, 1, 0,
162          "gl_MaxFragmentAtomicCounterBuffers"},
163         {"max_fragment_atomic_counters", GL_MAX_FRAGMENT_ATOMIC_COUNTERS, 8, 0, "gl_MaxFragmentAtomicCounters"},
164         {"max_fragment_shader_storage_blocks", GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, 8, 0, ""},
165         {"max_compute_work_group_invocations", GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, 1024, 0, ""},
166         {"max_compute_uniform_blocks", GL_MAX_COMPUTE_UNIFORM_BLOCKS, 14, 0, ""},
167         {"max_compute_texture_image_units", GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, 16, 0,
168          "gl_MaxComputeTextureImageUnits"},
169         {"max_compute_atomic_counter_buffers", GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, 8, 0,
170          "gl_MaxComputeAtomicCounterBuffers"},
171         {"max_compute_atomic_counters", GL_MAX_COMPUTE_ATOMIC_COUNTERS, 8, 0, "gl_MaxComputeAtomicCounters"},
172         {"max_compute_shared_memory_size", GL_MAX_COMPUTE_SHARED_MEMORY_SIZE, 32768, 0, ""},
173         {"max_compute_uniform_components", GL_MAX_COMPUTE_UNIFORM_COMPONENTS, 1024, 0,
174          "gl_MaxComputeUniformComponents"},
175         {"max_compute_image_uniforms", GL_MAX_COMPUTE_IMAGE_UNIFORMS, 8, 0, "gl_MaxComputeImageUniforms"},
176         {"max_combined_compute_uniform_components", GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, 0, 0,
177          ""}, // minimum was not specified
178         {"max_compute_shader_storage_blocks", GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, 8, 0, ""},
179         {"min_program_texel_offset", GL_MIN_PROGRAM_TEXEL_OFFSET, -8, 1, "gl_MinProgramTexelOffset"},
180         {"max_program_texel_offset", GL_MAX_PROGRAM_TEXEL_OFFSET, 7, 0, "gl_MaxProgramTexelOffset"},
181         {"max_uniform_buffer_bindings", GL_MAX_UNIFORM_BUFFER_BINDINGS, 84, 0, ""},
182         {"max_uniform_block_size", GL_MAX_UNIFORM_BLOCK_SIZE, 16384, 0, ""},
183         {"max_combined_uniform_blocks", GL_MAX_COMBINED_UNIFORM_BLOCKS, 70, 0, ""},
184         {"max_varying_components", GL_MAX_VARYING_COMPONENTS, 60, 0, "gl_MaxVaryingComponents"},
185         {"max_varying_vectors", GL_MAX_VARYING_VECTORS, 15, 0, "gl_MaxVaryingVectors"},
186         {"max_combined_texture_image_units", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, 80, 0,
187          "gl_MaxCombinedTextureImageUnits"},
188         {"max_subroutines", GL_MAX_SUBROUTINES, 256, 0, ""},
189         {"max_subroutine_uniform_locations", GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS, 1024, 0, ""},
190         {"max_uniform_locations", GL_MAX_UNIFORM_LOCATIONS, 1024, 0, ""},
191         {"max_atomic_counter_buffer_bindings", GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, 1, 0, ""},
192         {"max_atomic_counter_buffer_size", GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, 32, 0, "gl_MaxAtomicCounterBufferSize"},
193         {"max_combined_atomic_counter_buffers", GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, 1, 0,
194          "gl_MaxCombinedAtomicCounterBuffers"},
195         {"max_combined_atomic_counters", GL_MAX_COMBINED_ATOMIC_COUNTERS, 8, 0, "gl_MaxCombinedAtomicCounters"},
196         {"max_shader_storage_buffer_bindings", GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, 8, 0, ""},
197         {"max_combined_shader_storage_blocks", GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, 8, 0, ""},
198         {"max_image_units", GL_MAX_IMAGE_UNITS, 8, 0, "gl_MaxImageUnits"},
199         {"max_combined_shader_output_resources", GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, 8, 0,
200          "gl_MaxCombinedShaderOutputResources"},
201         {"max_image_samples", GL_MAX_IMAGE_SAMPLES, 0, 0, "gl_MaxImageSamples"},
202         {"max_vertex_image_uniforms", GL_MAX_VERTEX_IMAGE_UNIFORMS, 0, 0, "gl_MaxVertexImageUniforms"},
203         {"max_tess_control_image_uniforms", GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS, 0, 0, "gl_MaxTessControlImageUniforms"},
204         {"max_tess_evaluation_image_uniforms", GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS, 0, 0,
205          "gl_MaxTessEvaluationImageUniforms"},
206         {"max_geometry_image_uniforms", GL_MAX_GEOMETRY_IMAGE_UNIFORMS, 0, 0, "gl_MaxGeometryImageUniforms"},
207         {"max_fragment_image_uniforms", GL_MAX_FRAGMENT_IMAGE_UNIFORMS, 8, 0, "gl_MaxFragmentImageUniforms"},
208         {"max_combined_image_uniforms", GL_MAX_COMBINED_IMAGE_UNIFORMS, 8, 0, "gl_MaxCombinedImageUniforms"},
209         {"max_combined_vertex_uniform_components", GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, cvuc, 0, ""},
210         {"max_combined_geometry_uniform_components", GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, cguc, 0, ""},
211         {"max_combined_tess_control_uniform_components", GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS, ctcuc, 0, ""},
212         {"max_combined_tess_evaluation_uniform_components", GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS, cteuc,
213          0, ""},
214         {"max_combined_fragment_uniform_components", GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, cfuc, 0, ""},
215         {"max_debug_message_length", GL_MAX_DEBUG_MESSAGE_LENGTH, 1, 0, ""},
216         {"max_debug_logged_messages", GL_MAX_DEBUG_LOGGED_MESSAGES, 1, 0, ""},
217         {"max_debug_group_stack_depth", GL_MAX_DEBUG_GROUP_STACK_DEPTH, 64, 0, ""},
218         {"max_label_length", GL_MAX_LABEL_LENGTH, 256, 0, ""},
219         {"max_framebuffer_width", GL_MAX_FRAMEBUFFER_WIDTH, 16384, 0, ""},
220         {"max_framebuffer_height", GL_MAX_FRAMEBUFFER_HEIGHT, 16384, 0, ""},
221         {"max_framebuffer_layers", GL_MAX_FRAMEBUFFER_LAYERS, 2048, 0, ""},
222         {"max_framebuffer_samples", GL_MAX_FRAMEBUFFER_SAMPLES, 4, 0, ""},
223         {"max_sample_mask_words", GL_MAX_SAMPLE_MASK_WORDS, 1, 0, ""},
224         {"max_samples", GL_MAX_SAMPLES, 4, 0, "gl_MaxSamples"},
225         {"max_color_texture_samples", GL_MAX_COLOR_TEXTURE_SAMPLES, 1, 0, ""},
226         {"max_depth_texture_samples", GL_MAX_DEPTH_TEXTURE_SAMPLES, 1, 0, ""},
227         {"max_integer_samples", GL_MAX_INTEGER_SAMPLES, 1, 0, ""},
228         {"max_draw_buffers", GL_MAX_DRAW_BUFFERS, 8, 0, "gl_MaxDrawBuffers"},
229         {"max_dual_source_draw_buffers", GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, 1, 0, ""},
230         {"max_color_attachments", GL_MAX_COLOR_ATTACHMENTS, 8, 0, ""},
231         {"max_transform_feedback_interleaved_components", GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, 64, 0,
232          "gl_MaxTransformFeedbackInterleavedComponents"},
233         {"max_transform_feedback_separate_attribs", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, 4, 0, ""},
234         {"max_transform_feedback_separate_components", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, 4, 0, ""},
235         {"max_transform_feedback_buffers", GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, 4, 0, "gl_MaxTransformFeedbackBuffers"},
236         {"max_atomic_counter_bindings", GL_NONE, 4, 0, "gl_MaxAtomicCounterBindings"},
237         {"max_combined_image_units_and_fragment_outputs", GL_NONE, 4, 0, "gl_MaxCombinedImageUnitsAndFragmentOutputs"},
238         {"max_geometry_varying_components", GL_NONE, 4, 0, "gl_MaxGeometryVaryingComponents"}};
239 
240     static const Limit<GLint64> int64Limits[] = {
241         {"max_shader_storage_block_size", GL_MAX_SHADER_STORAGE_BLOCK_SIZE, 134217728, 0, ""},
242         {"max_element_index", GL_MAX_ELEMENT_INDEX, 4294967295LL, 0, ""},
243     };
244 
245     static const Limit<GLuint64> uint64Limits[] = {
246         {"max_server_wait_timeout", GL_MAX_SERVER_WAIT_TIMEOUT, 0, 0, ""},
247     };
248 
249     static const Limit<GLfloat> floatLimits[] = {
250         {"max_texture_lod_bias", GL_MAX_TEXTURE_LOD_BIAS, 2.0, 0, ""},
251         {"min_fragment_interpolation_offset", GL_MIN_FRAGMENT_INTERPOLATION_OFFSET, -0.5, 1, ""},
252         {"max_fragment_interpolation_offset", GL_MAX_FRAGMENT_INTERPOLATION_OFFSET, 0.5, 0, ""},
253     };
254 
255     static const Limit<tcu::IVec3> ivec3Limits[] = {
256         {"max_compute_work_group_count", GL_MAX_COMPUTE_WORK_GROUP_COUNT, tcu::IVec3(65535, 65535, 65535), 0,
257          "gl_MaxComputeWorkGroupCount"},
258         {"max_compute_work_group_size", GL_MAX_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(1024, 1024, 64), 0,
259          "gl_MaxComputeWorkGroupSize"},
260     };
261 
262     for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(intLimits); idx++)
263     {
264         const Limit<GLint> &limit = intLimits[idx];
265         addChild(new glcts::LimitCase<GLint>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum, "450",
266                                              limit.builtin));
267     }
268 
269     for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(int64Limits); idx++)
270     {
271         const Limit<GLint64> &limit = int64Limits[idx];
272         addChild(new glcts::LimitCase<GLint64>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum,
273                                                "450", limit.builtin));
274     }
275 
276     for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(uint64Limits); idx++)
277     {
278         const Limit<GLuint64> &limit = uint64Limits[idx];
279         addChild(new glcts::LimitCase<GLuint64>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum,
280                                                 "450", limit.builtin));
281     }
282 
283     for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(floatLimits); idx++)
284     {
285         const Limit<GLfloat> &limit = floatLimits[idx];
286         addChild(new glcts::LimitCase<GLfloat>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum,
287                                                "450", limit.builtin));
288     }
289 
290     for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(ivec3Limits); idx++)
291     {
292         const Limit<tcu::IVec3> &limit = ivec3Limits[idx];
293         addChild(new glcts::LimitCase<tcu::IVec3>(m_context, limit.name, limit.token, limit.boundry, limit.isMaximum,
294                                                   "450", limit.builtin));
295     }
296 }
297 
298 } // namespace gl4cts
299