[wgsl-writer] Function var decls don't mention storage class
From WGSL decision in https://github.com/gpuweb/gpuweb/issues/654
Change-Id: I570475cf0d069043d70794d7b92626798963bfdc
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/21363
Reviewed-by: dan sinclair <dsinclair@google.com>
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 4805d95..d45a1a1 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -466,7 +466,8 @@
out_ << "const";
} else {
out_ << "var";
- if (var->storage_class() != ast::StorageClass::kNone) {
+ if (var->storage_class() != ast::StorageClass::kNone &&
+ var->storage_class() != ast::StorageClass::kFunction) {
out_ << "<" << var->storage_class() << ">";
}
}
diff --git a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
index f1797df..03fbff3 100644
--- a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
@@ -42,6 +42,37 @@
EXPECT_EQ(g.result(), " var a : f32;\n");
}
+TEST_F(GeneratorImplTest, Emit_VariableDeclStatement_Function) {
+ // Variable declarations with Function storage class don't mention their
+ // storage class. Rely on defaulting.
+ // https://github.com/gpuweb/gpuweb/issues/654
+ ast::type::F32Type f32;
+ auto var =
+ std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &f32);
+
+ ast::VariableDeclStatement stmt(std::move(var));
+
+ GeneratorImpl g;
+ g.increment_indent();
+
+ ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
+ EXPECT_EQ(g.result(), " var a : f32;\n");
+}
+
+TEST_F(GeneratorImplTest, Emit_VariableDeclStatement_Private) {
+ ast::type::F32Type f32;
+ auto var =
+ std::make_unique<ast::Variable>("a", ast::StorageClass::kPrivate, &f32);
+
+ ast::VariableDeclStatement stmt(std::move(var));
+
+ GeneratorImpl g;
+ g.increment_indent();
+
+ ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
+ EXPECT_EQ(g.result(), " var<private> a : f32;\n");
+}
+
} // namespace
} // namespace wgsl
} // namespace writer