spirv-reader: conversion tests: make valid SPIR-V
Bug: tint:765
Change-Id: I18ed7f007fc9b15c51cddbb6b0edbca79ed1569c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49821
Commit-Queue: David Neto <dneto@google.com>
Reviewed-by: Alan Baker <alanbaker@google.com>
diff --git a/src/reader/spirv/function_conversion_test.cc b/src/reader/spirv/function_conversion_test.cc
index e92d9d1..0d18996 100644
--- a/src/reader/spirv/function_conversion_test.cc
+++ b/src/reader/spirv/function_conversion_test.cc
@@ -25,8 +25,12 @@
using ::testing::Eq;
using ::testing::HasSubstr;
-std::string CommonTypes() {
+std::string Preamble() {
return R"(
+ OpCapability Shader
+ OpMemoryModel Logical Simple
+ OpEntryPoint Vertex %100 "main"
+
%void = OpTypeVoid
%voidfn = OpTypeFunction %void
@@ -67,7 +71,7 @@
using SpvUnaryConversionTest = SpvParserTestBase<::testing::Test>;
TEST_F(SpvUnaryConversionTest, Bitcast_Scalar) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpBitcast %uint %float_50
@@ -92,7 +96,7 @@
}
TEST_F(SpvUnaryConversionTest, Bitcast_Vector) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpBitcast %v2float %v2uint_10_20
@@ -121,7 +125,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_BadArg) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertSToF %float %void
@@ -137,7 +141,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_BadArg) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertUToF %float %void
@@ -153,7 +157,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_BadArg) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertFToS %float %void
@@ -169,7 +173,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToU_BadArg) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertFToU %float %void
@@ -185,7 +189,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_Scalar_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertSToF %float %false
@@ -202,7 +206,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_Vector_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertSToF %v2float %v2bool_t_f
@@ -220,7 +224,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_Scalar_FromSigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %int %int_30
@@ -246,7 +250,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_Scalar_FromUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %uint %uint_10
@@ -274,7 +278,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_Vector_FromSigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2int %v2int_30_40
@@ -300,7 +304,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertSToF_Vector_FromUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2uint %v2uint_10_20
@@ -328,7 +332,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_Scalar_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertUToF %float %false
@@ -344,7 +348,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_Vector_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertUToF %v2float %v2bool_t_f
@@ -361,7 +365,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_Scalar_FromSigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %int %int_30
@@ -389,7 +393,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_Scalar_FromUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %uint %uint_10
@@ -415,7 +419,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_Vector_FromSigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2int %v2int_30_40
@@ -443,7 +447,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertUToF_Vector_FromUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2uint %v2uint_10_20
@@ -469,7 +473,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_Scalar_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertFToS %int %uint_10
@@ -486,7 +490,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_Vector_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertFToS %v2float %v2bool_t_f
@@ -503,7 +507,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_Scalar_ToSigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %float %float_50
@@ -529,7 +533,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_Scalar_ToUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %float %float_50
@@ -557,7 +561,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_Vector_ToSigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2float %v2float_50_60
@@ -583,7 +587,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToS_Vector_ToUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2float %v2float_50_60
@@ -611,7 +615,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertFToU %int %uint_10
@@ -628,7 +632,7 @@
}
TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_BadArgType) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%1 = OpConvertFToU %v2float %v2bool_t_f
@@ -644,8 +648,8 @@
"point scalar or vector, but got: __vec_2__bool"));
}
-TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_ToSigned) {
- const auto assembly = CommonTypes() + R"(
+TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_ToSigned_IsError) {
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %float %float_50
@@ -654,26 +658,14 @@
OpFunctionEnd
)";
auto p = parser(test::Assemble(assembly));
- ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
- auto fe = p->function_emitter(100);
- EXPECT_TRUE(fe.EmitBody()) << p->error();
- EXPECT_THAT(ToString(p->builder(), fe.ast_body()), HasSubstr(R"(VariableConst{
- x_1
- none
- __i32
- {
- Bitcast[not set]<__i32>{
- TypeConstructor[not set]{
- __u32
- Identifier[not set]{x_30}
- }
- }
- }
- })"));
+ EXPECT_FALSE(p->Parse());
+ EXPECT_FALSE(p->success());
+ EXPECT_THAT(p->error(), HasSubstr("Expected unsigned int scalar or vector "
+ "type as Result Type: ConvertFToU"));
}
TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_ToUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %float %float_50
@@ -698,8 +690,8 @@
})"));
}
-TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_ToSigned) {
- const auto assembly = CommonTypes() + R"(
+TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_ToSigned_IsError) {
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2float %v2float_50_60
@@ -708,26 +700,14 @@
OpFunctionEnd
)";
auto p = parser(test::Assemble(assembly));
- ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
- auto fe = p->function_emitter(100);
- EXPECT_TRUE(fe.EmitBody()) << p->error();
- EXPECT_THAT(ToString(p->builder(), fe.ast_body()), HasSubstr(R"(VariableConst{
- x_1
- none
- __vec_2__i32
- {
- Bitcast[not set]<__vec_2__i32>{
- TypeConstructor[not set]{
- __vec_2__u32
- Identifier[not set]{x_30}
- }
- }
- }
- })"));
+ EXPECT_FALSE(p->Parse());
+ EXPECT_FALSE(p->success());
+ EXPECT_THAT(p->error(), HasSubstr("Expected unsigned int scalar or vector "
+ "type as Result Type: ConvertFToU"));
}
TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_ToUnsigned) {
- const auto assembly = CommonTypes() + R"(
+ const auto assembly = Preamble() + R"(
%100 = OpFunction %void None %voidfn
%entry = OpLabel
%30 = OpCopyObject %v2float %v2float_50_60