[spirv-reader] Support OpFAdd
Bug: tint:3 Change-Id: I22a6ff13d3777544101fa8334d598e5a2524caec Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19223 Reviewed-by: dan sinclair <dsinclair@google.com>
This commit is contained in:
parent
a51d697f8c
commit
79797490d8
|
@ -40,6 +40,7 @@ namespace {
|
||||||
ast::BinaryOp ConvertBinaryOp(SpvOp opcode) {
|
ast::BinaryOp ConvertBinaryOp(SpvOp opcode) {
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
case SpvOpIAdd:
|
case SpvOpIAdd:
|
||||||
|
case SpvOpFAdd:
|
||||||
return ast::BinaryOp::kAdd;
|
return ast::BinaryOp::kAdd;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -41,8 +41,8 @@ std::string CommonTypes() {
|
||||||
%uint_20 = OpConstant %uint 20
|
%uint_20 = OpConstant %uint 20
|
||||||
%int_30 = OpConstant %int 30
|
%int_30 = OpConstant %int 30
|
||||||
%int_40 = OpConstant %int 40
|
%int_40 = OpConstant %int 40
|
||||||
%float_50 = OpConstant %uint 50
|
%float_50 = OpConstant %float 50
|
||||||
%float_60 = OpConstant %uint 60
|
%float_60 = OpConstant %float 60
|
||||||
|
|
||||||
%ptr_uint = OpTypePointer Function %uint
|
%ptr_uint = OpTypePointer Function %uint
|
||||||
%ptr_int = OpTypePointer Function %int
|
%ptr_int = OpTypePointer Function %int
|
||||||
|
@ -50,11 +50,14 @@ std::string CommonTypes() {
|
||||||
|
|
||||||
%v2uint = OpTypeVector %uint 2
|
%v2uint = OpTypeVector %uint 2
|
||||||
%v2int = OpTypeVector %int 2
|
%v2int = OpTypeVector %int 2
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
|
||||||
%v2uint_10_20 = OpConstantComposite %v2uint %uint_10 %uint_20
|
%v2uint_10_20 = OpConstantComposite %v2uint %uint_10 %uint_20
|
||||||
%v2uint_20_10 = OpConstantComposite %v2uint %uint_20 %uint_10
|
%v2uint_20_10 = OpConstantComposite %v2uint %uint_20 %uint_10
|
||||||
%v2int_30_40 = OpConstantComposite %v2int %int_30 %int_40
|
%v2int_30_40 = OpConstantComposite %v2int %int_30 %int_40
|
||||||
%v2int_40_30 = OpConstantComposite %v2int %int_40 %int_30
|
%v2int_40_30 = OpConstantComposite %v2int %int_40 %int_30
|
||||||
|
%v2float_50_60 = OpConstantComposite %v2float %float_50 %float_60
|
||||||
|
%v2float_60_50 = OpConstantComposite %v2float %float_60 %float_50
|
||||||
)";
|
)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +91,20 @@ std::string AstFor(std::string assembly) {
|
||||||
ScalarConstructor{30}
|
ScalarConstructor{30}
|
||||||
})";
|
})";
|
||||||
}
|
}
|
||||||
|
if (assembly == "v2float_50_60") {
|
||||||
|
return R"(TypeConstructor{
|
||||||
|
__vec_2__f32
|
||||||
|
ScalarConstructor{50.000000}
|
||||||
|
ScalarConstructor{60.000000}
|
||||||
|
})";
|
||||||
|
}
|
||||||
|
if (assembly == "v2float_60_50") {
|
||||||
|
return R"(TypeConstructor{
|
||||||
|
__vec_2__f32
|
||||||
|
ScalarConstructor{60.000000}
|
||||||
|
ScalarConstructor{50.000000}
|
||||||
|
})";
|
||||||
|
}
|
||||||
return "bad case";
|
return "bad case";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,8 +153,9 @@ TEST_P(SpvBinaryTest, EmitExpression) {
|
||||||
<< "\n " << GetParam().ast_rhs;
|
<< "\n " << GetParam().ast_rhs;
|
||||||
EXPECT_THAT(ToString(fe.ast_body()), HasSubstr(ss.str())) << assembly;
|
EXPECT_THAT(ToString(fe.ast_body()), HasSubstr(ss.str())) << assembly;
|
||||||
}
|
}
|
||||||
|
|
||||||
INSTANTIATE_TEST_SUITE_P(
|
INSTANTIATE_TEST_SUITE_P(
|
||||||
SpvParserTest,
|
SpvParserTest_IAdd,
|
||||||
SpvBinaryTest,
|
SpvBinaryTest,
|
||||||
::testing::Values(
|
::testing::Values(
|
||||||
// Both uint
|
// Both uint
|
||||||
|
@ -169,6 +187,19 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
"__vec_2__i32", AstFor("v2int_40_30"), "add",
|
"__vec_2__i32", AstFor("v2int_40_30"), "add",
|
||||||
AstFor("v2uint_20_10")}));
|
AstFor("v2uint_20_10")}));
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_SUITE_P(
|
||||||
|
SpvParserTest_FAdd,
|
||||||
|
SpvBinaryTest,
|
||||||
|
::testing::Values(
|
||||||
|
// Scalar float
|
||||||
|
BinaryData{"float", "float_50", "OpFAdd", "float_60", "__f32",
|
||||||
|
"ScalarConstructor{50.000000}", "add",
|
||||||
|
"ScalarConstructor{60.000000}"},
|
||||||
|
// Vector float
|
||||||
|
BinaryData{"v2float", "v2float_50_60", "OpFAdd", "v2float_60_50",
|
||||||
|
"__vec_2__f32", AstFor("v2float_50_60"), "add",
|
||||||
|
AstFor("v2float_60_50")}));
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace spirv
|
} // namespace spirv
|
||||||
} // namespace reader
|
} // namespace reader
|
||||||
|
|
Loading…
Reference in New Issue