Update align attribute to allow u32.

The WGSL spec has been updated to allow attributes to be i32 or
u32. This CL updates the attribute support in Tint to follow.

Bug: tint:1633
Change-Id: Ie6caa54f26a757c374c51c7d24e54d2a476f9c84
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/103800
Auto-Submit: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
This commit is contained in:
dan sinclair 2022-09-28 15:36:47 +00:00 committed by Dawn LUCI CQ
parent dadb1fca0d
commit f9f583bfe4
2 changed files with 6 additions and 7 deletions

View File

@ -692,7 +692,7 @@ TEST_F(StructMemberAttributeTest, Align_Attribute_ConstF32) {
Structure("mystruct", utils::Vector{Member(
"a", ty.f32(), utils::Vector{MemberAlign(Source{{12, 34}}, "val")})});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 value)");
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 or u32 value)");
}
TEST_F(StructMemberAttributeTest, Align_Attribute_ConstU32) {
@ -700,8 +700,7 @@ TEST_F(StructMemberAttributeTest, Align_Attribute_ConstU32) {
Structure("mystruct", utils::Vector{Member(
"a", ty.f32(), utils::Vector{MemberAlign(Source{{12, 34}}, "val")})});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 value)");
EXPECT_TRUE(r()->Resolve());
}
TEST_F(StructMemberAttributeTest, Align_Attribute_ConstAInt) {
@ -718,7 +717,7 @@ TEST_F(StructMemberAttributeTest, Align_Attribute_ConstAFloat) {
Structure("mystruct", utils::Vector{Member(
"a", ty.f32(), utils::Vector{MemberAlign(Source{{12, 34}}, "val")})});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 value)");
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 or u32 value)");
}
TEST_F(StructMemberAttributeTest, Align_Attribute_Var) {
@ -739,7 +738,7 @@ TEST_F(StructMemberAttributeTest, Align_Attribute_Override) {
Structure("mystruct", utils::Vector{Member(
"a", ty.f32(), utils::Vector{MemberAlign(Source{{12, 34}}, "val")})});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 value)");
EXPECT_EQ(r()->error(), R"(12:34 error: 'align' must be an i32 or u32 value)");
}
} // namespace StructAndStructMemberTests

View File

@ -2821,8 +2821,8 @@ sem::Struct* Resolver::Structure(const ast::Struct* str) {
if (!materialized) {
return nullptr;
}
if (!materialized->Type()->Is<sem::I32>()) {
AddError("'align' must be an i32 value", a->source);
if (!materialized->Type()->IsAnyOf<sem::I32, sem::U32>()) {
AddError("'align' must be an i32 or u32 value", a->source);
return nullptr;
}