tint: Resolve @interpolate() args as expressions
This CL makes the builtin argument resolve as a shadowable enumerator
expression.
Bug: tint:1841
Bug: tint:1845
Change-Id: I5000ea91771fabb460c80c164bc7708fbbb0288c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/120722
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 4c7c9ee..dbcd4b6 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -4219,8 +4219,21 @@
}
post += " : " + name;
} else if (auto* interpolate = attr->As<ast::InterpolateAttribute>()) {
- auto mod =
- interpolation_to_modifiers(interpolate->type, interpolate->sampling);
+ auto& sem = program_->Sem();
+ auto i_type =
+ sem.Get<sem::BuiltinEnumExpression<builtin::InterpolationType>>(
+ interpolate->type)
+ ->Value();
+
+ auto i_smpl = builtin::InterpolationSampling::kUndefined;
+ if (interpolate->sampling) {
+ i_smpl =
+ sem.Get<sem::BuiltinEnumExpression<builtin::InterpolationSampling>>(
+ interpolate->sampling)
+ ->Value();
+ }
+
+ auto mod = interpolation_to_modifiers(i_type, i_smpl);
if (mod.empty()) {
diagnostics_.add_error(diag::System::Writer,
"unsupported interpolation");