PB: Make Var() and Global() params optional
and allow them in any order.
We're about to add Yet Another optional parameter - access control.
For style, we probably want this field before the decorations, however
that means adding more default values for all the cases where we don't
need to specify the access control.
Instead use some template magic to allow extra parameters to be
specified in any order, and entirely optional, with sensible defaults.
This keeps things readable and without huge code refactorings.
Bug: tint:846
Change-Id: I4f61eb765de63ad98ae786d187d2bd1b42942756
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53087
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/resolver/storage_class_validation_test.cc b/src/resolver/storage_class_validation_test.cc
index 95df0a7..67efdd7 100644
--- a/src/resolver/storage_class_validation_test.cc
+++ b/src/resolver/storage_class_validation_test.cc
@@ -36,8 +36,8 @@
TEST_F(ResolverStorageClassValidationTest, StorageBufferBool) {
// var<storage> g : i32;
- Global(Source{{56, 78}}, "g", ty.i32(), ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", ty.i32(), ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -52,8 +52,8 @@
TEST_F(ResolverStorageClassValidationTest, StorageBufferPointer) {
// var<storage> g : ptr<i32, input>;
Global(Source{{56, 78}}, "g", ty.pointer<i32>(ast::StorageClass::kInput),
- ast::StorageClass::kStorage, nullptr,
- {
+ ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -70,8 +70,8 @@
auto* s = Structure("S", {Member("a", ty.f32())});
auto* a = ty.array(s, 3);
auto* ac = ty.access(ast::AccessControl::kRead, a);
- Global(Source{{56, 78}}, "g", ac, ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", ac, ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -88,8 +88,8 @@
// var<storage> g : [[access(read)]] a;
auto* a = ty.alias("a", ty.bool_());
AST().AddConstructedType(a);
- Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -104,8 +104,8 @@
TEST_F(ResolverStorageClassValidationTest, StorageBufferNoAccessControl) {
// var<storage> g : S;
auto* s = Structure("S", {Member(Source{{12, 34}}, "x", ty.i32())});
- Global(Source{{56, 78}}, "g", s, ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", s, ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -122,8 +122,8 @@
// var<storage> g : [[access(read)]] S;
auto* s = Structure(Source{{12, 34}}, "S", {Member("x", ty.i32())});
auto* a = ty.access(ast::AccessControl::kRead, s);
- Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -142,8 +142,8 @@
auto* s = Structure("S", {Member(Source{{12, 34}}, "x", ty.i32())},
{create<ast::StructBlockDecoration>()});
auto* a = ty.access(ast::AccessControl::kRead, s);
- Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -163,8 +163,8 @@
auto* ac = ty.access(ast::AccessControl::kRead, a1);
auto* a2 = ty.alias("a2", ac);
AST().AddConstructedType(a2);
- Global(Source{{56, 78}}, "g", a2, ast::StorageClass::kStorage, nullptr,
- {
+ Global(Source{{56, 78}}, "g", a2, ast::StorageClass::kStorage,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -177,8 +177,7 @@
TEST_F(ResolverStorageClassValidationTest, UniformBufferBool) {
// var<uniform> g : bool;
Global(Source{{56, 78}}, "g", ty.bool_(), ast::StorageClass::kUniform,
- nullptr,
- {
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -193,8 +192,8 @@
TEST_F(ResolverStorageClassValidationTest, UniformBufferPointer) {
// var<uniform> g : ptr<i32, input>;
Global(Source{{56, 78}}, "g", ty.pointer<i32>(ast::StorageClass::kInput),
- ast::StorageClass::kUniform, nullptr,
- {
+ ast::StorageClass::kUniform,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -211,8 +210,8 @@
auto* s = Structure("S", {Member("a", ty.f32())});
auto* a = ty.array(s, 3);
auto* ac = ty.access(ast::AccessControl::kRead, a);
- Global(Source{{56, 78}}, "g", ac, ast::StorageClass::kUniform, nullptr,
- {
+ Global(Source{{56, 78}}, "g", ac, ast::StorageClass::kUniform,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -229,8 +228,8 @@
// var<uniform> g : [[access(read)]] a;
auto* a = ty.alias("a", ty.bool_());
AST().AddConstructedType(a);
- Global(Source{{56, 78}}, "g", a, ast::StorageClass::kUniform, nullptr,
- {
+ Global(Source{{56, 78}}, "g", a, ast::StorageClass::kUniform,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -246,8 +245,8 @@
// struct S { x : i32 };
// var<uniform> g : S;
auto* s = Structure(Source{{12, 34}}, "S", {Member("x", ty.i32())});
- Global(Source{{56, 78}}, "g", s, ast::StorageClass::kUniform, nullptr,
- {
+ Global(Source{{56, 78}}, "g", s, ast::StorageClass::kUniform,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -265,8 +264,8 @@
// var<uniform> g : S;
auto* s = Structure("S", {Member(Source{{12, 34}}, "x", ty.i32())},
{create<ast::StructBlockDecoration>()});
- Global(Source{{56, 78}}, "g", s, ast::StorageClass::kUniform, nullptr,
- {
+ Global(Source{{56, 78}}, "g", s, ast::StorageClass::kUniform,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});
@@ -282,8 +281,8 @@
{create<ast::StructBlockDecoration>()});
auto* a1 = ty.alias("a1", s);
AST().AddConstructedType(a1);
- Global(Source{{56, 78}}, "g", a1, ast::StorageClass::kUniform, nullptr,
- {
+ Global(Source{{56, 78}}, "g", a1, ast::StorageClass::kUniform,
+ ast::DecorationList{
create<ast::BindingDecoration>(0),
create<ast::GroupDecoration>(0),
});