diff --git a/BUILD.gn b/BUILD.gn
index d51ecb4..d93cb69 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -282,6 +282,8 @@
     "src/ast/function.h",
     "src/ast/function_decoration.cc",
     "src/ast/function_decoration.h",
+    "src/ast/group_decoration.cc",
+    "src/ast/group_decoration.h",
     "src/ast/identifier_expression.cc",
     "src/ast/identifier_expression.h",
     "src/ast/if_statement.cc",
@@ -310,8 +312,6 @@
     "src/ast/return_statement.h",
     "src/ast/scalar_constructor_expression.cc",
     "src/ast/scalar_constructor_expression.h",
-    "src/ast/set_decoration.cc",
-    "src/ast/set_decoration.h",
     "src/ast/sint_literal.cc",
     "src/ast/sint_literal.h",
     "src/ast/stage_decoration.cc",
@@ -780,6 +780,7 @@
     "src/ast/fallthrough_statement_test.cc",
     "src/ast/float_literal_test.cc",
     "src/ast/function_test.cc",
+    "src/ast/group_decoration_test.cc",
     "src/ast/identifier_expression_test.cc",
     "src/ast/if_statement_test.cc",
     "src/ast/int_literal_test.cc",
@@ -793,7 +794,6 @@
     "src/ast/null_literal_test.cc",
     "src/ast/return_statement_test.cc",
     "src/ast/scalar_constructor_expression_test.cc",
-    "src/ast/set_decoration_test.cc",
     "src/ast/sint_literal_test.cc",
     "src/ast/stage_decoration_test.cc",
     "src/ast/stride_decoration_test.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index adc89af..d23d6bf 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -96,6 +96,8 @@
   ast/function.h
   ast/function_decoration.cc
   ast/function_decoration.h
+  ast/group_decoration.cc
+  ast/group_decoration.h
   ast/identifier_expression.cc
   ast/identifier_expression.h
   ast/if_statement.cc
@@ -124,8 +126,6 @@
   ast/return_statement.h
   ast/scalar_constructor_expression.cc
   ast/scalar_constructor_expression.h
-  ast/set_decoration.cc
-  ast/set_decoration.h
   ast/sint_literal.cc
   ast/sint_literal.h
   ast/stage_decoration.cc
@@ -409,6 +409,7 @@
     ast/fallthrough_statement_test.cc
     ast/float_literal_test.cc
     ast/function_test.cc
+    ast/group_decoration_test.cc
     ast/identifier_expression_test.cc
     ast/if_statement_test.cc
     ast/intrinsic_texture_helper_test.cc
@@ -423,7 +424,6 @@
     ast/binary_expression_test.cc
     ast/return_statement_test.cc
     ast/scalar_constructor_expression_test.cc
-    ast/set_decoration_test.cc
     ast/sint_literal_test.cc
     ast/stage_decoration_test.cc
     ast/stride_decoration_test.cc
diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 08cde4c..ddeff33 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -34,7 +34,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(d->Is<SetDecoration>());
+  EXPECT_FALSE(d->Is<GroupDecoration>());
 }
 
 TEST_F(BindingDecorationTest, ToStr) {
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc
index bee20b4..df10ec7 100644
--- a/src/ast/builtin_decoration_test.cc
+++ b/src/ast/builtin_decoration_test.cc
@@ -34,7 +34,7 @@
   EXPECT_TRUE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(d->Is<SetDecoration>());
+  EXPECT_FALSE(d->Is<GroupDecoration>());
 }
 
 TEST_F(BuiltinDecorationTest, ToStr) {
diff --git a/src/ast/constant_id_decoration_test.cc b/src/ast/constant_id_decoration_test.cc
index 2da917a..ea38af3 100644
--- a/src/ast/constant_id_decoration_test.cc
+++ b/src/ast/constant_id_decoration_test.cc
@@ -33,7 +33,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_TRUE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(d->Is<SetDecoration>());
+  EXPECT_FALSE(d->Is<GroupDecoration>());
 }
 
 TEST_F(ConstantIdDecorationTest, ToStr) {
diff --git a/src/ast/function.cc b/src/ast/function.cc
index 723cb85..ebd21d1 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -108,19 +108,19 @@
     }
 
     BindingDecoration* binding = nullptr;
-    SetDecoration* set = nullptr;
+    GroupDecoration* group = nullptr;
     for (auto* deco : var->decorations()) {
       if (auto* b = deco->As<BindingDecoration>()) {
         binding = b;
-      } else if (auto* s = deco->As<SetDecoration>()) {
-        set = s;
+      } else if (auto* g = deco->As<GroupDecoration>()) {
+        group = g;
       }
     }
-    if (binding == nullptr || set == nullptr) {
+    if (binding == nullptr || group == nullptr) {
       continue;
     }
 
-    ret.push_back({var, BindingInfo{binding, set}});
+    ret.push_back({var, BindingInfo{binding, group}});
   }
   return ret;
 }
@@ -135,19 +135,19 @@
     }
 
     BindingDecoration* binding = nullptr;
-    SetDecoration* set = nullptr;
+    GroupDecoration* group = nullptr;
     for (auto* deco : var->decorations()) {
       if (auto* b = deco->As<BindingDecoration>()) {
         binding = b;
-      } else if (auto* s = deco->As<SetDecoration>()) {
-        set = s;
+      } else if (auto* s = deco->As<GroupDecoration>()) {
+        group = s;
       }
     }
-    if (binding == nullptr || set == nullptr) {
+    if (binding == nullptr || group == nullptr) {
       continue;
     }
 
-    ret.push_back({var, BindingInfo{binding, set}});
+    ret.push_back({var, BindingInfo{binding, group}});
   }
   return ret;
 }
@@ -305,20 +305,20 @@
     }
 
     BindingDecoration* binding = nullptr;
-    SetDecoration* set = nullptr;
+    GroupDecoration* group = nullptr;
     for (auto* deco : var->decorations()) {
       if (auto* b = deco->As<BindingDecoration>()) {
         binding = b;
       }
-      if (auto* s = deco->As<SetDecoration>()) {
-        set = s;
+      if (auto* s = deco->As<GroupDecoration>()) {
+        group = s;
       }
     }
-    if (binding == nullptr || set == nullptr) {
+    if (binding == nullptr || group == nullptr) {
       continue;
     }
 
-    ret.push_back({var, BindingInfo{binding, set}});
+    ret.push_back({var, BindingInfo{binding, group}});
   }
   return ret;
 }
@@ -342,19 +342,19 @@
     }
 
     BindingDecoration* binding = nullptr;
-    SetDecoration* set = nullptr;
+    GroupDecoration* group = nullptr;
     for (auto* deco : var->decorations()) {
       if (auto* b = deco->As<BindingDecoration>()) {
         binding = b;
-      } else if (auto* s = deco->As<SetDecoration>()) {
-        set = s;
+      } else if (auto* s = deco->As<GroupDecoration>()) {
+        group = s;
       }
     }
-    if (binding == nullptr || set == nullptr) {
+    if (binding == nullptr || group == nullptr) {
       continue;
     }
 
-    ret.push_back({var, BindingInfo{binding, set}});
+    ret.push_back({var, BindingInfo{binding, group}});
   }
 
   return ret;
diff --git a/src/ast/function.h b/src/ast/function.h
index 7dbda87..19fb034 100644
--- a/src/ast/function.h
+++ b/src/ast/function.h
@@ -27,10 +27,10 @@
 #include "src/ast/builtin_decoration.h"
 #include "src/ast/expression.h"
 #include "src/ast/function_decoration.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
 #include "src/ast/node.h"
 #include "src/ast/pipeline_stage.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/statement.h"
 #include "src/ast/type/sampler_type.h"
 #include "src/ast/type/type.h"
@@ -47,8 +47,8 @@
   struct BindingInfo {
     /// The binding decoration
     BindingDecoration* binding = nullptr;
-    /// The set decoration
-    SetDecoration* set = nullptr;
+    /// The group decoration
+    GroupDecoration* group = nullptr;
   };
 
   /// Create a function
@@ -114,32 +114,32 @@
   const std::vector<std::pair<Variable*, BuiltinDecoration*>>
   referenced_builtin_variables() const;
   /// Retrieves any referenced uniform variables. Note, the variables must be
-  /// decorated with both binding and set decorations.
+  /// decorated with both binding and group decorations.
   /// @returns the referenced uniforms
   const std::vector<std::pair<Variable*, Function::BindingInfo>>
   referenced_uniform_variables() const;
   /// Retrieves any referenced storagebuffer variables. Note, the variables
-  /// must be decorated with both binding and set decorations.
+  /// must be decorated with both binding and group decorations.
   /// @returns the referenced storagebuffers
   const std::vector<std::pair<Variable*, Function::BindingInfo>>
   referenced_storagebuffer_variables() const;
   /// Retrieves any referenced regular Sampler variables. Note, the
-  /// variables must be decorated with both binding and set decorations.
+  /// variables must be decorated with both binding and group decorations.
   /// @returns the referenced storagebuffers
   const std::vector<std::pair<Variable*, Function::BindingInfo>>
   referenced_sampler_variables() const;
   /// Retrieves any referenced comparison Sampler variables. Note, the
-  /// variables must be decorated with both binding and set decorations.
+  /// variables must be decorated with both binding and group decorations.
   /// @returns the referenced storagebuffers
   const std::vector<std::pair<Variable*, Function::BindingInfo>>
   referenced_comparison_sampler_variables() const;
   /// Retrieves any referenced sampled textures variables. Note, the
-  /// variables must be decorated with both binding and set decorations.
+  /// variables must be decorated with both binding and group decorations.
   /// @returns the referenced sampled textures
   const std::vector<std::pair<Variable*, Function::BindingInfo>>
   referenced_sampled_texture_variables() const;
   /// Retrieves any referenced multisampled textures variables. Note, the
-  /// variables must be decorated with both binding and set decorations.
+  /// variables must be decorated with both binding and group decorations.
   /// @returns the referenced sampled textures
   const std::vector<std::pair<Variable*, Function::BindingInfo>>
   referenced_multisampled_texture_variables() const;
diff --git a/src/ast/set_decoration.cc b/src/ast/group_decoration.cc
similarity index 62%
rename from src/ast/set_decoration.cc
rename to src/ast/group_decoration.cc
index 3f6607c..3bbd372 100644
--- a/src/ast/set_decoration.cc
+++ b/src/ast/group_decoration.cc
@@ -12,28 +12,28 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/set_decoration.h"
+#include "src/ast/group_decoration.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::SetDecoration);
+TINT_INSTANTIATE_CLASS_ID(tint::ast::GroupDecoration);
 
 namespace tint {
 namespace ast {
 
-SetDecoration::SetDecoration(const Source& source, uint32_t val)
+GroupDecoration::GroupDecoration(const Source& source, uint32_t val)
     : Base(source), value_(val) {}
 
-SetDecoration::~SetDecoration() = default;
+GroupDecoration::~GroupDecoration() = default;
 
-void SetDecoration::to_str(std::ostream& out, size_t indent) const {
+void GroupDecoration::to_str(std::ostream& out, size_t indent) const {
   make_indent(out, indent);
-  out << "SetDecoration{" << value_ << "}" << std::endl;
+  out << "GroupDecoration{" << value_ << "}" << std::endl;
 }
 
-SetDecoration* SetDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<SetDecoration>(ctx->Clone(source()), value_);
+GroupDecoration* GroupDecoration::Clone(CloneContext* ctx) const {
+  return ctx->mod->create<GroupDecoration>(ctx->Clone(source()), value_);
 }
 
 }  // namespace ast
diff --git a/src/ast/set_decoration.h b/src/ast/group_decoration.h
similarity index 76%
rename from src/ast/set_decoration.h
rename to src/ast/group_decoration.h
index ec97a32..323012d 100644
--- a/src/ast/set_decoration.h
+++ b/src/ast/group_decoration.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_SET_DECORATION_H_
-#define SRC_AST_SET_DECORATION_H_
+#ifndef SRC_AST_GROUP_DECORATION_H_
+#define SRC_AST_GROUP_DECORATION_H_
 
 #include <stddef.h>
 
@@ -22,16 +22,16 @@
 namespace tint {
 namespace ast {
 
-/// A set decoration
-class SetDecoration : public Castable<SetDecoration, VariableDecoration> {
+/// A group decoration
+class GroupDecoration : public Castable<GroupDecoration, VariableDecoration> {
  public:
   /// constructor
-  /// @param value the set value
+  /// @param value the group value
   /// @param source the source of this decoration
-  SetDecoration(const Source& source, uint32_t value);
-  ~SetDecoration() override;
+  GroupDecoration(const Source& source, uint32_t value);
+  ~GroupDecoration() override;
 
-  /// @returns the set value
+  /// @returns the group value
   uint32_t value() const { return value_; }
 
   /// Outputs the decoration to the given stream
@@ -45,7 +45,7 @@
   /// information is not cloned.
   /// @param ctx the clone context
   /// @return the newly cloned node
-  SetDecoration* Clone(CloneContext* ctx) const override;
+  GroupDecoration* Clone(CloneContext* ctx) const override;
 
  private:
   uint32_t const value_;
@@ -54,4 +54,4 @@
 }  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_SET_DECORATION_H_
+#endif  // SRC_AST_GROUP_DECORATION_H_
diff --git a/src/ast/set_decoration_test.cc b/src/ast/group_decoration_test.cc
similarity index 72%
rename from src/ast/set_decoration_test.cc
rename to src/ast/group_decoration_test.cc
index b5ae138..95625d3 100644
--- a/src/ast/set_decoration_test.cc
+++ b/src/ast/group_decoration_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/set_decoration.h"
+#include "src/ast/group_decoration.h"
 
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/test_helper.h"
@@ -21,27 +21,27 @@
 namespace ast {
 namespace {
 
-using SetDecorationTest = TestHelper;
+using GroupDecorationTest = TestHelper;
 
-TEST_F(SetDecorationTest, Creation) {
-  auto* d = create<SetDecoration>(2);
+TEST_F(GroupDecorationTest, Creation) {
+  auto* d = create<GroupDecoration>(2);
   EXPECT_EQ(2u, d->value());
 }
 
-TEST_F(SetDecorationTest, Is) {
-  Decoration* d = create<SetDecoration>(2);
+TEST_F(GroupDecorationTest, Is) {
+  Decoration* d = create<GroupDecoration>(2);
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_TRUE(d->Is<SetDecoration>());
+  EXPECT_TRUE(d->Is<GroupDecoration>());
 }
 
-TEST_F(SetDecorationTest, ToStr) {
-  auto* d = create<SetDecoration>(2);
+TEST_F(GroupDecorationTest, ToStr) {
+  auto* d = create<GroupDecoration>(2);
   std::ostringstream out;
   d->to_str(out, 0);
-  EXPECT_EQ(out.str(), R"(SetDecoration{2}
+  EXPECT_EQ(out.str(), R"(GroupDecoration{2}
 )");
 }
 
diff --git a/src/ast/intrinsic_texture_helper_test.cc b/src/ast/intrinsic_texture_helper_test.cc
index 00a2d05..256de22 100644
--- a/src/ast/intrinsic_texture_helper_test.cc
+++ b/src/ast/intrinsic_texture_helper_test.cc
@@ -155,7 +155,7 @@
   auto* datatype = resultVectorComponentType(b);
 
   VariableDecorationList decos = {
-      b->create<ast::SetDecoration>(0),
+      b->create<ast::GroupDecoration>(0),
       b->create<ast::BindingDecoration>(0),
   };
   switch (texture_kind) {
@@ -194,7 +194,7 @@
 ast::Variable* TextureOverloadCase::buildSamplerVariable(
     ast::Builder* b) const {
   VariableDecorationList decos = {
-      b->create<ast::SetDecoration>(0),
+      b->create<ast::GroupDecoration>(0),
       b->create<ast::BindingDecoration>(1),
   };
   return b->Var("sampler", ast::StorageClass::kUniformConstant,
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index fef2647..b8084e3 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -36,7 +36,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_TRUE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(d->Is<SetDecoration>());
+  EXPECT_FALSE(d->Is<GroupDecoration>());
 }
 
 TEST_F(LocationDecorationTest, ToStr) {
diff --git a/src/ast/module_clone_test.cc b/src/ast/module_clone_test.cc
index a434f93..4e61aca 100644
--- a/src/ast/module_clone_test.cc
+++ b/src/ast/module_clone_test.cc
@@ -51,10 +51,10 @@
 var<uniform> g6 : [[access(write)]] texture_storage_2d<rg32float>;
 
 [[builtin(position)]] var<uniform> g7 : vec3<f32>;
-[[set(10), binding(20)]] var<storage_buffer> g7 : S;
-[[set(10), binding(20)]] var<storage_buffer> g8 : [[access(read)]]
+[[group(10), binding(20)]] var<storage_buffer> g7 : S;
+[[group(10), binding(20)]] var<storage_buffer> g8 : [[access(read)]]
 S;
-[[set(10), binding(20)]] var<storage_buffer> g9 : [[access(read_write)]]
+[[group(10), binding(20)]] var<storage_buffer> g9 : [[access(read_write)]]
 S;
 
 fn f0(p0 : bool) -> f32 {
diff --git a/src/ast/variable_test.cc b/src/ast/variable_test.cc
index 925415d..e6475c1 100644
--- a/src/ast/variable_test.cc
+++ b/src/ast/variable_test.cc
@@ -138,7 +138,7 @@
   auto* var = Var("my_var", StorageClass::kFunction, ty.f32, Expr("expr"),
                   VariableDecorationList{
                       create<BindingDecoration>(2),
-                      create<SetDecoration>(1),
+                      create<GroupDecoration>(1),
                   });
 
   std::ostringstream out;
@@ -146,7 +146,7 @@
   EXPECT_EQ(demangle(out.str()), R"(  Variable{
     Decorations{
       BindingDecoration{2}
-      SetDecoration{1}
+      GroupDecoration{1}
     }
     my_var
     function
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 67fbc7a..eca911d 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -187,7 +187,7 @@
       continue;
     }
 
-    entry.bind_group = binding_info.set->value();
+    entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
     entry.min_buffer_binding_size = var->type()->MinBufferBindingSize(
         ast::type::MemoryLayout::kUniformBuffer);
@@ -224,7 +224,7 @@
     ast::Function::BindingInfo binding_info;
     std::tie(var, binding_info) = rs;
 
-    entry.bind_group = binding_info.set->value();
+    entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
 
     result.push_back(entry);
@@ -248,7 +248,7 @@
     ast::Function::BindingInfo binding_info;
     std::tie(var, binding_info) = rcs;
 
-    entry.bind_group = binding_info.set->value();
+    entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
 
     result.push_back(entry);
@@ -310,7 +310,7 @@
       continue;
     }
 
-    entry.bind_group = binding_info.set->value();
+    entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
     entry.min_buffer_binding_size = var->type()->MinBufferBindingSize(
         ast::type::MemoryLayout::kStorageBuffer);
@@ -339,7 +339,7 @@
     ast::Function::BindingInfo binding_info;
     std::tie(var, binding_info) = ref;
 
-    entry.bind_group = binding_info.set->value();
+    entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
 
     auto* texture_type =
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 4de2319..8be535e 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -319,17 +319,17 @@
   /// @param name the name of the variable
   /// @param type the type to use
   /// @param storage_class the storage class to use
-  /// @param set the binding group/set to use for the uniform buffer
+  /// @param group the binding and group to use for the uniform buffer
   /// @param binding the binding number to use for the uniform buffer
   void AddBinding(const std::string& name,
                   ast::type::Type* type,
                   ast::StorageClass storage_class,
-                  uint32_t set,
+                  uint32_t group,
                   uint32_t binding) {
     auto* var = Var(name, storage_class, type, nullptr,
                     ast::VariableDecorationList{
                         create<ast::BindingDecoration>(binding),
-                        create<ast::SetDecoration>(set),
+                        create<ast::GroupDecoration>(group),
                     });
 
     mod->AddGlobalVariable(var);
@@ -338,25 +338,25 @@
   /// Adds an uniform buffer variable to the module
   /// @param name the name of the variable
   /// @param type the type to use
-  /// @param set the binding group/set to use for the uniform buffer
+  /// @param group the binding/group/ to use for the uniform buffer
   /// @param binding the binding number to use for the uniform buffer
   void AddUniformBuffer(const std::string& name,
                         ast::type::Type* type,
-                        uint32_t set,
+                        uint32_t group,
                         uint32_t binding) {
-    AddBinding(name, type, ast::StorageClass::kUniform, set, binding);
+    AddBinding(name, type, ast::StorageClass::kUniform, group, binding);
   }
 
   /// Adds a storage buffer variable to the module
   /// @param name the name of the variable
   /// @param type the type to use
-  /// @param set the binding group/set to use for the storage buffer
+  /// @param group the binding/group to use for the storage buffer
   /// @param binding the binding number to use for the storage buffer
   void AddStorageBuffer(const std::string& name,
                         ast::type::Type* type,
-                        uint32_t set,
+                        uint32_t group,
                         uint32_t binding) {
-    AddBinding(name, type, ast::StorageClass::kStorageBuffer, set, binding);
+    AddBinding(name, type, ast::StorageClass::kStorageBuffer, group, binding);
   }
 
   /// Generates a function that references a specific struct variable
@@ -398,22 +398,22 @@
 
   /// Adds a regular sampler variable to the module
   /// @param name the name of the variable
-  /// @param set the binding group/set to use for the storage buffer
+  /// @param group the binding/group to use for the storage buffer
   /// @param binding the binding number to use for the storage buffer
-  void AddSampler(const std::string& name, uint32_t set, uint32_t binding) {
-    AddBinding(name, sampler_type(), ast::StorageClass::kUniformConstant, set,
+  void AddSampler(const std::string& name, uint32_t group, uint32_t binding) {
+    AddBinding(name, sampler_type(), ast::StorageClass::kUniformConstant, group,
                binding);
   }
 
   /// Adds a comparison sampler variable to the module
   /// @param name the name of the variable
-  /// @param set the binding group/set to use for the storage buffer
+  /// @param group the binding/group to use for the storage buffer
   /// @param binding the binding number to use for the storage buffer
   void AddComparisonSampler(const std::string& name,
-                            uint32_t set,
+                            uint32_t group,
                             uint32_t binding) {
     AddBinding(name, comparison_sampler_type(),
-               ast::StorageClass::kUniformConstant, set, binding);
+               ast::StorageClass::kUniformConstant, group, binding);
   }
 
   /// Generates a SampledTexture appropriate for the params
@@ -447,25 +447,25 @@
   /// Adds a sampled texture variable to the module
   /// @param name the name of the variable
   /// @param type the type to use
-  /// @param set the binding group/set to use for the sampled texture
+  /// @param group the binding/group to use for the sampled texture
   /// @param binding the binding number to use for the sampled texture
   void AddSampledTexture(const std::string& name,
                          ast::type::Type* type,
-                         uint32_t set,
+                         uint32_t group,
                          uint32_t binding) {
-    AddBinding(name, type, ast::StorageClass::kUniformConstant, set, binding);
+    AddBinding(name, type, ast::StorageClass::kUniformConstant, group, binding);
   }
 
   /// Adds a multi-sampled texture variable to the module
   /// @param name the name of the variable
   /// @param type the type to use
-  /// @param set the binding group/set to use for the multi-sampled texture
+  /// @param group the binding/group to use for the multi-sampled texture
   /// @param binding the binding number to use for the multi-sampled texture
   void AddMultisampledTexture(const std::string& name,
                               ast::type::Type* type,
-                              uint32_t set,
+                              uint32_t group,
                               uint32_t binding) {
-    AddBinding(name, type, ast::StorageClass::kUniformConstant, set, binding);
+    AddBinding(name, type, ast::StorageClass::kUniformConstant, group, binding);
   }
 
   void AddGlobalVariable(const std::string& name, ast::type::Type* type) {
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 54af127..93c685e 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -42,8 +42,8 @@
 #include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/float_literal.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stride_decoration.h"
 #include "src/ast/struct.h"
@@ -1295,7 +1295,7 @@
                << ": has no operand";
         return nullptr;
       }
-      decorations.emplace_back(create<ast::SetDecoration>(Source{}, deco[1]));
+      decorations.emplace_back(create<ast::GroupDecoration>(Source{}, deco[1]));
     }
     if (deco[0] == SpvDecorationBinding) {
       if (deco.size() == 1) {
diff --git a/src/reader/spirv/parser_impl_handle_test.cc b/src/reader/spirv/parser_impl_handle_test.cc
index 281380c..8c4d6da 100644
--- a/src/reader/spirv/parser_impl_handle_test.cc
+++ b/src/reader/spirv/parser_impl_handle_test.cc
@@ -1145,7 +1145,7 @@
                                                           R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1163,7 +1163,7 @@
                                                           R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1179,7 +1179,7 @@
                                                           R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1195,7 +1195,7 @@
                                                           R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1352,7 +1352,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1361,7 +1361,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1385,7 +1385,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1394,7 +1394,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1429,7 +1429,7 @@
             R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1438,7 +1438,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1464,7 +1464,7 @@
             R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1473,7 +1473,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1508,7 +1508,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1517,7 +1517,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1542,7 +1542,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1551,7 +1551,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1587,7 +1587,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1596,7 +1596,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1624,7 +1624,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1633,7 +1633,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1662,7 +1662,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1671,7 +1671,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1719,7 +1719,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1728,7 +1728,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1737,7 +1737,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{1}
     }
     x_30
@@ -1798,7 +1798,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1807,7 +1807,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1831,7 +1831,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1840,7 +1840,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1875,7 +1875,7 @@
             R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1884,7 +1884,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1910,7 +1910,7 @@
             R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1919,7 +1919,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1960,7 +1960,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -1969,7 +1969,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -1994,7 +1994,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2003,7 +2003,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2039,7 +2039,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2048,7 +2048,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2076,7 +2076,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2085,7 +2085,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2115,7 +2115,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2124,7 +2124,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2161,7 +2161,7 @@
             R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2170,7 +2170,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2197,7 +2197,7 @@
             R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2206,7 +2206,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2243,7 +2243,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2252,7 +2252,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2280,7 +2280,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2289,7 +2289,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2320,7 +2320,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2329,7 +2329,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2368,7 +2368,7 @@
                         R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2377,7 +2377,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2427,7 +2427,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2436,7 +2436,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2460,7 +2460,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -2469,7 +2469,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2573,7 +2573,7 @@
                               R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2601,7 +2601,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2621,7 +2621,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2644,7 +2644,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2667,7 +2667,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2690,7 +2690,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2710,7 +2710,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2733,7 +2733,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2757,7 +2757,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2923,7 +2923,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2943,7 +2943,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2965,7 +2965,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -2987,7 +2987,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3011,7 +3011,7 @@
                               "%99 = OpImageRead %v4float %im %vi12",
                               R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3043,7 +3043,7 @@
         {"%float 2D 0 0 0 1 Unknown", "%99 = OpImageFetch %v4float %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3071,7 +3071,7 @@
          "%99 = OpImageFetch %v4float %im %vi12 Lod %int_3",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3108,7 +3108,7 @@
                               "%99 = OpImageFetch %v4float %im %vi12 ",
                               R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3150,7 +3150,7 @@
          "%99 = OpImageFetch %v4float %im %vi12 Sample %i1",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3179,7 +3179,7 @@
          "%99 = OpImageFetch %v4float %im %vi123 Sample %i1",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3219,7 +3219,7 @@
          "%99 = OpImageFetch %v4float %im %vi12 Sample %u1",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3269,7 +3269,7 @@
         {"%float 2D 0 0 0 1 Unknown", "%99 = OpImageFetch %v4float %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3296,7 +3296,7 @@
         {"%uint 2D 0 0 0 1 Unknown", "%99 = OpImageFetch %v4uint %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3323,7 +3323,7 @@
         {"%uint 2D 0 0 0 1 Unknown", "%99 = OpImageFetch %v4int %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3352,7 +3352,7 @@
         {"%int 2D 0 0 0 1 Unknown", "%99 = OpImageFetch %v4int %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3379,7 +3379,7 @@
         {"%int 2D 0 0 0 1 Unknown", "%99 = OpImageFetch %v4uint %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3413,7 +3413,7 @@
         {"%float 2D 0 0 0 1 Rgba32f", "%99 = OpImageRead %v4float %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3440,7 +3440,7 @@
         {"%uint 2D 0 0 0 1 Rgba32ui", "%99 = OpImageRead %v4uint %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3467,7 +3467,7 @@
         {"%uint 2D 0 0 0 1 Rgba32ui", "%99 = OpImageRead %v4int %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3496,7 +3496,7 @@
         {"%int 2D 0 0 0 1 Rgba32i", "%99 = OpImageRead %v4int %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3523,7 +3523,7 @@
         {"%int 2D 0 0 0 1 Rgba32i", "%99 = OpImageRead %v4uint %im %vi12",
          R"(Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
@@ -3561,7 +3561,7 @@
          R"(
   Variable{
     Decorations{
-      SetDecoration{0}
+      GroupDecoration{0}
       BindingDecoration{0}
     }
     x_10
@@ -3570,7 +3570,7 @@
   }
   Variable{
     Decorations{
-      SetDecoration{2}
+      GroupDecoration{2}
       BindingDecoration{1}
     }
     x_20
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index b39f219..f4ce510 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -1571,7 +1571,7 @@
          "instruction, found '4'."));
 }
 
-TEST_F(SpvModuleScopeVarParserTest, DescriptorSetDecoration_Valid) {
+TEST_F(SpvModuleScopeVarParserTest, DescriptorGroupDecoration_Valid) {
   auto p = parser(test::Assemble(R"(
      OpName %myvar "myvar"
      OpDecorate %myvar DescriptorSet 3
@@ -1587,7 +1587,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(
   Variable{
     Decorations{
-      SetDecoration{3}
+      GroupDecoration{3}
     }
     myvar
     storage_buffer
@@ -1597,7 +1597,7 @@
 }
 
 TEST_F(SpvModuleScopeVarParserTest,
-       DescriptorSetDecoration_MissingOperandWontAssemble) {
+       DescriptorGroupDecoration_MissingOperandWontAssemble) {
   const auto assembly = R"(
      OpName %myvar "myvar"
      OpDecorate %myvar DescriptorSet
@@ -1611,7 +1611,7 @@
 }
 
 TEST_F(SpvModuleScopeVarParserTest,
-       DescriptorSetDecoration_TwoOperandsWontAssemble) {
+       DescriptorGroupDecoration_TwoOperandsWontAssemble) {
   const auto assembly = R"(
      OpName %myvar "myvar"
      OpDecorate %myvar DescriptorSet 3 4
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 50d6f17..6900f23 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -32,13 +32,13 @@
 #include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/float_literal.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/location_decoration.h"
 #include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/stride_decoration.h"
@@ -134,6 +134,7 @@
 const char kBindingDecoration[] = "binding";
 const char kBlockDecoration[] = "block";
 const char kBuiltinDecoration[] = "builtin";
+const char kGroupDecoration[] = "group";
 const char kLocationDecoration[] = "location";
 const char kOffsetDecoration[] = "offset";
 const char kSetDecoration[] = "set";
@@ -149,8 +150,9 @@
   return s == kAccessDecoration || s == kBindingDecoration ||
          s == kBlockDecoration || s == kBuiltinDecoration ||
          s == kLocationDecoration || s == kOffsetDecoration ||
-         s == kSetDecoration || s == kStageDecoration ||
-         s == kStrideDecoration || s == kWorkgroupSizeDecoration;
+         s == kSetDecoration || s == kGroupDecoration ||
+         s == kStageDecoration || s == kStrideDecoration ||
+         s == kWorkgroupSizeDecoration;
 }
 
 /// Enter-exit counters for block token types.
@@ -2863,7 +2865,7 @@
 
       if (is_decoration(peek())) {
         // We have two decorations in a bracket without a separating comma.
-        // e.g. [[location(1) set(2)]]
+        // e.g. [[location(1) group(2)]]
         //                    ^^^ expected comma
         expect(use, Token::Type::kComma);
         return Failure::kErrored;
@@ -2934,14 +2936,14 @@
     });
   }
 
-  if (s == kSetDecoration) {
-    const char* use = "set decoration";
+  if (s == kSetDecoration || s == kGroupDecoration) {
+    const char* use = "group decoration";
     return expect_paren_block(use, [&]() -> Result {
       auto val = expect_positive_sint(use);
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::SetDecoration>(val.source, val.value);
+      return create<ast::GroupDecoration>(val.source, val.value);
     });
   }
 
diff --git a/src/reader/wgsl/parser_impl_error_msg_test.cc b/src/reader/wgsl/parser_impl_error_msg_test.cc
index f24eed4..ae6890c 100644
--- a/src/reader/wgsl/parser_impl_error_msg_test.cc
+++ b/src/reader/wgsl/parser_impl_error_msg_test.cc
@@ -941,10 +941,10 @@
 }
 
 TEST_F(ParserImplErrorTest, GlobalDeclVarDecoListMissingComma) {
-  EXPECT("[[location(1) set(2)]] var i : i32;",
+  EXPECT("[[location(1) group(2)]] var i : i32;",
          "test.wgsl:1:15 error: expected ',' for decoration list\n"
-         "[[location(1) set(2)]] var i : i32;\n"
-         "              ^^^\n");
+         "[[location(1) group(2)]] var i : i32;\n"
+         "              ^^^^^\n");
 }
 
 TEST_F(ParserImplErrorTest, GlobalDeclVarDecoListMissingEnd) {
@@ -1026,26 +1026,26 @@
          "          ^\n");
 }
 
-TEST_F(ParserImplErrorTest, GlobalDeclVarDecoSetMissingLParen) {
-  EXPECT("[[set 1]] var i : i32;",
-         "test.wgsl:1:7 error: expected '(' for set decoration\n"
-         "[[set 1]] var i : i32;\n"
-         "      ^\n");
+TEST_F(ParserImplErrorTest, GlobalDeclVarDecoGroupMissingLParen) {
+  EXPECT("[[group 1]] var i : i32;",
+         "test.wgsl:1:9 error: expected '(' for group decoration\n"
+         "[[group 1]] var i : i32;\n"
+         "        ^\n");
 }
 
-TEST_F(ParserImplErrorTest, GlobalDeclVarDecoSetMissingRParen) {
-  EXPECT("[[set(1]] var i : i32;",
-         "test.wgsl:1:8 error: expected ')' for set decoration\n"
-         "[[set(1]] var i : i32;\n"
-         "       ^^\n");
+TEST_F(ParserImplErrorTest, GlobalDeclVarDecoGroupMissingRParen) {
+  EXPECT("[[group(1]] var i : i32;",
+         "test.wgsl:1:10 error: expected ')' for group decoration\n"
+         "[[group(1]] var i : i32;\n"
+         "         ^^\n");
 }
 
-TEST_F(ParserImplErrorTest, GlobalDeclVarDecoBindingSetValue) {
-  EXPECT("[[set(x)]] var i : i32;",
-         "test.wgsl:1:7 error: expected signed integer literal for set "
+TEST_F(ParserImplErrorTest, GlobalDeclVarDecoBindingGroupValue) {
+  EXPECT("[[group(x)]] var i : i32;",
+         "test.wgsl:1:9 error: expected signed integer literal for group "
          "decoration\n"
-         "[[set(x)]] var i : i32;\n"
-         "      ^\n");
+         "[[group(x)]] var i : i32;\n"
+         "        ^\n");
 }
 
 TEST_F(ParserImplErrorTest, GlobalDeclVarInvalidIdentifier) {
diff --git a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
index be1199a..f17ceca 100644
--- a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
@@ -74,7 +74,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_WithDecoration) {
-  auto p = parser("[[binding(2), set(1)]] var<out> a : f32");
+  auto p = parser("[[binding(2), group(1)]] var<out> a : f32");
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
   EXPECT_TRUE(decos.matched);
@@ -90,20 +90,20 @@
   EXPECT_EQ(e->storage_class(), ast::StorageClass::kOutput);
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
-  EXPECT_EQ(e->source().range.begin.column, 33u);
+  EXPECT_EQ(e->source().range.begin.column, 35u);
   EXPECT_EQ(e->source().range.end.line, 1u);
-  EXPECT_EQ(e->source().range.end.column, 34u);
+  EXPECT_EQ(e->source().range.end.column, 36u);
 
   ASSERT_EQ(e->constructor(), nullptr);
 
   auto& decorations = e->decorations();
   ASSERT_EQ(decorations.size(), 2u);
   ASSERT_TRUE(decorations[0]->Is<ast::BindingDecoration>());
-  ASSERT_TRUE(decorations[1]->Is<ast::SetDecoration>());
+  ASSERT_TRUE(decorations[1]->Is<ast::GroupDecoration>());
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_WithDecoration_MulitpleGroups) {
-  auto p = parser("[[binding(2)]] [[set(1)]] var<out> a : f32");
+  auto p = parser("[[binding(2)]] [[group(1)]] var<out> a : f32");
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
   EXPECT_TRUE(decos.matched);
@@ -120,16 +120,16 @@
   EXPECT_EQ(e->storage_class(), ast::StorageClass::kOutput);
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
-  EXPECT_EQ(e->source().range.begin.column, 36u);
+  EXPECT_EQ(e->source().range.begin.column, 38u);
   EXPECT_EQ(e->source().range.end.line, 1u);
-  EXPECT_EQ(e->source().range.end.column, 37u);
+  EXPECT_EQ(e->source().range.end.column, 39u);
 
   ASSERT_EQ(e->constructor(), nullptr);
 
   auto& decorations = e->decorations();
   ASSERT_EQ(decorations.size(), 2u);
   ASSERT_TRUE(decorations[0]->Is<ast::BindingDecoration>());
-  ASSERT_TRUE(decorations[1]->Is<ast::SetDecoration>());
+  ASSERT_TRUE(decorations[1]->Is<ast::GroupDecoration>());
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_InvalidDecoration) {
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index d6b9ac5..aedded4 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -15,8 +15,8 @@
 #include "gtest/gtest.h"
 #include "src/ast/binding_decoration.h"
 #include "src/ast/builtin_decoration.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
-#include "src/ast/set_decoration.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
@@ -231,6 +231,7 @@
             "1:9: expected signed integer literal for binding decoration");
 }
 
+// DEPRECATED
 TEST_F(ParserImplTest, VariableDecoration_set) {
   auto p = parser("set(4)");
   auto deco = p->decoration();
@@ -240,52 +241,67 @@
   auto* var_deco = deco.value->As<ast::VariableDecoration>();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(var_deco, nullptr);
-  ASSERT_TRUE(var_deco->Is<ast::SetDecoration>());
+  ASSERT_TRUE(var_deco->Is<ast::GroupDecoration>());
 
-  auto* set = var_deco->As<ast::SetDecoration>();
-  EXPECT_EQ(set->value(), 4u);
+  auto* group = var_deco->As<ast::GroupDecoration>();
+  EXPECT_EQ(group->value(), 4u);
 }
 
-TEST_F(ParserImplTest, VariableDecoration_Set_MissingLeftParen) {
-  auto p = parser("set 2)");
+TEST_F(ParserImplTest, VariableDecoration_group) {
+  auto p = parser("group(4)");
+  auto deco = p->decoration();
+  EXPECT_TRUE(deco.matched);
+  EXPECT_FALSE(deco.errored);
+  ASSERT_NE(deco.value, nullptr);
+  auto* var_deco = deco.value->As<ast::VariableDecoration>();
+  ASSERT_FALSE(p->has_error());
+  ASSERT_NE(var_deco, nullptr);
+  ASSERT_TRUE(var_deco->Is<ast::GroupDecoration>());
+
+  auto* group = var_deco->As<ast::GroupDecoration>();
+  EXPECT_EQ(group->value(), 4u);
+}
+
+TEST_F(ParserImplTest, VariableDecoration_Group_MissingLeftParen) {
+  auto p = parser("group 2)");
   auto deco = p->decoration();
   EXPECT_FALSE(deco.matched);
   EXPECT_TRUE(deco.errored);
   EXPECT_EQ(deco.value, nullptr);
   EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:5: expected '(' for set decoration");
+  EXPECT_EQ(p->error(), "1:7: expected '(' for group decoration");
 }
 
-TEST_F(ParserImplTest, VariableDecoration_Set_MissingRightParen) {
-  auto p = parser("set(2");
+TEST_F(ParserImplTest, VariableDecoration_Group_MissingRightParen) {
+  auto p = parser("group(2");
   auto deco = p->decoration();
   EXPECT_FALSE(deco.matched);
   EXPECT_TRUE(deco.errored);
   EXPECT_EQ(deco.value, nullptr);
   EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:6: expected ')' for set decoration");
+  EXPECT_EQ(p->error(), "1:8: expected ')' for group decoration");
 }
 
-TEST_F(ParserImplTest, VariableDecoration_Set_MissingValue) {
-  auto p = parser("set()");
+TEST_F(ParserImplTest, VariableDecoration_Group_MissingValue) {
+  auto p = parser("group()");
   auto deco = p->decoration();
   EXPECT_FALSE(deco.matched);
   EXPECT_TRUE(deco.errored);
   EXPECT_EQ(deco.value, nullptr);
   EXPECT_TRUE(p->has_error());
   EXPECT_EQ(p->error(),
-            "1:5: expected signed integer literal for set decoration");
+            "1:7: expected signed integer literal for group decoration");
 }
 
-TEST_F(ParserImplTest, VariableDecoration_Set_MissingInvalid) {
-  auto p = parser("set(nan)");
+TEST_F(ParserImplTest, VariableDecoration_Group_MissingInvalid) {
+  auto p = parser("group(nan)");
   auto deco = p->decoration();
   EXPECT_FALSE(deco.matched);
   EXPECT_TRUE(deco.errored);
   EXPECT_EQ(deco.value, nullptr);
   EXPECT_TRUE(p->has_error());
   EXPECT_EQ(p->error(),
-            "1:5: expected signed integer literal for set decoration");
+            "1:7: expected signed integer literal for group decoration");
 }
 
 }  // namespace
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index 8158857..adc4680 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -76,8 +76,8 @@
 
 }  // namespace
 
-FirstIndexOffset::FirstIndexOffset(uint32_t binding, uint32_t set)
-    : binding_(binding), set_(set) {}
+FirstIndexOffset::FirstIndexOffset(uint32_t binding, uint32_t group)
+    : binding_(binding), group_(group) {}
 
 FirstIndexOffset::~FirstIndexOffset() = default;
 
@@ -237,7 +237,7 @@
       nullptr,                           // constructor
       ast::VariableDecorationList{
           mod->create<ast::BindingDecoration>(Source{}, binding_),
-          mod->create<ast::SetDecoration>(Source{}, set_),
+          mod->create<ast::GroupDecoration>(Source{}, group_),
       });  // decorations
 
   mod->AddGlobalVariable(idx_var);
diff --git a/src/transform/first_index_offset.h b/src/transform/first_index_offset.h
index 64ad7a3..587412b 100644
--- a/src/transform/first_index_offset.h
+++ b/src/transform/first_index_offset.h
@@ -52,7 +52,7 @@
 ///     [[offset(4)]] tint_first_instance_index : u32;
 ///   };
 ///   [[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
-///   [[binding(N), set(M)]] var<uniform> tint_first_index_data :
+///   [[binding(N), group(M)]] var<uniform> tint_first_index_data :
 ///                                                    TintFirstIndexOffsetData;
 ///   fn func() -> u32 {
 ///     const vert_idx = (tint_first_index_offset_vert_idx +
@@ -64,8 +64,8 @@
  public:
   /// Constructor
   /// @param binding the binding() for firstVertex/Instance uniform
-  /// @param set the set() for firstVertex/Instance uniform
-  FirstIndexOffset(uint32_t binding, uint32_t set);
+  /// @param group the group() for firstVertex/Instance uniform
+  FirstIndexOffset(uint32_t binding, uint32_t group);
   ~FirstIndexOffset() override;
 
   /// Runs the transform on `module`, returning the transformation result.
@@ -104,7 +104,7 @@
       ast::Module* module);
 
   uint32_t binding_;
-  uint32_t set_;
+  uint32_t group_;
 
   bool has_vertex_index_ = false;
   bool has_instance_index_ = false;
diff --git a/src/transform/first_index_offset_test.cc b/src/transform/first_index_offset_test.cc
index c739810..91726c4 100644
--- a/src/transform/first_index_offset_test.cc
+++ b/src/transform/first_index_offset_test.cc
@@ -83,7 +83,7 @@
 };
 
 [[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32;
-[[binding(1), set(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
+[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
 
 fn test() -> u32 {
   const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);
@@ -123,7 +123,7 @@
 };
 
 [[builtin(instance_idx)]] var<in> tint_first_index_offset_inst_idx : u32;
-[[binding(1), set(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
+[[binding(1), group(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
 
 fn test() -> u32 {
   const inst_idx : u32 = (tint_first_index_offset_inst_idx + tint_first_index_data.tint_first_instance_index);
@@ -167,7 +167,7 @@
 
 [[builtin(instance_idx)]] var<in> tint_first_index_offset_instance_idx : u32;
 [[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32;
-[[binding(1), set(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
+[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
 
 fn test() -> u32 {
   const instance_idx : u32 = (tint_first_index_offset_instance_idx + tint_first_index_data.tint_first_instance_index);
@@ -212,7 +212,7 @@
 };
 
 [[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32;
-[[binding(1), set(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
+[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
 
 fn func1() -> u32 {
   const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index a0d9a7e..a06fe5d 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -65,8 +65,12 @@
   cfg.entry_point_name = std::move(entry_point);
 }
 
+void VertexPulling::SetPullingBufferBindingGroup(uint32_t number) {
+  cfg.pulling_group = number;
+}
+
 void VertexPulling::SetPullingBufferBindingSet(uint32_t number) {
-  cfg.pulling_set = number;
+  cfg.pulling_group = number;
 }
 
 Transform::Output VertexPulling::Run(ast::Module* in) {
@@ -293,7 +297,7 @@
         ast::VariableDecorationList{
             // decorations
             out->create<ast::BindingDecoration>(Source{}, i),
-            out->create<ast::SetDecoration>(Source{}, cfg.pulling_set),
+            out->create<ast::GroupDecoration>(Source{}, cfg.pulling_group),
         });
     out->AddGlobalVariable(var);
   }
diff --git a/src/transform/vertex_pulling.h b/src/transform/vertex_pulling.h
index 6d4f23c..2233678 100644
--- a/src/transform/vertex_pulling.h
+++ b/src/transform/vertex_pulling.h
@@ -151,8 +151,13 @@
 
   /// Sets the "set" we will put all our vertex buffers into (as storage
   /// buffers)
+  /// DEPRECATED
   /// @param number the set number we will use
   void SetPullingBufferBindingSet(uint32_t number);
+  /// Sets the "group" we will put all our vertex buffers into (as storage
+  /// buffers)
+  /// @param number the group number we will use
+  void SetPullingBufferBindingGroup(uint32_t number);
 
   /// Runs the transform on `module`, returning the transformation result.
   /// @note Users of Tint should register the transform with transform manager
@@ -171,8 +176,8 @@
     std::string entry_point_name;
     VertexStateDescriptor vertex_state;
     bool vertex_state_set = false;
-    // Default to 4 as it is past the limits of user-accessible sets
-    uint32_t pulling_set = 4u;
+    // Default to 4 as it is past the limits of user-accessible groups
+    uint32_t pulling_group = 4u;
   };
 
   Config cfg;
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index 87e9a0c..88594cc 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -134,7 +134,7 @@
 };
 
 [[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 
 [[stage(vertex)]]
@@ -173,7 +173,7 @@
 };
 
 [[builtin(instance_idx)]] var<in> _tint_pulling_instance_index : i32;
-[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 
 [[stage(vertex)]]
@@ -212,7 +212,7 @@
 };
 
 [[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), set(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 
 [[stage(vertex)]]
@@ -255,8 +255,8 @@
   _tint_vertex_data : [[stride(4)]] array<u32>;
 };
 
-[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
-[[binding(1), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
+[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
 var<private> var_a : f32;
 var<private> var_b : f32;
 [[builtin(vertex_idx)]] var<in> custom_vertex_index : i32;
@@ -302,7 +302,7 @@
 };
 
 [[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 var<private> var_b : array<f32, 4>;
 
@@ -348,9 +348,9 @@
 };
 
 [[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
-[[binding(1), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
-[[binding(2), set(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_2 : TintVertexData;
+[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
+[[binding(2), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_2 : TintVertexData;
 var<private> var_a : array<f32, 2>;
 var<private> var_b : array<f32, 3>;
 var<private> var_c : array<f32, 4>;
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index af20ff1..557a35b 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -18,6 +18,7 @@
 #include "src/ast/call_expression.h"
 #include "src/ast/float_literal.h"
 #include "src/ast/function.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/location_decoration.h"
@@ -26,7 +27,6 @@
 #include "src/ast/pipeline_stage.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct.h"
@@ -285,7 +285,7 @@
       Var("coord", ast::StorageClass::kUniform, ty.vec4<f32>(), nullptr,
           ast::VariableDecorationList{
               create<ast::BindingDecoration>(0),
-              create<ast::SetDecoration>(1),
+              create<ast::GroupDecoration>(1),
           });
 
   td.RegisterVariableForTesting(coord_var);
@@ -331,7 +331,7 @@
   auto* coord_var = Var("uniforms", ast::StorageClass::kUniform, s, nullptr,
                         ast::VariableDecorationList{
                             create<ast::BindingDecoration>(0),
-                            create<ast::SetDecoration>(1),
+                            create<ast::GroupDecoration>(1),
                         });
 
   mod->AddConstructedType(s);
@@ -386,7 +386,7 @@
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{
               create<ast::BindingDecoration>(0),
-              create<ast::SetDecoration>(1),
+              create<ast::GroupDecoration>(1),
           });
 
   td.RegisterVariableForTesting(coord_var);
@@ -434,7 +434,7 @@
           ast::VariableDecorationList{
               // decorations
               create<ast::BindingDecoration>(0),
-              create<ast::SetDecoration>(1),
+              create<ast::GroupDecoration>(1),
           });
 
   td.RegisterVariableForTesting(coord_var);
@@ -481,7 +481,7 @@
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{
               create<ast::BindingDecoration>(0),
-              create<ast::SetDecoration>(1),
+              create<ast::GroupDecoration>(1),
           });
 
   td.RegisterVariableForTesting(coord_var);
@@ -723,7 +723,7 @@
       Var("coord", ast::StorageClass::kUniform, ty.vec4<f32>(), nullptr,
           ast::VariableDecorationList{
               create<ast::BindingDecoration>(0),
-              create<ast::SetDecoration>(1),
+              create<ast::GroupDecoration>(1),
           });
 
   td.RegisterVariableForTesting(coord_var);
@@ -781,7 +781,7 @@
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{
               create<ast::BindingDecoration>(0),
-              create<ast::SetDecoration>(1),
+              create<ast::GroupDecoration>(1),
           });
 
   td.RegisterVariableForTesting(coord_var);
@@ -969,7 +969,7 @@
   // [[block]] struct Data {
   //   [[offset(0)]] d : f32;
   // };
-  // [[binding(0), set(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage_buffer> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -991,7 +991,7 @@
   auto* data_var = Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
                        ast::VariableDecorationList{
                            create<ast::BindingDecoration>(0),
-                           create<ast::SetDecoration>(0),
+                           create<ast::GroupDecoration>(0),
                        });
 
   mod->AddConstructedType(s);
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 210d202..0c3cd3b 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -19,6 +19,7 @@
 #include "src/ast/call_expression.h"
 #include "src/ast/float_literal.h"
 #include "src/ast/function.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/location_decoration.h"
@@ -27,7 +28,6 @@
 #include "src/ast/pipeline_stage.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct.h"
@@ -287,7 +287,7 @@
   auto* coord_var =
       Var("coord", ast::StorageClass::kUniform, ty.vec4<f32>(), nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(1)});
+                                      create<ast::GroupDecoration>(1)});
 
   td.RegisterVariableForTesting(coord_var);
 
@@ -336,7 +336,7 @@
   auto* coord_var =
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(1)});
+                                      create<ast::GroupDecoration>(1)});
 
   td.RegisterVariableForTesting(coord_var);
 
@@ -388,7 +388,7 @@
   auto* coord_var =
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(1)});
+                                      create<ast::GroupDecoration>(1)});
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -629,7 +629,7 @@
   auto* coord_var =
       Var("coord", ast::StorageClass::kUniform, ty.vec4<f32>(), nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(1)});
+                                      create<ast::GroupDecoration>(1)});
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -693,7 +693,7 @@
   auto* coord_var =
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(1)});
+                                      create<ast::GroupDecoration>(1)});
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -760,7 +760,7 @@
   auto* coord_var =
       Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(1)});
+                                      create<ast::GroupDecoration>(1)});
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -914,7 +914,7 @@
   // [[block]] struct Data {
   //   [[offset(0)]] d : f32;
   // };
-  // [[binding(0), set(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage_buffer> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -938,7 +938,7 @@
   auto* data_var =
       Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
-                                      create<ast::SetDecoration>(0)});
+                                      create<ast::GroupDecoration>(0)});
 
   mod->AddConstructedType(s);
   td.RegisterVariableForTesting(data_var);
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index e6d11fd..a37daf1 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -37,6 +37,7 @@
 #include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/float_literal.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/intrinsic.h"
@@ -46,7 +47,6 @@
 #include "src/ast/null_literal.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
@@ -816,10 +816,10 @@
       push_annot(spv::Op::OpDecorate,
                  {Operand::Int(var_id), Operand::Int(SpvDecorationBinding),
                   Operand::Int(binding->value())});
-    } else if (auto* set = deco->As<ast::SetDecoration>()) {
+    } else if (auto* group = deco->As<ast::GroupDecoration>()) {
       push_annot(spv::Op::OpDecorate, {Operand::Int(var_id),
                                        Operand::Int(SpvDecorationDescriptorSet),
-                                       Operand::Int(set->value())});
+                                       Operand::Int(group->value())});
     } else if (deco->Is<ast::ConstantIdDecoration>()) {
       // Spec constants are handled elsewhere
     } else {
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index a50017b..8c19bb3 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -198,7 +198,7 @@
   // [[block]] struct Data {
   //   [[offset(0)]] d : f32;
   // };
-  // [[binding(0), set(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage_buffer> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -222,7 +222,7 @@
   auto* data_var = Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
                        ast::VariableDecorationList{
                            create<ast::BindingDecoration>(0),
-                           create<ast::SetDecoration>(0),
+                           create<ast::GroupDecoration>(0),
                        });
 
   mod->AddConstructedType(s);
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index fef4b90..a113faa 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -20,9 +20,9 @@
 #include "src/ast/builtin.h"
 #include "src/ast/builtin_decoration.h"
 #include "src/ast/float_literal.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/storage_class.h"
 #include "src/ast/struct.h"
 #include "src/ast/type/access_control_type.h"
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 8d3585b..d05beb2 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -21,10 +21,10 @@
 #include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/float_literal.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/storage_class.h"
 #include "src/ast/struct.h"
 #include "src/ast/type/access_control_type.h"
@@ -194,11 +194,11 @@
 )");
 }
 
-TEST_F(BuilderTest, GlobalVar_WithBindingAndSet) {
+TEST_F(BuilderTest, GlobalVar_WithBindingAndGroup) {
   auto* v = Var("var", ast::StorageClass::kOutput, ty.f32, nullptr,
                 ast::VariableDecorationList{
                     create<ast::BindingDecoration>(2),
-                    create<ast::SetDecoration>(3),
+                    create<ast::GroupDecoration>(3),
                 });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index aabb8fd..a0f2c6c 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -34,6 +34,7 @@
 #include "src/ast/continue_statement.h"
 #include "src/ast/else_statement.h"
 #include "src/ast/float_literal.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/location_decoration.h"
@@ -41,7 +42,6 @@
 #include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/statement.h"
@@ -620,8 +620,8 @@
 
     if (auto* binding = deco->As<ast::BindingDecoration>()) {
       out_ << "binding(" << binding->value() << ")";
-    } else if (auto* set = deco->As<ast::SetDecoration>()) {
-      out_ << "set(" << set->value() << ")";
+    } else if (auto* group = deco->As<ast::GroupDecoration>()) {
+      out_ << "group(" << group->value() << ")";
     } else if (auto* location = deco->As<ast::LocationDecoration>()) {
       out_ << "location(" << location->value() << ")";
     } else if (auto* builtin = deco->As<ast::BuiltinDecoration>()) {
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 37d61cb..e3cf06e 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -153,7 +153,7 @@
   // [[block]] struct Data {
   //   [[offset(0)]] d : f32;
   // };
-  // [[binding(0), set(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage_buffer> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -178,7 +178,7 @@
                        ast::VariableDecorationList{
                            // decorations
                            create<ast::BindingDecoration>(0),
-                           create<ast::SetDecoration>(0),
+                           create<ast::GroupDecoration>(0),
                        });
 
   mod->AddConstructedType(s);
@@ -233,7 +233,7 @@
   d : f32;
 };
 
-[[binding(0), set(0)]] var<storage_buffer> data : [[access(read_write)]]
+[[binding(0), group(0)]] var<storage_buffer> data : [[access(read_write)]]
 Data;
 
 [[stage(compute)]]
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 52a7542..501c880 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -18,8 +18,8 @@
 #include "src/ast/binding_decoration.h"
 #include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
+#include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
-#include "src/ast/set_decoration.h"
 #include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
@@ -65,7 +65,7 @@
                 ast::VariableDecorationList{
                     create<ast::BuiltinDecoration>(ast::Builtin::kPosition),
                     create<ast::BindingDecoration>(0),
-                    create<ast::SetDecoration>(1),
+                    create<ast::GroupDecoration>(1),
                     create<ast::LocationDecoration>(2),
                     create<ast::ConstantIdDecoration>(42),
                 });
@@ -73,7 +73,7 @@
   ASSERT_TRUE(gen.EmitVariable(v)) << gen.error();
   EXPECT_EQ(
       gen.result(),
-      R"([[builtin(position), binding(0), set(1), location(2), constant_id(42)]] var a : f32;
+      R"([[builtin(position), binding(0), group(1), location(2), constant_id(42)]] var a : f32;
 )");
 }
 
diff --git a/test/compute_boids.wgsl b/test/compute_boids.wgsl
index 9b0059e..db76200 100644
--- a/test/compute_boids.wgsl
+++ b/test/compute_boids.wgsl
@@ -56,9 +56,9 @@
   [[offset(0)]] particles : [[stride(16)]] array<Particle, 5>;
 };
 
-[[binding(0), set(0)]] var<uniform> params : [[access(read)]] SimParams;
-[[binding(1), set(0)]] var<storage_buffer> particlesA : [[access(read_write)]] Particles;
-[[binding(2), set(0)]] var<storage_buffer> particlesB : [[access(read_write)]] Particles;
+[[binding(0), group(0)]] var<uniform> params : [[access(read)]] SimParams;
+[[binding(1), group(0)]] var<storage_buffer> particlesA : [[access(read_write)]] Particles;
+[[binding(2), group(0)]] var<storage_buffer> particlesB : [[access(read_write)]] Particles;
 
 [[builtin(global_invocation_id)]] var<in> gl_GlobalInvocationID : vec3<u32>;
 
diff --git a/test/cube.wgsl b/test/cube.wgsl
index 0e0377b..908756c 100644
--- a/test/cube.wgsl
+++ b/test/cube.wgsl
@@ -17,7 +17,7 @@
   [[offset(0)]] modelViewProjectionMatrix : mat4x4<f32>;
 };
 
-[[binding(0), set(0)]] var<uniform> uniforms : [[access(read)]] Uniforms;
+[[binding(0), group(0)]] var<uniform> uniforms : [[access(read)]] Uniforms;
 
 [[location(0)]] var<in> cur_position : vec4<f32>;
 [[location(1)]] var<in> color : vec4<f32>;
