return testGroup.release();
}
+tcu::TestCaseGroup* createFloat16Tests (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "float16", "Float 16 tests"));
+
+ testGroup->addChild(createOpConstantFloat16Tests(testCtx));
+ testGroup->addChild(createFloat16LogicalSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16FuncSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createDerivativeTests<256, 1>(testCtx));
+ testGroup->addChild(createDerivativeTests<256, 2>(testCtx));
+ testGroup->addChild(createDerivativeTests<256, 4>(testCtx));
+ testGroup->addChild(createFloat16VectorExtractSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16VectorInsertSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16VectorShuffleSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16CompositeConstructSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<GraphicsResources>(testCtx, "OpCompositeExtract"));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<GraphicsResources>(testCtx, "OpCompositeInsert"));
+ testGroup->addChild(createFloat16ArithmeticSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<1, GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<2, GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<3, GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<4, GraphicsResources>(testCtx));
+
+ return testGroup.release();
+}
+
+tcu::TestCaseGroup* createFloat16Group (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "float16", "Float 16 tests"));
+
+ testGroup->addChild(createFloat16OpConstantCompositeGroup(testCtx));
+ testGroup->addChild(createFloat16LogicalSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16FuncSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16VectorExtractSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16VectorInsertSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16VectorShuffleSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16CompositeConstructSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<ComputeShaderSpec>(testCtx, "OpCompositeExtract"));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<ComputeShaderSpec>(testCtx, "OpCompositeInsert"));
+ testGroup->addChild(createFloat16ArithmeticSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<1, ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<2, ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<3, ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<4, ComputeShaderSpec>(testCtx));
+
+ return testGroup.release();
+}
+
+ tcu::TestCaseGroup* createOpNameAbuseTests (tcu::TestContext& testCtx)
+ {
+ de::MovePtr<tcu::TestCaseGroup> abuseGroup(new tcu::TestCaseGroup(testCtx, "opname_abuse", "OpName abuse tests"));
+ vector<CaseParameter> abuseCases;
+ RGBA defaultColors[4];
+ map<string, string> opNameFragments;
+
+ getOpNameAbuseCases(abuseCases);
+ getDefaultColors(defaultColors);
+
+ opNameFragments["testfun"] =
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ "%param1 = OpFunctionParameter %v4f32\n"
+ "%label_func = OpLabel\n"
+ "%a = OpVectorExtractDynamic %f32 %param1 %c_i32_0\n"
+ "%b = OpFAdd %f32 %a %a\n"
+ "%c = OpFSub %f32 %b %a\n"
+ "%ret = OpVectorInsertDynamic %v4f32 %param1 %c %c_i32_0\n"
+ "OpReturnValue %ret\n"
+ "OpFunctionEnd\n";
+
+ for (unsigned int i = 0; i < abuseCases.size(); i++)
+ {
+ string casename;
+ casename = string("main") + abuseCases[i].name;
+
+ opNameFragments["debug"] =
+ "OpName %BP_main \"" + abuseCases[i].param + "\"";
+
+ createTestsForAllStages(casename, defaultColors, defaultColors, opNameFragments, abuseGroup.get());
+ }
+
+ for (unsigned int i = 0; i < abuseCases.size(); i++)
+ {
+ string casename;
+ casename = string("b") + abuseCases[i].name;
+
+ opNameFragments["debug"] =
+ "OpName %b \"" + abuseCases[i].param + "\"";
+
+ createTestsForAllStages(casename, defaultColors, defaultColors, opNameFragments, abuseGroup.get());
+ }
+
+ {
+ opNameFragments["debug"] =
+ "OpName %test_code \"name1\"\n"
+ "OpName %param1 \"name2\"\n"
+ "OpName %a \"name3\"\n"
+ "OpName %b \"name4\"\n"
+ "OpName %c \"name5\"\n"
+ "OpName %ret \"name6\"\n";
+
+ createTestsForAllStages("everything_named", defaultColors, defaultColors, opNameFragments, abuseGroup.get());
+ }
+
+ {
+ opNameFragments["debug"] =
+ "OpName %test_code \"the_same\"\n"
+ "OpName %param1 \"the_same\"\n"
+ "OpName %a \"the_same\"\n"
+ "OpName %b \"the_same\"\n"
+ "OpName %c \"the_same\"\n"
+ "OpName %ret \"the_same\"\n";
+
+ createTestsForAllStages("everything_named_the_same", defaultColors, defaultColors, opNameFragments, abuseGroup.get());
+ }
+
+ {
+ opNameFragments["debug"] =
+ "OpName %BP_main \"to_be\"\n"
+ "OpName %BP_main \"or_not\"\n"
+ "OpName %BP_main \"to_be\"\n";
+
+ createTestsForAllStages("main_has_multiple_names", defaultColors, defaultColors, opNameFragments, abuseGroup.get());
+ }
+
+ {
+ opNameFragments["debug"] =
+ "OpName %b \"to_be\"\n"
+ "OpName %b \"or_not\"\n"
+ "OpName %b \"to_be\"\n";
+
+ createTestsForAllStages("b_has_multiple_names", defaultColors, defaultColors, opNameFragments, abuseGroup.get());
+ }
+
+ return abuseGroup.release();
+ }
+
+
+ tcu::TestCaseGroup* createOpMemberNameAbuseTests (tcu::TestContext& testCtx)
+ {
+ de::MovePtr<tcu::TestCaseGroup> abuseGroup(new tcu::TestCaseGroup(testCtx, "opmembername_abuse", "OpName abuse tests"));
+ vector<CaseParameter> abuseCases;
+ RGBA defaultColors[4];
+ map<string, string> opMemberNameFragments;
+
+ getOpNameAbuseCases(abuseCases);
+ getDefaultColors(defaultColors);
+
+ opMemberNameFragments["pre_main"] =
+ "%f3str = OpTypeStruct %f32 %f32 %f32\n";
+
+ opMemberNameFragments["testfun"] =
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ "%param1 = OpFunctionParameter %v4f32\n"
+ "%label_func = OpLabel\n"
+ "%a = OpVectorExtractDynamic %f32 %param1 %c_i32_0\n"
+ "%b = OpFAdd %f32 %a %a\n"
+ "%c = OpFSub %f32 %b %a\n"
+ "%cstr = OpCompositeConstruct %f3str %c %c %c\n"
+ "%d = OpCompositeExtract %f32 %cstr 0\n"
+ "%ret = OpVectorInsertDynamic %v4f32 %param1 %d %c_i32_0\n"
+ "OpReturnValue %ret\n"
+ "OpFunctionEnd\n";
+
+ for (unsigned int i = 0; i < abuseCases.size(); i++)
+ {
+ string casename;
+ casename = string("f3str_x") + abuseCases[i].name;
+
+ opMemberNameFragments["debug"] =
+ "OpMemberName %f3str 0 \"" + abuseCases[i].param + "\"";
+
+ createTestsForAllStages(casename, defaultColors, defaultColors, opMemberNameFragments, abuseGroup.get());
+ }
+
+ {
+ opMemberNameFragments["debug"] =
+ "OpMemberName %f3str 0 \"name1\"\n"
+ "OpMemberName %f3str 1 \"name2\"\n"
+ "OpMemberName %f3str 2 \"name3\"\n";
+
+ createTestsForAllStages("everything_named", defaultColors, defaultColors, opMemberNameFragments, abuseGroup.get());
+ }
+
+ {
+ opMemberNameFragments["debug"] =
+ "OpMemberName %f3str 0 \"the_same\"\n"
+ "OpMemberName %f3str 1 \"the_same\"\n"
+ "OpMemberName %f3str 2 \"the_same\"\n";
+
+ createTestsForAllStages("everything_named_the_same", defaultColors, defaultColors, opMemberNameFragments, abuseGroup.get());
+ }
+
+ {
+ opMemberNameFragments["debug"] =
+ "OpMemberName %f3str 0 \"to_be\"\n"
+ "OpMemberName %f3str 1 \"or_not\"\n"
+ "OpMemberName %f3str 0 \"to_be\"\n"
+ "OpMemberName %f3str 2 \"makes_no\"\n"
+ "OpMemberName %f3str 0 \"difference\"\n"
+ "OpMemberName %f3str 0 \"to_me\"\n";
+
+
+ createTestsForAllStages("f3str_x_has_multiple_names", defaultColors, defaultColors, opMemberNameFragments, abuseGroup.get());
+ }
+
+ return abuseGroup.release();
+ }
+
tcu::TestCaseGroup* createInstructionTests (tcu::TestContext& testCtx)
{
const bool testComputePipeline = true;
computeTests->addChild(createVariablePointersComputeGroup(testCtx));
computeTests->addChild(createImageSamplerComputeGroup(testCtx));
computeTests->addChild(createOpNameGroup(testCtx));
+ computeTests->addChild(createOpMemberNameGroup(testCtx));
computeTests->addChild(createPointerParameterComputeGroup(testCtx));
+ computeTests->addChild(createFloat16Group(testCtx));
+
graphicsTests->addChild(createCrossStageInterfaceTests(testCtx));
graphicsTests->addChild(createSpivVersionCheckTests(testCtx, !testComputePipeline));
graphicsTests->addChild(createOpNopTests(testCtx));