Move workgroup_size property into sem::Function
The workgroup size should not be a property of the function in the
AST, and this lays the groundwork for allowing both literals and
module-scope constants to be used for this attribute.
Bug: tint:713
Change-Id: I014be879e2adb81cfc5b0ea0e221035fae626223
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/51261
Auto-Submit: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index a80472b..93266aa 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -1287,6 +1287,20 @@
Mark(deco);
}
+ // Set work-group size defaults.
+ for (int i = 0; i < 3; i++) {
+ info->workgroup_size[i].value = 1;
+ info->workgroup_size[i].overridable_const = nullptr;
+ }
+
+ if (auto* workgroup =
+ ast::GetDecoration<ast::WorkgroupDecoration>(func->decorations())) {
+ // TODO(crbug.com/tint/713): Handle non-literals.
+ info->workgroup_size[0].value = std::get<0>(workgroup->values());
+ info->workgroup_size[1].value = std::get<1>(workgroup->values());
+ info->workgroup_size[2].value = std::get<2>(workgroup->values());
+ }
+
if (!ValidateFunction(func, info)) {
return false;
}
@@ -2517,7 +2531,7 @@
info->declaration, const_cast<sem::Type*>(info->return_type),
remap_vars(info->parameters), remap_vars(info->referenced_module_vars),
remap_vars(info->local_referenced_module_vars), info->return_statements,
- ancestor_entry_points[func->symbol()]);
+ ancestor_entry_points[func->symbol()], info->workgroup_size);
func_info_to_sem_func.emplace(info, sem_func);
sem.Add(func, sem_func);
}