[wgsl-writer] Emit constant_id decorations.

This CL adds constant_id decorations to the WGSL writer.

Bug: tint:152
Change-Id: I637d158c0ef4d0ace2ce70a6fb3cbe6f0b8b3b4e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/29102
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index e13fe6b..f78b99c 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -29,6 +29,7 @@
 #include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
 #include "src/ast/case_statement.h"
+#include "src/ast/constant_id_decoration.h"
 #include "src/ast/constructor_expression.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/decorated_variable.h"
@@ -724,6 +725,8 @@
       out_ << "location(" << deco->AsLocation()->value() << ")";
     } else if (deco->IsBuiltin()) {
       out_ << "builtin(" << deco->AsBuiltin()->value() << ")";
+    } else if (deco->IsConstantId()) {
+      out_ << "constant_id(" << deco->AsConstantId()->value() << ")";
     } else {
       error_ = "unknown variable decoration";
       return false;
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 6665a91..1b72849 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -17,6 +17,7 @@
 #include "gtest/gtest.h"
 #include "src/ast/binding_decoration.h"
 #include "src/ast/builtin_decoration.h"
+#include "src/ast/constant_id_decoration.h"
 #include "src/ast/decorated_variable.h"
 #include "src/ast/location_decoration.h"
 #include "src/ast/set_decoration.h"
@@ -77,6 +78,7 @@
   decos.push_back(std::make_unique<ast::BindingDecoration>(0));
   decos.push_back(std::make_unique<ast::SetDecoration>(1));
   decos.push_back(std::make_unique<ast::LocationDecoration>(2));
+  decos.push_back(std::make_unique<ast::ConstantIdDecoration>(42));
 
   ast::DecoratedVariable dv;
   dv.set_name("a");
@@ -87,7 +89,7 @@
   ASSERT_TRUE(g.EmitVariable(&dv)) << g.error();
   EXPECT_EQ(
       g.result(),
-      R"([[builtin(position), binding(0), set(1), location(2)]] var a : f32;
+      R"([[builtin(position), binding(0), set(1), location(2), constant_id(42)]] var a : f32;
 )");
 }