• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*-------------------------------------------------------------------------
2  * OpenGL Conformance Test Suite
3  * -----------------------------
4  *
5  * Copyright (c) 2014-2016 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
21  * \brief
22  */ /*-------------------------------------------------------------------*/
23 
24 #include "esextcGeometryShaderTests.hpp"
25 #include "deRandom.hpp"
26 #include "deStringUtil.hpp"
27 #include "tcuCommandLine.hpp"
28 
29 #include "esextcGeometryShaderAPI.hpp"
30 #include "esextcGeometryShaderAdjacencyTests.hpp"
31 #include "esextcGeometryShaderBlitting.hpp"
32 #include "esextcGeometryShaderClipping.hpp"
33 #include "esextcGeometryShaderConstantVariables.hpp"
34 #include "esextcGeometryShaderInput.hpp"
35 #include "esextcGeometryShaderLayeredFBO.hpp"
36 #include "esextcGeometryShaderLayeredFramebuffer.hpp"
37 #include "esextcGeometryShaderLayeredRendering.hpp"
38 #include "esextcGeometryShaderLayeredRenderingBoundaryCondition.hpp"
39 #include "esextcGeometryShaderLayeredRenderingFBONoAttachment.hpp"
40 #include "esextcGeometryShaderLimits.hpp"
41 #include "esextcGeometryShaderLinking.hpp"
42 #include "esextcGeometryShaderNonarrayInput.hpp"
43 #include "esextcGeometryShaderOutput.hpp"
44 #include "esextcGeometryShaderPrimitiveCounter.hpp"
45 #include "esextcGeometryShaderPrimitiveQueries.hpp"
46 #include "esextcGeometryShaderProgramResource.hpp"
47 #include "esextcGeometryShaderQualifiers.hpp"
48 #include "esextcGeometryShaderRendering.hpp"
49 
50 namespace glcts
51 {
52 /** Constructor
53  *
54  * @param context       Test context
55  * @param glslVersion   GLSL version
56  * @param extType       Extension type
57  **/
GeometryShaderTests(Context & context,const ExtParameters & extParams)58 GeometryShaderTests::GeometryShaderTests(Context& context, const ExtParameters& extParams)
59 	: TestCaseGroupBase(context, extParams, "geometry_shader", "Geometry Shader tests")
60 {
61 }
62 
63 /**
64  * Initializes test groups for geometry shader tests
65  **/
init(void)66 void GeometryShaderTests::init(void)
67 {
68 	/* Creating Test Groups */
69 	TestCaseGroupBase* renderingTestGroup =
70 		new TestCaseGroupBase(m_context, m_extParams, "rendering", "Rendering (Test Group 1)");
71 	TestCaseGroupBase* adjacencyTestGroup =
72 		new GeometryShaderAdjacencyTests(m_context, m_extParams, "adjacency", "Adjacency (Test Group 2)");
73 	TestCaseGroupBase* programResourceTestGroup =
74 		new TestCaseGroupBase(m_context, m_extParams, "program_resource", "Program Resource (Test Group 3)");
75 	TestCaseGroupBase* nonarrayInputTestGroup =
76 		new TestCaseGroupBase(m_context, m_extParams, "nonarray_input", "Nonarray input (Test Group 4)");
77 	TestCaseGroupBase* inputTestGroup = new TestCaseGroupBase(m_context, m_extParams, "input", "Input (Test Group 5)");
78 
79 	GeometryShaderPrimitiveCounterTestGroup* primitiveCounterTestGroup = new GeometryShaderPrimitiveCounterTestGroup(
80 		m_context, m_extParams, "primitive_counter", "PrimitiveCounter (Test Group 6)");
81 
82 	TestCaseGroupBase* layeredRenderingTestGroup =
83 		new TestCaseGroupBase(m_context, m_extParams, "layered_rendering", "Layered rendering (Test Group 7)");
84 	TestCaseGroupBase* clippingTestGroup =
85 		new TestCaseGroupBase(m_context, m_extParams, "clipping", "Clipping (Test Group 8)");
86 	TestCaseGroupBase* blittingTestGroup =
87 		new TestCaseGroupBase(m_context, m_extParams, "blitting", "Blitting (Test Group 9)");
88 
89 	TestCaseGroupBase* layeredRenderingBoudaryCondition =
90 		new TestCaseGroupBase(m_context, m_extParams, "layered_rendering_boundary_condition",
91 							  "Layered Rendering Boundary Condition (Test Group 10)");
92 
93 	TestCaseGroupBase* layeredFramebufferTestGroup =
94 		new TestCaseGroupBase(m_context, m_extParams, "layered_framebuffer", "Layered framebuffer (Test Group 11)");
95 
96 	TestCaseGroupBase* outputTestGroup =
97 		new TestCaseGroupBase(m_context, m_extParams, "output", "Output (Test Group 12)");
98 	TestCaseGroupBase* primitiveQueriesTestGroup =
99 		new TestCaseGroupBase(m_context, m_extParams, "primitive_queries", "Primitive Queries (Test Group 13)");
100 
101 	TestCaseGroupBase* layeredRenderingFBONoAttachmentTestGroup =
102 		new TestCaseGroupBase(m_context, m_extParams, "layered_rendering_fbo_no_attachment",
103 							  "Layered rendering FBO no attachment (Test Group 14)");
104 
105 	TestCaseGroupBase* constantVariablesTestGroup =
106 		new TestCaseGroupBase(m_context, m_extParams, "constant_variables", "Constant Variables (Test Group 15)");
107 	TestCaseGroupBase* limitsTestGroup =
108 		new TestCaseGroupBase(m_context, m_extParams, "limits", "Limits (Test Group 16)");
109 	TestCaseGroupBase* linkingTestGroup =
110 		new TestCaseGroupBase(m_context, m_extParams, "linking", "Linking (Test Group 17 & Test Group 20)");
111 	TestCaseGroupBase* apiTestGroup =
112 		new TestCaseGroupBase(m_context, m_extParams, "api", "API interactions (Test Group 18)");
113 	TestCaseGroupBase* qualifiersTestGroup =
114 		new TestCaseGroupBase(m_context, m_extParams, "qualifiers", "Layout qualifiers (Test Group 22)");
115 	TestCaseGroupBase* layeredFBOTestGroup =
116 		new TestCaseGroupBase(m_context, m_extParams, "layered_fbo", "Layered FBOs (Test Group 21) & Test Group 26 ");
117 
118 	/* Adding tests groups as children of this test suite */
119 	addChild(adjacencyTestGroup);
120 	addChild(renderingTestGroup);
121 	addChild(programResourceTestGroup);
122 	addChild(nonarrayInputTestGroup);
123 	addChild(inputTestGroup);
124 	addChild(primitiveCounterTestGroup);
125 	addChild(layeredRenderingTestGroup);
126 	addChild(clippingTestGroup);
127 	addChild(blittingTestGroup);
128 	addChild(layeredRenderingBoudaryCondition);
129 	addChild(layeredFramebufferTestGroup);
130 	addChild(outputTestGroup);
131 	addChild(primitiveQueriesTestGroup);
132 	addChild(layeredRenderingFBONoAttachmentTestGroup);
133 	addChild(constantVariablesTestGroup);
134 	addChild(limitsTestGroup);
135 	addChild(linkingTestGroup);
136 	addChild(apiTestGroup);
137 	addChild(qualifiersTestGroup);
138 	addChild(layeredFBOTestGroup);
139 
140 	/* Adding tests to test groups */
141 
142 	/* Rendering test (Test Group 1) */
143 	renderingTestGroup->addChild(new GeometryShaderRendering(m_context, m_extParams, "rendering", "Test 1"));
144 
145 	/* Program Resource test (Test Group 3) */
146 	programResourceTestGroup->addChild(
147 		new GeometryShaderProgramResourceTest(m_context, m_extParams, "program_resource", "Test 3.1"));
148 
149 	/* Nonarray input tests (Test Group 4) */
150 	nonarrayInputTestGroup->addChild(
151 		new GeometryShaderNonarrayInputCase(m_context, m_extParams, "nonarray_input", "Test 4.1"));
152 
153 	/* Input tests (Test Group 5) */
154 	inputTestGroup->addChild(
155 		new GeometryShader_gl_in_ArrayContentsTest(m_context, m_extParams, "gl_in_array_contents", "Test 5.1"));
156 	inputTestGroup->addChild(
157 		new GeometryShader_gl_in_ArrayLengthTest(m_context, m_extParams, "gl_in_array_length", "Test 5.2"));
158 	inputTestGroup->addChild(
159 		new GeometryShader_gl_PointSize_ValueTest(m_context, m_extParams, "gl_pointsize_value", "Test 5.3"));
160 	inputTestGroup->addChild(
161 		new GeometryShader_gl_Position_ValueTest(m_context, m_extParams, "gl_position_value", "Test 5.4"));
162 
163 	/* PrimitiveCounter tests (Test Group 6) */
164 	//inputTestGroup->addChild(new PrimitiveCounter(m_context, m_extParams, "gl_primitive_counter", "Test 6"));
165 	/* Layered rendering (Test Group 7 & Test Group 21) */
166 	layeredRenderingTestGroup->addChild(new GeometryShaderLayeredRendering(m_context, m_extParams, "layered_rendering",
167 																		   "Tests 7.1, 7.2, 7.3, 7.4 & 21.3"));
168 
169 	/* Clipping (Test group 8)*/
170 	clippingTestGroup->addChild(new GeometryShaderClipping(m_context, m_extParams, "clipping", "Test 8.1"));
171 
172 	/* Clipping (Test group 9)*/
173 	blittingTestGroup->addChild(
174 		new GeometryShaderBlittingLayeredToNonLayered(m_context, m_extParams, "layered_nonlayered", "Test 9.1"));
175 	blittingTestGroup->addChild(
176 		new GeometryShaderBlittingNonLayeredToLayered(m_context, m_extParams, "nonlayered_layered", "Test 9.2"));
177 	blittingTestGroup->addChild(
178 		new GeometryShaderBlittingLayeredToLayered(m_context, m_extParams, "layered_layered", "Test 9.3"));
179 
180 	/* Layered rendering Boundary Condition FBO no attachment (Test Group 10) */
181 	layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionVariousTextures(
182 		m_context, m_extParams, "layered_rendering_boundary_condition_various_textures", "Test 10.1"));
183 
184 	layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionNoGS(
185 		m_context, m_extParams, "layered_rendering_boundary_condition_no_gs", "Test 10.2"));
186 
187 	layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionNoLayerSet(
188 		m_context, m_extParams, "layered_rendering_boundary_condition_no_default_layer", "Test 10.3"));
189 
190 	layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionNoLayeredFBO(
191 		m_context, m_extParams, "layered_rendering_boundary_condition_no_layered_fbo", "Test 10.4"));
192 
193 	/* Layered framebuffer (Test Group 11) */
194 	layeredFramebufferTestGroup->addChild(
195 		new GeometryShaderLayeredFramebufferStencil(m_context, m_extParams, "stencil_support", "Test 11.1"));
196 	layeredFramebufferTestGroup->addChild(
197 		new GeometryShaderLayeredFramebufferDepth(m_context, m_extParams, "depth_support", "Test 11.2"));
198 	layeredFramebufferTestGroup->addChild(
199 		new GeometryShaderLayeredFramebufferBlending(m_context, m_extParams, "blending_support", "Tests 11.3"));
200 	layeredFramebufferTestGroup->addChild(
201 		new GeometryShaderLayeredFramebufferClear(m_context, m_extParams, "clear_call_support", "Tests 11.4, 11.5"));
202 
203 	/* Output (Test Group 12) */
204 	outputTestGroup->addChild(new GeometryShaderDuplicateOutputLayoutQualifierTest(
205 		m_context, m_extParams, "conflicted_output_primitive", "Test 12.1"));
206 	outputTestGroup->addChild(new GeometryShaderDuplicateMaxVerticesLayoutQualifierTest(
207 		m_context, m_extParams, "conflicted_output_vertices_max", "Test 12.2"));
208 	outputTestGroup->addChild(
209 		new GeometryShaderIfVertexEmitIsDoneAtEndTest(m_context, m_extParams, "vertex_emit_at_end", "Test 12.3"));
210 	outputTestGroup->addChild(new GeometryShaderMissingEndPrimitiveCallTest(m_context, m_extParams,
211 																			"primitive_end_done_at_end", "Test 12.4"));
212 	outputTestGroup->addChild(new GeometryShaderMissingEndPrimitiveCallForSinglePrimitiveTest(
213 		m_context, m_extParams, "primite_end_done_for_single_primitive", "Test 12.5"));
214 
215 	/* Layered rendering FBO no attachment (Test Group 13) */
216 	primitiveQueriesTestGroup->addChild(new GeometryShaderPrimitiveQueriesPoints(
217 		m_context, m_extParams, "primitive_queries_points", "Test 13.1, 13.2 - Points"));
218 	primitiveQueriesTestGroup->addChild(new GeometryShaderPrimitiveQueriesLines(
219 		m_context, m_extParams, "primitive_queries_lines", "Test 13.1, 13.2 - Lines"));
220 	primitiveQueriesTestGroup->addChild(new GeometryShaderPrimitiveQueriesTriangles(
221 		m_context, m_extParams, "primitive_queries_triangles", "Test 13.1, 13.2 - Triangles"));
222 
223 	/* Layered rendering FBO no attachment (Test Group 14 & Test Group 21) */
224 	layeredRenderingFBONoAttachmentTestGroup->addChild(new GeometryShaderLayeredRenderingFBONoAttachment(
225 		m_context, m_extParams, "layered_rendering_fbo_no_attachment", "Test 14.1, 14.2, Test 21.4"));
226 
227 	/* Constants Variables (Test Group 15) */
228 	constantVariablesTestGroup->addChild(
229 		new GeometryShaderConstantVariables(m_context, m_extParams, "constant_variables", "Test 15.1, Test 15.2"));
230 
231 	/* Limits (Test Group 16) */
232 	limitsTestGroup->addChild(
233 		new GeometryShaderMaxUniformComponentsTest(m_context, m_extParams, "max_uniform_components", "Test 16.1"));
234 	limitsTestGroup->addChild(
235 		new GeometryShaderMaxUniformBlocksTest(m_context, m_extParams, "max_uniform_blocks", "Test 16.2"));
236 	limitsTestGroup->addChild(
237 		new GeometryShaderMaxInputComponentsTest(m_context, m_extParams, "max_input_components", "Test 16.3"));
238 	limitsTestGroup->addChild(
239 		new GeometryShaderMaxOutputComponentsTest(m_context, m_extParams, "max_output_components", "Test 16.4"));
240 	limitsTestGroup->addChild(
241 		new GeometryShaderMaxOutputVerticesTest(m_context, m_extParams, "max_output_vertices", "Test 16.5"));
242 	limitsTestGroup->addChild(new GeometryShaderMaxOutputComponentsSinglePointTest(
243 		m_context, m_extParams, "max_output_components_single_point", "Test 16.6"));
244 	limitsTestGroup->addChild(
245 		new GeometryShaderMaxTextureUnitsTest(m_context, m_extParams, "max_texture_units", "Test 16.7"));
246 	limitsTestGroup->addChild(
247 		new GeometryShaderMaxInvocationsTest(m_context, m_extParams, "max_invocations", "Test 16.8"));
248 	limitsTestGroup->addChild(new GeometryShaderMaxCombinedTextureUnitsTest(m_context, m_extParams,
249 																			"max_combined_texture_units", "Test 16.9"));
250 
251 	/* Linking (Test Group 17 & Test Group 20 & part of Test Group 23 & part of Test Group 24 & part of Test Group 25) */
252 	linkingTestGroup->addChild(new GeometryShaderIncompleteProgramObjectsTest(
253 		m_context, m_extParams, "incomplete_program_objects", "Test 17.1, 17.2"));
254 	linkingTestGroup->addChild(
255 		new GeometryShaderIncompleteGSTest(m_context, m_extParams, "incomplete_gs", "Test 17.3"));
256 	linkingTestGroup->addChild(new GeometryShaderInvalidArrayedInputVariablesTest(
257 		m_context, m_extParams, "invalid_arrayed_input_variables", "Test 17.4"));
258 
259 	linkingTestGroup->addChild(new GeometryShaderVSGSVariableTypeMismatchTest(
260 		m_context, m_extParams, "vs_gs_variable_type_mismatch", "Test 20.1"));
261 	linkingTestGroup->addChild(new GeometryShaderVSGSVariableQualifierMismatchTest(
262 		m_context, m_extParams, "vs_gs_variable_qualifier_mismatch", "Test 20.2"));
263 	linkingTestGroup->addChild(new GeometryShaderVSGSArrayedVariableSizeMismatchTest(
264 		m_context, m_extParams, "vs_gs_arrayed_variable_size_mismatch", "Test 20.3"));
265 	linkingTestGroup->addChild(
266 		new GeometryShaderFragCoordRedeclarationTest(m_context, m_extParams, "fragcoord_redeclaration", "Test 20.4"));
267 	linkingTestGroup->addChild(
268 		new GeometryShaderLocationAliasingTest(m_context, m_extParams, "location_aliasing", "Test 20.5"));
269 
270 	linkingTestGroup->addChild(new GeometryShaderMoreACsInGSThanSupportedTest(
271 		m_context, m_extParams, "more_ACs_in_GS_than_supported", "Test 23.4"));
272 	linkingTestGroup->addChild(new GeometryShaderMoreACBsInGSThanSupportedTest(
273 		m_context, m_extParams, "more_ACBs_in_GS_than_supported", "Test 23.6"));
274 
275 	linkingTestGroup->addChild(
276 		new GeometryShaderCompilationFailTest(m_context, m_extParams, "geometry_shader_compilation_fail", "Test 24.1"));
277 	linkingTestGroup->addChild(new GeometryShaderMoreInputVerticesThanAvailableTest(
278 		m_context, m_extParams, "more_input_vertices_in_GS_than_available", "Test 24.4"));
279 
280 	linkingTestGroup->addChild(new GeometryShaderTransformFeedbackVertexAndGeometryShaderCaptureTest(
281 		m_context, m_extParams, "tf_capture_from_gs_and_vs_variables", "Test 25.1"));
282 
283 	/* API interactions (Test Group 18 & Test Group 19 & part of Test Group 23  & part of Test Group 24 & part of Test Group 25) */
284 	apiTestGroup->addChild(
285 		new GeometryShaderCreateShaderProgramvTest(m_context, m_extParams, "createShaderProgramv", "Test 18.1"));
286 	apiTestGroup->addChild(new GeometryShaderGetShaderivTest(m_context, m_extParams, "shader_type", "Test 18.2"));
287 	apiTestGroup->addChild(new GeometryShaderGetProgramivTest(m_context, m_extParams, "getProgramiv", "Test 18.3"));
288 	apiTestGroup->addChild(new GeometryShaderGetProgramiv2Test(m_context, m_extParams, "getProgramiv2", "Test 18.4"));
289 
290 	apiTestGroup->addChild(new GeometryShaderGetProgramiv3Test(m_context, m_extParams, "getProgramiv3", "Test 19.1"));
291 	apiTestGroup->addChild(
292 		new GeometryShaderDrawCallWithFSAndGS(m_context, m_extParams, "fs_gs_draw_call", "Test 19.2"));
293 
294 	apiTestGroup->addChild(
295 		new GeometryShaderMaxImageUniformsTest(m_context, m_extParams, "max_image_uniforms", "Test 23.1"));
296 	apiTestGroup->addChild(
297 		new GeometryShaderMaxShaderStorageBlocksTest(m_context, m_extParams, "max_shader_storage_blocks", "Test 23.2"));
298 	apiTestGroup->addChild(
299 		new GeometryShaderMaxAtomicCountersTest(m_context, m_extParams, "max_atomic_counters", "Test 23.3"));
300 	apiTestGroup->addChild(new GeometryShaderMaxAtomicCounterBuffersTest(m_context, m_extParams,
301 																		 "max_atomic_counter_buffers", "Test 23.5"));
302 
303 	apiTestGroup->addChild(new GeometryShaderPiplineProgramObjectWithoutActiveVSProgramTest(
304 		m_context, m_extParams, "pipeline_program_without_active_vs", "Test 24.2"));
305 	apiTestGroup->addChild(new GeometryShaderIncompatibleDrawCallModeTest(m_context, m_extParams,
306 																		  "incompatible_draw_call_mode", "Test 24.3"));
307 	apiTestGroup->addChild(new GeometryShaderInsufficientEmittedVerticesTest(
308 		m_context, m_extParams, "insufficient_emitted_vertices", "Test 24.5"));
309 
310 	apiTestGroup->addChild(new GeometryShaderPipelineObjectTransformFeedbackVertexAndGeometryShaderCaptureTest(
311 		m_context, m_extParams, "program_pipeline_vs_gs_capture", "Test 25.2"));
312 
313 	apiTestGroup->addChild(new GeometryShaderDrawPrimitivesDoNotMatchOutputPrimitives(
314 		m_context, m_extParams, "draw_primitives_do_not_match_output_primitives", "Test 25.3"));
315 	apiTestGroup->addChild(
316 		new GeometryShaderDrawCallsWhileTFPaused(m_context, m_extParams, "draw_calls_while_tf_is_paused", "Test 25.4"));
317 
318 	/* Layered FBOs (Test Group 21) & Test Group 26 */
319 	layeredFBOTestGroup->addChild(
320 		new GeometryShaderIncompleteLayeredFBOTest(m_context, m_extParams, "layered_fbo", "Test 21.1"));
321 	layeredFBOTestGroup->addChild(new GeometryShaderIncompleteLayeredAttachmentsTest(
322 		m_context, m_extParams, "layered_fbo_attachments", "Test 21.2"));
323 
324 	layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidTarget(
325 		m_context, m_extParams, "fb_texture_invalid_target", "Test 26.1"));
326 	layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureNoFBOBoundToTarget(
327 		m_context, m_extParams, "fb_texture_no_fbo_bound_to_target", "Test 26.2"));
328 	layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidAttachment(
329 		m_context, m_extParams, "fb_texture_invalid_attachment", "Test 26.3"));
330 	layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidValue(
331 		m_context, m_extParams, "fb_texture_invalid_value", "Test 26.4"));
332 	layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidLevelNumber(
333 		m_context, m_extParams, "fb_texture_invalid_level_number", "Test 26.5"));
334 	layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureArgumentRefersToBufferTexture(
335 		m_context, m_extParams, "fb_texture_argument_refers_to_buffer_texture", "Test 26.6"));
336 
337 	/* Layout qualifiers (Test Group 22) */
338 	qualifiersTestGroup->addChild(
339 		new GeometryShaderFlatInterpolationTest(m_context, m_extParams, "flat_interpolation", "Test 22.1"));
340 }
341 
342 } // glcts
343