blob: 4240e3f0358d0b11b7497e12eda70d5495588648 [file] [log] [blame]
/*-------------------------------------------------------------------------
* OpenGL Conformance Test Suite
* -----------------------------
*
* Copyright (c) 2014-2016 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/ /*!
* \file
* \brief
*/ /*-------------------------------------------------------------------*/
#include "esextcGeometryShaderTests.hpp"
#include "deRandom.hpp"
#include "deStringUtil.hpp"
#include "tcuCommandLine.hpp"
#include "esextcGeometryShaderAPI.hpp"
#include "esextcGeometryShaderAdjacencyTests.hpp"
#include "esextcGeometryShaderBlitting.hpp"
#include "esextcGeometryShaderClipping.hpp"
#include "esextcGeometryShaderConstantVariables.hpp"
#include "esextcGeometryShaderInput.hpp"
#include "esextcGeometryShaderLayeredFBO.hpp"
#include "esextcGeometryShaderLayeredFramebuffer.hpp"
#include "esextcGeometryShaderLayeredRendering.hpp"
#include "esextcGeometryShaderLayeredRenderingBoundaryCondition.hpp"
#include "esextcGeometryShaderLayeredRenderingFBONoAttachment.hpp"
#include "esextcGeometryShaderLimits.hpp"
#include "esextcGeometryShaderLinking.hpp"
#include "esextcGeometryShaderNonarrayInput.hpp"
#include "esextcGeometryShaderOutput.hpp"
#include "esextcGeometryShaderPrimitiveCounter.hpp"
#include "esextcGeometryShaderPrimitiveQueries.hpp"
#include "esextcGeometryShaderProgramResource.hpp"
#include "esextcGeometryShaderQualifiers.hpp"
#include "esextcGeometryShaderRendering.hpp"
namespace glcts
{
/** Constructor
*
* @param context Test context
* @param glslVersion GLSL version
* @param extType Extension type
**/
GeometryShaderTests::GeometryShaderTests(Context& context, const ExtParameters& extParams)
: TestCaseGroupBase(context, extParams, "geometry_shader", "Geometry Shader tests")
{
}
/**
* Initializes test groups for geometry shader tests
**/
void GeometryShaderTests::init(void)
{
/* Creating Test Groups */
TestCaseGroupBase* renderingTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "rendering", "Rendering (Test Group 1)");
TestCaseGroupBase* adjacencyTestGroup =
new GeometryShaderAdjacencyTests(m_context, m_extParams, "adjacency", "Adjacency (Test Group 2)");
TestCaseGroupBase* programResourceTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "program_resource", "Program Resource (Test Group 3)");
TestCaseGroupBase* nonarrayInputTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "nonarray_input", "Nonarray input (Test Group 4)");
TestCaseGroupBase* inputTestGroup = new TestCaseGroupBase(m_context, m_extParams, "input", "Input (Test Group 5)");
GeometryShaderPrimitiveCounterTestGroup* primitiveCounterTestGroup = new GeometryShaderPrimitiveCounterTestGroup(
m_context, m_extParams, "primitive_counter", "PrimitiveCounter (Test Group 6)");
TestCaseGroupBase* layeredRenderingTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "layered_rendering", "Layered rendering (Test Group 7)");
TestCaseGroupBase* clippingTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "clipping", "Clipping (Test Group 8)");
TestCaseGroupBase* blittingTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "blitting", "Blitting (Test Group 9)");
TestCaseGroupBase* layeredRenderingBoudaryCondition =
new TestCaseGroupBase(m_context, m_extParams, "layered_rendering_boundary_condition",
"Layered Rendering Boundary Condition (Test Group 10)");
TestCaseGroupBase* layeredFramebufferTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "layered_framebuffer", "Layered framebuffer (Test Group 11)");
TestCaseGroupBase* outputTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "output", "Output (Test Group 12)");
TestCaseGroupBase* primitiveQueriesTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "primitive_queries", "Primitive Queries (Test Group 13)");
TestCaseGroupBase* layeredRenderingFBONoAttachmentTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "layered_rendering_fbo_no_attachment",
"Layered rendering FBO no attachment (Test Group 14)");
TestCaseGroupBase* constantVariablesTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "constant_variables", "Constant Variables (Test Group 15)");
TestCaseGroupBase* limitsTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "limits", "Limits (Test Group 16)");
TestCaseGroupBase* linkingTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "linking", "Linking (Test Group 17 & Test Group 20)");
TestCaseGroupBase* apiTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "api", "API interactions (Test Group 18)");
TestCaseGroupBase* qualifiersTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "qualifiers", "Layout qualifiers (Test Group 22)");
TestCaseGroupBase* layeredFBOTestGroup =
new TestCaseGroupBase(m_context, m_extParams, "layered_fbo", "Layered FBOs (Test Group 21) & Test Group 26 ");
/* Adding tests groups as children of this test suite */
addChild(adjacencyTestGroup);
addChild(renderingTestGroup);
addChild(programResourceTestGroup);
addChild(nonarrayInputTestGroup);
addChild(inputTestGroup);
addChild(primitiveCounterTestGroup);
addChild(layeredRenderingTestGroup);
addChild(clippingTestGroup);
addChild(blittingTestGroup);
addChild(layeredRenderingBoudaryCondition);
addChild(layeredFramebufferTestGroup);
addChild(outputTestGroup);
addChild(primitiveQueriesTestGroup);
addChild(layeredRenderingFBONoAttachmentTestGroup);
addChild(constantVariablesTestGroup);
addChild(limitsTestGroup);
addChild(linkingTestGroup);
addChild(apiTestGroup);
addChild(qualifiersTestGroup);
addChild(layeredFBOTestGroup);
/* Adding tests to test groups */
/* Rendering test (Test Group 1) */
renderingTestGroup->addChild(new GeometryShaderRendering(m_context, m_extParams, "rendering", "Test 1"));
/* Program Resource test (Test Group 3) */
programResourceTestGroup->addChild(
new GeometryShaderProgramResourceTest(m_context, m_extParams, "program_resource", "Test 3.1"));
/* Nonarray input tests (Test Group 4) */
nonarrayInputTestGroup->addChild(
new GeometryShaderNonarrayInputCase(m_context, m_extParams, "nonarray_input", "Test 4.1"));
/* Input tests (Test Group 5) */
inputTestGroup->addChild(
new GeometryShader_gl_in_ArrayContentsTest(m_context, m_extParams, "gl_in_array_contents", "Test 5.1"));
inputTestGroup->addChild(
new GeometryShader_gl_in_ArrayLengthTest(m_context, m_extParams, "gl_in_array_length", "Test 5.2"));
inputTestGroup->addChild(
new GeometryShader_gl_PointSize_ValueTest(m_context, m_extParams, "gl_pointsize_value", "Test 5.3"));
inputTestGroup->addChild(
new GeometryShader_gl_Position_ValueTest(m_context, m_extParams, "gl_position_value", "Test 5.4"));
/* PrimitiveCounter tests (Test Group 6) */
//inputTestGroup->addChild(new PrimitiveCounter(m_context, m_extParams, "gl_primitive_counter", "Test 6"));
/* Layered rendering (Test Group 7 & Test Group 21) */
layeredRenderingTestGroup->addChild(new GeometryShaderLayeredRendering(m_context, m_extParams, "layered_rendering",
"Tests 7.1, 7.2, 7.3, 7.4 & 21.3"));
/* Clipping (Test group 8)*/
clippingTestGroup->addChild(new GeometryShaderClipping(m_context, m_extParams, "clipping", "Test 8.1"));
/* Clipping (Test group 9)*/
blittingTestGroup->addChild(
new GeometryShaderBlittingLayeredToNonLayered(m_context, m_extParams, "layered_nonlayered", "Test 9.1"));
blittingTestGroup->addChild(
new GeometryShaderBlittingNonLayeredToLayered(m_context, m_extParams, "nonlayered_layered", "Test 9.2"));
blittingTestGroup->addChild(
new GeometryShaderBlittingLayeredToLayered(m_context, m_extParams, "layered_layered", "Test 9.3"));
/* Layered rendering Boundary Condition FBO no attachment (Test Group 10) */
layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionVariousTextures(
m_context, m_extParams, "layered_rendering_boundary_condition_various_textures", "Test 10.1"));
layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionNoGS(
m_context, m_extParams, "layered_rendering_boundary_condition_no_gs", "Test 10.2"));
layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionNoLayerSet(
m_context, m_extParams, "layered_rendering_boundary_condition_no_default_layer", "Test 10.3"));
layeredRenderingBoudaryCondition->addChild(new GeometryShaderLayeredRenderingBoundaryConditionNoLayeredFBO(
m_context, m_extParams, "layered_rendering_boundary_condition_no_layered_fbo", "Test 10.4"));
/* Layered framebuffer (Test Group 11) */
layeredFramebufferTestGroup->addChild(
new GeometryShaderLayeredFramebufferStencil(m_context, m_extParams, "stencil_support", "Test 11.1"));
layeredFramebufferTestGroup->addChild(
new GeometryShaderLayeredFramebufferDepth(m_context, m_extParams, "depth_support", "Test 11.2"));
layeredFramebufferTestGroup->addChild(
new GeometryShaderLayeredFramebufferBlending(m_context, m_extParams, "blending_support", "Tests 11.3"));
layeredFramebufferTestGroup->addChild(
new GeometryShaderLayeredFramebufferClear(m_context, m_extParams, "clear_call_support", "Tests 11.4, 11.5"));
/* Output (Test Group 12) */
outputTestGroup->addChild(new GeometryShaderDuplicateOutputLayoutQualifierTest(
m_context, m_extParams, "conflicted_output_primitive", "Test 12.1"));
outputTestGroup->addChild(new GeometryShaderDuplicateMaxVerticesLayoutQualifierTest(
m_context, m_extParams, "conflicted_output_vertices_max", "Test 12.2"));
outputTestGroup->addChild(
new GeometryShaderIfVertexEmitIsDoneAtEndTest(m_context, m_extParams, "vertex_emit_at_end", "Test 12.3"));
outputTestGroup->addChild(new GeometryShaderMissingEndPrimitiveCallTest(m_context, m_extParams,
"primitive_end_done_at_end", "Test 12.4"));
outputTestGroup->addChild(new GeometryShaderMissingEndPrimitiveCallForSinglePrimitiveTest(
m_context, m_extParams, "primite_end_done_for_single_primitive", "Test 12.5"));
/* Layered rendering FBO no attachment (Test Group 13) */
primitiveQueriesTestGroup->addChild(new GeometryShaderPrimitiveQueriesPoints(
m_context, m_extParams, "primitive_queries_points", "Test 13.1, 13.2 - Points"));
primitiveQueriesTestGroup->addChild(new GeometryShaderPrimitiveQueriesLines(
m_context, m_extParams, "primitive_queries_lines", "Test 13.1, 13.2 - Lines"));
primitiveQueriesTestGroup->addChild(new GeometryShaderPrimitiveQueriesTriangles(
m_context, m_extParams, "primitive_queries_triangles", "Test 13.1, 13.2 - Triangles"));
/* Layered rendering FBO no attachment (Test Group 14 & Test Group 21) */
layeredRenderingFBONoAttachmentTestGroup->addChild(new GeometryShaderLayeredRenderingFBONoAttachment(
m_context, m_extParams, "layered_rendering_fbo_no_attachment", "Test 14.1, 14.2, Test 21.4"));
/* Constants Variables (Test Group 15) */
constantVariablesTestGroup->addChild(
new GeometryShaderConstantVariables(m_context, m_extParams, "constant_variables", "Test 15.1, Test 15.2"));
/* Limits (Test Group 16) */
limitsTestGroup->addChild(
new GeometryShaderMaxUniformComponentsTest(m_context, m_extParams, "max_uniform_components", "Test 16.1"));
limitsTestGroup->addChild(
new GeometryShaderMaxUniformBlocksTest(m_context, m_extParams, "max_uniform_blocks", "Test 16.2"));
limitsTestGroup->addChild(
new GeometryShaderMaxInputComponentsTest(m_context, m_extParams, "max_input_components", "Test 16.3"));
limitsTestGroup->addChild(
new GeometryShaderMaxOutputComponentsTest(m_context, m_extParams, "max_output_components", "Test 16.4"));
limitsTestGroup->addChild(
new GeometryShaderMaxOutputVerticesTest(m_context, m_extParams, "max_output_vertices", "Test 16.5"));
limitsTestGroup->addChild(new GeometryShaderMaxOutputComponentsSinglePointTest(
m_context, m_extParams, "max_output_components_single_point", "Test 16.6"));
limitsTestGroup->addChild(
new GeometryShaderMaxTextureUnitsTest(m_context, m_extParams, "max_texture_units", "Test 16.7"));
limitsTestGroup->addChild(
new GeometryShaderMaxInvocationsTest(m_context, m_extParams, "max_invocations", "Test 16.8"));
limitsTestGroup->addChild(new GeometryShaderMaxCombinedTextureUnitsTest(m_context, m_extParams,
"max_combined_texture_units", "Test 16.9"));
/* Linking (Test Group 17 & Test Group 20 & part of Test Group 23 & part of Test Group 24 & part of Test Group 25) */
linkingTestGroup->addChild(new GeometryShaderIncompleteProgramObjectsTest(
m_context, m_extParams, "incomplete_program_objects", "Test 17.1, 17.2"));
linkingTestGroup->addChild(
new GeometryShaderIncompleteGSTest(m_context, m_extParams, "incomplete_gs", "Test 17.3"));
linkingTestGroup->addChild(new GeometryShaderInvalidArrayedInputVariablesTest(
m_context, m_extParams, "invalid_arrayed_input_variables", "Test 17.4"));
linkingTestGroup->addChild(new GeometryShaderVSGSVariableTypeMismatchTest(
m_context, m_extParams, "vs_gs_variable_type_mismatch", "Test 20.1"));
linkingTestGroup->addChild(new GeometryShaderVSGSVariableQualifierMismatchTest(
m_context, m_extParams, "vs_gs_variable_qualifier_mismatch", "Test 20.2"));
linkingTestGroup->addChild(new GeometryShaderVSGSArrayedVariableSizeMismatchTest(
m_context, m_extParams, "vs_gs_arrayed_variable_size_mismatch", "Test 20.3"));
linkingTestGroup->addChild(
new GeometryShaderFragCoordRedeclarationTest(m_context, m_extParams, "fragcoord_redeclaration", "Test 20.4"));
linkingTestGroup->addChild(
new GeometryShaderLocationAliasingTest(m_context, m_extParams, "location_aliasing", "Test 20.5"));
linkingTestGroup->addChild(new GeometryShaderMoreACsInGSThanSupportedTest(
m_context, m_extParams, "more_ACs_in_GS_than_supported", "Test 23.4"));
linkingTestGroup->addChild(new GeometryShaderMoreACBsInGSThanSupportedTest(
m_context, m_extParams, "more_ACBs_in_GS_than_supported", "Test 23.6"));
linkingTestGroup->addChild(
new GeometryShaderCompilationFailTest(m_context, m_extParams, "geometry_shader_compilation_fail", "Test 24.1"));
linkingTestGroup->addChild(new GeometryShaderMoreInputVerticesThanAvailableTest(
m_context, m_extParams, "more_input_vertices_in_GS_than_available", "Test 24.4"));
linkingTestGroup->addChild(new GeometryShaderTransformFeedbackVertexAndGeometryShaderCaptureTest(
m_context, m_extParams, "tf_capture_from_gs_and_vs_variables", "Test 25.1"));
/* API interactions (Test Group 18 & Test Group 19 & part of Test Group 23 & part of Test Group 24 & part of Test Group 25) */
apiTestGroup->addChild(
new GeometryShaderCreateShaderProgramvTest(m_context, m_extParams, "createShaderProgramv", "Test 18.1"));
apiTestGroup->addChild(new GeometryShaderGetShaderivTest(m_context, m_extParams, "shader_type", "Test 18.2"));
apiTestGroup->addChild(new GeometryShaderGetProgramivTest(m_context, m_extParams, "getProgramiv", "Test 18.3"));
apiTestGroup->addChild(new GeometryShaderGetProgramiv2Test(m_context, m_extParams, "getProgramiv2", "Test 18.4"));
apiTestGroup->addChild(new GeometryShaderGetProgramiv3Test(m_context, m_extParams, "getProgramiv3", "Test 19.1"));
apiTestGroup->addChild(
new GeometryShaderDrawCallWithFSAndGS(m_context, m_extParams, "fs_gs_draw_call", "Test 19.2"));
apiTestGroup->addChild(
new GeometryShaderMaxImageUniformsTest(m_context, m_extParams, "max_image_uniforms", "Test 23.1"));
apiTestGroup->addChild(
new GeometryShaderMaxShaderStorageBlocksTest(m_context, m_extParams, "max_shader_storage_blocks", "Test 23.2"));
apiTestGroup->addChild(
new GeometryShaderMaxAtomicCountersTest(m_context, m_extParams, "max_atomic_counters", "Test 23.3"));
apiTestGroup->addChild(new GeometryShaderMaxAtomicCounterBuffersTest(m_context, m_extParams,
"max_atomic_counter_buffers", "Test 23.5"));
apiTestGroup->addChild(new GeometryShaderPiplineProgramObjectWithoutActiveVSProgramTest(
m_context, m_extParams, "pipeline_program_without_active_vs", "Test 24.2"));
apiTestGroup->addChild(new GeometryShaderIncompatibleDrawCallModeTest(m_context, m_extParams,
"incompatible_draw_call_mode", "Test 24.3"));
apiTestGroup->addChild(new GeometryShaderInsufficientEmittedVerticesTest(
m_context, m_extParams, "insufficient_emitted_vertices", "Test 24.5"));
apiTestGroup->addChild(new GeometryShaderPipelineObjectTransformFeedbackVertexAndGeometryShaderCaptureTest(
m_context, m_extParams, "program_pipeline_vs_gs_capture", "Test 25.2"));
apiTestGroup->addChild(new GeometryShaderDrawPrimitivesDoNotMatchOutputPrimitives(
m_context, m_extParams, "draw_primitives_do_not_match_output_primitives", "Test 25.3"));
apiTestGroup->addChild(
new GeometryShaderDrawCallsWhileTFPaused(m_context, m_extParams, "draw_calls_while_tf_is_paused", "Test 25.4"));
/* Layered FBOs (Test Group 21) & Test Group 26 */
layeredFBOTestGroup->addChild(
new GeometryShaderIncompleteLayeredFBOTest(m_context, m_extParams, "layered_fbo", "Test 21.1"));
layeredFBOTestGroup->addChild(new GeometryShaderIncompleteLayeredAttachmentsTest(
m_context, m_extParams, "layered_fbo_attachments", "Test 21.2"));
layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidTarget(
m_context, m_extParams, "fb_texture_invalid_target", "Test 26.1"));
layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureNoFBOBoundToTarget(
m_context, m_extParams, "fb_texture_no_fbo_bound_to_target", "Test 26.2"));
layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidAttachment(
m_context, m_extParams, "fb_texture_invalid_attachment", "Test 26.3"));
layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidValue(
m_context, m_extParams, "fb_texture_invalid_value", "Test 26.4"));
layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureInvalidLevelNumber(
m_context, m_extParams, "fb_texture_invalid_level_number", "Test 26.5"));
layeredFBOTestGroup->addChild(new GeometryShaderFramebufferTextureArgumentRefersToBufferTexture(
m_context, m_extParams, "fb_texture_argument_refers_to_buffer_texture", "Test 26.6"));
/* Layout qualifiers (Test Group 22) */
qualifiersTestGroup->addChild(
new GeometryShaderFlatInterpolationTest(m_context, m_extParams, "flat_interpolation", "Test 22.1"));
}
} // glcts