Update storage_buffer storage class.

This Cl updates the `storage_buffer` storage class to just be `storage`.

Change-Id: Ibfaecbb0862bd60d39665eb937c0b6300899e177
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/38161
Auto-Submit: dan sinclair <dsinclair@chromium.org>
Reviewed-by: David Neto <dneto@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/fuzzers/dictionary.txt b/fuzzers/dictionary.txt
index 359d58f..08a5059 100644
--- a/fuzzers/dictionary.txt
+++ b/fuzzers/dictionary.txt
@@ -76,7 +76,7 @@
 "sampler"
 "sampler_comparison"
 "set"
-"storage_buffer"
+"storage"
 "stage"
 "stride"
 "struct"
diff --git a/src/ast/function.cc b/src/ast/function.cc
index ebd21d1..822d8cb 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -130,7 +130,7 @@
   std::vector<std::pair<Variable*, Function::BindingInfo>> ret;
 
   for (auto* var : referenced_module_variables()) {
-    if (var->storage_class() != StorageClass::kStorageBuffer) {
+    if (var->storage_class() != StorageClass::kStorage) {
       continue;
     }
 
diff --git a/src/ast/module_clone_test.cc b/src/ast/module_clone_test.cc
index 4e61aca..e42cb9a 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>;
-[[group(10), binding(20)]] var<storage_buffer> g7 : S;
-[[group(10), binding(20)]] var<storage_buffer> g8 : [[access(read)]]
+[[group(10), binding(20)]] var<storage> g7 : S;
+[[group(10), binding(20)]] var<storage> g8 : [[access(read)]]
 S;
-[[group(10), binding(20)]] var<storage_buffer> g9 : [[access(read_write)]]
+[[group(10), binding(20)]] var<storage> g9 : [[access(read_write)]]
 S;
 
 fn f0(p0 : bool) -> f32 {
diff --git a/src/ast/storage_class.cc b/src/ast/storage_class.cc
index add2597..13aa696 100644
--- a/src/ast/storage_class.cc
+++ b/src/ast/storage_class.cc
@@ -43,8 +43,8 @@
       out << "uniform_constant";
       break;
     }
-    case StorageClass::kStorageBuffer: {
-      out << "storage_buffer";
+    case StorageClass::kStorage: {
+      out << "storage";
       break;
     }
     case StorageClass::kImage: {
diff --git a/src/ast/storage_class.h b/src/ast/storage_class.h
index 2fd13cd..09bb41c 100644
--- a/src/ast/storage_class.h
+++ b/src/ast/storage_class.h
@@ -28,7 +28,7 @@
   kUniform,
   kWorkgroup,
   kUniformConstant,
-  kStorageBuffer,
+  kStorage,
   kImage,
   kPrivate,
   kFunction
diff --git a/src/ast/type/pointer_type_test.cc b/src/ast/type/pointer_type_test.cc
index 0089c43..95a4c87 100644
--- a/src/ast/type/pointer_type_test.cc
+++ b/src/ast/type/pointer_type_test.cc
@@ -35,9 +35,9 @@
 
 TEST_F(PointerTest, Creation) {
   I32 i32;
-  Pointer p{&i32, StorageClass::kStorageBuffer};
+  Pointer p{&i32, StorageClass::kStorage};
   EXPECT_EQ(p.type(), &i32);
-  EXPECT_EQ(p.storage_class(), StorageClass::kStorageBuffer);
+  EXPECT_EQ(p.storage_class(), StorageClass::kStorage);
 }
 
 TEST_F(PointerTest, Is) {
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 8be535e..0dd9ee0 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -356,7 +356,7 @@
                         ast::type::Type* type,
                         uint32_t group,
                         uint32_t binding) {
-    AddBinding(name, type, ast::StorageClass::kStorageBuffer, group, binding);
+    AddBinding(name, type, ast::StorageClass::kStorage, group, binding);
   }
 
   /// Generates a function that references a specific struct variable
diff --git a/src/reader/spirv/enum_converter.cc b/src/reader/spirv/enum_converter.cc
index fa7cc1e..8719140 100644
--- a/src/reader/spirv/enum_converter.cc
+++ b/src/reader/spirv/enum_converter.cc
@@ -51,7 +51,7 @@
     case SpvStorageClassUniformConstant:
       return ast::StorageClass::kUniformConstant;
     case SpvStorageClassStorageBuffer:
-      return ast::StorageClass::kStorageBuffer;
+      return ast::StorageClass::kStorage;
     case SpvStorageClassImage:
       return ast::StorageClass::kImage;
     case SpvStorageClassPrivate:
diff --git a/src/reader/spirv/enum_converter_test.cc b/src/reader/spirv/enum_converter_test.cc
index 426b94d..bf4c5c0 100644
--- a/src/reader/spirv/enum_converter_test.cc
+++ b/src/reader/spirv/enum_converter_test.cc
@@ -148,7 +148,7 @@
         StorageClassCase{SpvStorageClassUniformConstant, true,
                          ast::StorageClass::kUniformConstant},
         StorageClassCase{SpvStorageClassStorageBuffer, true,
-                         ast::StorageClass::kStorageBuffer},
+                         ast::StorageClass::kStorage},
         StorageClassCase{SpvStorageClassImage, true, ast::StorageClass::kImage},
         StorageClassCase{SpvStorageClassPrivate, true,
                          ast::StorageClass::kPrivate},
diff --git a/src/reader/spirv/function_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index 37dede2..29023df 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -811,7 +811,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   })"));
 }
@@ -913,7 +913,7 @@
   VariableConst{
     x_2
     none
-    __ptr_storage_buffer__u32
+    __ptr_storage__u32
     {
       ArrayAccessor[not set]{
         MemberAccessor[not set]{
@@ -969,7 +969,7 @@
   Variable{
     x_2
     function
-    __ptr_storage_buffer__u32
+    __ptr_storage__u32
   }
 }
 If{
diff --git a/src/reader/spirv/namer.cc b/src/reader/spirv/namer.cc
index 8ba38fa..d23a0c3 100644
--- a/src/reader/spirv/namer.cc
+++ b/src/reader/spirv/namer.cc
@@ -26,84 +26,32 @@
 
 const char* kWGSLReservedWords[] = {
     // Please keep this list sorted
-    "array",
-    "as",
-    "asm",
-    "bf16",
-    "binding",
-    "block",
-    "bool",
-    "break",
-    "builtin",
-    "case",
-    "cast",
-    "compute",
-    "const",
-    "constant_id",
-    "continue",
-    "default",
-    "discard",
-    "do",
-    "else",
-    "elseif",
-    "entry_point",
-    "enum",
-    "f16",
-    "f32",
-    "fallthrough",
-    "false",
-    "fn",
-    "for",
-    "fragment",
-    "i16",
-    "i32",
-    "i64",
-    "i8",
-    "if",
-    "image",
-    "import",
-    "in",
-    "let",
-    "location",
-    "loop",
-    "mat2x2",
-    "mat2x3",
-    "mat2x4",
-    "mat3x2",
-    "mat3x3",
-    "mat3x4",
-    "mat4x2",
-    "mat4x3",
-    "mat4x4",
-    "offset",
-    "out",
-    "premerge",
-    "private",
-    "ptr",
-    "regardless",
-    "return",
-    "set",
-    "storage_buffer",
-    "struct",
-    "switch",
-    "true",
-    "type",
-    "typedef",
-    "u16",
-    "u32",
-    "u64",
-    "u8",
-    "uniform",
-    "uniform_constant",
-    "unless",
-    "using",
-    "var",
-    "vec2",
-    "vec3",
-    "vec4",
-    "vertex",
-    "void",
-    "while",
+    "array",       "as",          "asm",
+    "bf16",        "binding",     "block",
+    "bool",        "break",       "builtin",
+    "case",        "cast",        "compute",
+    "const",       "constant_id", "continue",
+    "default",     "discard",     "do",
+    "else",        "elseif",      "entry_point",
+    "enum",        "f16",         "f32",
+    "fallthrough", "false",       "fn",
+    "for",         "fragment",    "i16",
+    "i32",         "i64",         "i8",
+    "if",          "image",       "import",
+    "in",          "let",         "location",
+    "loop",        "mat2x2",      "mat2x3",
+    "mat2x4",      "mat3x2",      "mat3x3",
+    "mat3x4",      "mat4x2",      "mat4x3",
+    "mat4x4",      "offset",      "out",
+    "premerge",    "private",     "ptr",
+    "regardless",  "return",      "set",
+    "storage",     "struct",      "switch",
+    "true",        "type",        "typedef",
+    "u16",         "u32",         "u64",
+    "u8",          "uniform",     "uniform_constant",
+    "unless",      "using",       "var",
+    "vec2",        "vec3",        "vec4",
+    "vertex",      "void",        "while",
     "workgroup",
 };
 
diff --git a/src/reader/spirv/namer_test.cc b/src/reader/spirv/namer_test.cc
index 96dc0e3..9ebc3a7 100644
--- a/src/reader/spirv/namer_test.cc
+++ b/src/reader/spirv/namer_test.cc
@@ -324,84 +324,32 @@
                          SpvNamerReservedWordTest,
                          ::testing::ValuesIn(std::vector<std::string>{
                              // Please keep this list sorted.
-                             "array",
-                             "as",
-                             "asm",
-                             "bf16",
-                             "binding",
-                             "block",
-                             "bool",
-                             "break",
-                             "builtin",
-                             "case",
-                             "cast",
-                             "compute",
-                             "const",
-                             "constant_id",
-                             "continue",
-                             "default",
-                             "discard",
-                             "do",
-                             "else",
-                             "elseif",
-                             "entry_point",
-                             "enum",
-                             "f16",
-                             "f32",
-                             "fallthrough",
-                             "false",
-                             "fn",
-                             "for",
-                             "fragment",
-                             "i16",
-                             "i32",
-                             "i64",
-                             "i8",
-                             "if",
-                             "image",
-                             "import",
-                             "in",
-                             "let",
-                             "location",
-                             "loop",
-                             "mat2x2",
-                             "mat2x3",
-                             "mat2x4",
-                             "mat3x2",
-                             "mat3x3",
-                             "mat3x4",
-                             "mat4x2",
-                             "mat4x3",
-                             "mat4x4",
-                             "offset",
-                             "out",
-                             "premerge",
-                             "private",
-                             "ptr",
-                             "regardless",
-                             "return",
-                             "set",
-                             "storage_buffer",
-                             "struct",
-                             "switch",
-                             "true",
-                             "type",
-                             "typedef",
-                             "u16",
-                             "u32",
-                             "u64",
-                             "u8",
-                             "uniform",
-                             "uniform_constant",
-                             "unless",
-                             "using",
-                             "var",
-                             "vec2",
-                             "vec3",
-                             "vec4",
-                             "vertex",
-                             "void",
-                             "while",
+                             "array",       "as",          "asm",
+                             "bf16",        "binding",     "block",
+                             "bool",        "break",       "builtin",
+                             "case",        "cast",        "compute",
+                             "const",       "constant_id", "continue",
+                             "default",     "discard",     "do",
+                             "else",        "elseif",      "entry_point",
+                             "enum",        "f16",         "f32",
+                             "fallthrough", "false",       "fn",
+                             "for",         "fragment",    "i16",
+                             "i32",         "i64",         "i8",
+                             "if",          "image",       "import",
+                             "in",          "let",         "location",
+                             "loop",        "mat2x2",      "mat2x3",
+                             "mat2x4",      "mat3x2",      "mat3x3",
+                             "mat3x4",      "mat4x2",      "mat4x3",
+                             "mat4x4",      "offset",      "out",
+                             "premerge",    "private",     "ptr",
+                             "regardless",  "return",      "set",
+                             "storage",     "struct",      "switch",
+                             "true",        "type",        "typedef",
+                             "u16",         "u32",         "u64",
+                             "u8",          "uniform",     "uniform_constant",
+                             "unless",      "using",       "var",
+                             "vec2",        "vec3",        "vec4",
+                             "vertex",      "void",        "while",
                              "workgroup",
                          }));
 
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 93c685e..a9b7281 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -1002,7 +1002,7 @@
   }
   if (ast_storage_class == ast::StorageClass::kUniform &&
       remap_buffer_block_type_.count(pointee_type_id)) {
-    ast_storage_class = ast::StorageClass::kStorageBuffer;
+    ast_storage_class = ast::StorageClass::kStorage;
     remap_buffer_block_type_.insert(type_id);
   }
   return ast_module_.create<ast::type::Pointer>(ast_elem_ty, ast_storage_class);
@@ -1163,7 +1163,7 @@
       case ast::StorageClass::kOutput:
       case ast::StorageClass::kUniform:
       case ast::StorageClass::kUniformConstant:
-      case ast::StorageClass::kStorageBuffer:
+      case ast::StorageClass::kStorage:
       case ast::StorageClass::kImage:
       case ast::StorageClass::kWorkgroup:
       case ast::StorageClass::kPrivate:
@@ -1246,7 +1246,7 @@
     return nullptr;
   }
 
-  if (sc == ast::StorageClass::kStorageBuffer) {
+  if (sc == ast::StorageClass::kStorage) {
     // Apply the access(read) or access(read_write) modifier.
     auto access = read_only_struct_types_.count(type)
                       ? ast::AccessControl::kReadOnly
diff --git a/src/reader/spirv/parser_impl_convert_type_test.cc b/src/reader/spirv/parser_impl_convert_type_test.cc
index 0e07f20..99bf393 100644
--- a/src/reader/spirv/parser_impl_convert_type_test.cc
+++ b/src/reader/spirv/parser_impl_convert_type_test.cc
@@ -742,7 +742,7 @@
   auto* ptr_ty = type->As<ast::type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
   EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
-  EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kStorageBuffer);
+  EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kStorage);
   EXPECT_TRUE(p->error().empty());
 }
 
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 0c50d0d..aca14de 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -1590,7 +1590,7 @@
       GroupDecoration{3}
     }
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   })"))
       << module_str;
@@ -1645,7 +1645,7 @@
       BindingDecoration{3}
     }
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   })"))
       << module_str;
@@ -1703,7 +1703,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   }
 )")) << module_str;
@@ -1733,7 +1733,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   }
 })")) << module_str;
@@ -1763,7 +1763,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   }
 })")) << module_str;
@@ -1814,7 +1814,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_only__struct_S
   }
 })")) << module_str;
@@ -1844,7 +1844,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   }
 })")) << module_str;
@@ -1877,7 +1877,7 @@
   }
   Variable{
     myvar
-    storage_buffer
+    storage
     __access_control_read_write__struct_S
   }
 })")) << module_str;
diff --git a/src/reader/wgsl/lexer.cc b/src/reader/wgsl/lexer.cc
index c94dba2..8d1b0f4 100644
--- a/src/reader/wgsl/lexer.cc
+++ b/src/reader/wgsl/lexer.cc
@@ -640,8 +640,8 @@
     return {Token::Type::kSampler, source, "sampler"};
   if (str == "sampler_comparison")
     return {Token::Type::kComparisonSampler, source, "sampler_comparison"};
-  if (str == "storage_buffer")
-    return {Token::Type::kStorageBuffer, source, "storage_buffer"};
+  if (str == "storage_buffer" || str == "storage")
+    return {Token::Type::kStorage, source, "storage"};
   if (str == "struct")
     return {Token::Type::kStruct, source, "struct"};
   if (str == "switch")
@@ -821,6 +821,8 @@
     return {Token::Type::kReservedKeyword, source, "f16"};
   if (str == "f64")
     return {Token::Type::kReservedKeyword, source, "f64"};
+  if (str == "handle")
+    return {Token::Type::kReservedKeyword, source, "handle"};
   if (str == "i8")
     return {Token::Type::kReservedKeyword, source, "i8"};
   if (str == "i16")
diff --git a/src/reader/wgsl/lexer_test.cc b/src/reader/wgsl/lexer_test.cc
index 36ead45..cdcdf34 100644
--- a/src/reader/wgsl/lexer_test.cc
+++ b/src/reader/wgsl/lexer_test.cc
@@ -540,7 +540,8 @@
         TokenData{"return", Token::Type::kReturn},
         TokenData{"sampler", Token::Type::kSampler},
         TokenData{"sampler_comparison", Token::Type::kComparisonSampler},
-        TokenData{"storage_buffer", Token::Type::kStorageBuffer},
+        TokenData{"storage", Token::Type::kStorage},
+        TokenData{"storage_buffer", Token::Type::kStorage},
         TokenData{"struct", Token::Type::kStruct},
         TokenData{"switch", Token::Type::kSwitch},
         TokenData{"texture_1d", Token::Type::kTextureSampled1d},
@@ -638,6 +639,7 @@
                                          "enum",
                                          "f16",
                                          "f64",
+                                         "handle",
                                          "i8",
                                          "i16",
                                          "i64",
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index b6fe130..2175a46 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -1177,7 +1177,7 @@
 //  | UNIFORM
 //  | WORKGROUP
 //  | UNIFORM_CONSTANT
-//  | STORAGE_BUFFER
+//  | STORAGE
 //  | IMAGE
 //  | PRIVATE
 //  | FUNCTION
@@ -1198,8 +1198,8 @@
   if (match(Token::Type::kUniformConstant))
     return ast::StorageClass::kUniformConstant;
 
-  if (match(Token::Type::kStorageBuffer))
-    return ast::StorageClass::kStorageBuffer;
+  if (match(Token::Type::kStorage))
+    return ast::StorageClass::kStorage;
 
   if (match(Token::Type::kImage))
     return ast::StorageClass::kImage;
diff --git a/src/reader/wgsl/parser_impl_storage_class_test.cc b/src/reader/wgsl/parser_impl_storage_class_test.cc
index 5e0f0cc..ac37fa8 100644
--- a/src/reader/wgsl/parser_impl_storage_class_test.cc
+++ b/src/reader/wgsl/parser_impl_storage_class_test.cc
@@ -55,7 +55,8 @@
         StorageClassData{"workgroup", ast::StorageClass::kWorkgroup},
         StorageClassData{"uniform_constant",
                          ast::StorageClass::kUniformConstant},
-        StorageClassData{"storage_buffer", ast::StorageClass::kStorageBuffer},
+        StorageClassData{"storage", ast::StorageClass::kStorage},
+        StorageClassData{"storage_buffer", ast::StorageClass::kStorage},
         StorageClassData{"image", ast::StorageClass::kImage},
         StorageClassData{"private", ast::StorageClass::kPrivate},
         StorageClassData{"function", ast::StorageClass::kFunction}));
diff --git a/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
index 5f8c6ca..aebbb96 100644
--- a/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
@@ -57,8 +57,8 @@
         VariableStorageData{"workgroup", ast::StorageClass::kWorkgroup},
         VariableStorageData{"uniform_constant",
                             ast::StorageClass::kUniformConstant},
-        VariableStorageData{"storage_buffer",
-                            ast::StorageClass::kStorageBuffer},
+        VariableStorageData{"storage", ast::StorageClass::kStorage},
+        VariableStorageData{"storage_buffer", ast::StorageClass::kStorage},
         VariableStorageData{"image", ast::StorageClass::kImage},
         VariableStorageData{"private", ast::StorageClass::kPrivate},
         VariableStorageData{"function", ast::StorageClass::kFunction}));
diff --git a/src/reader/wgsl/token.cc b/src/reader/wgsl/token.cc
index 1ba7385..50ff0d5 100644
--- a/src/reader/wgsl/token.cc
+++ b/src/reader/wgsl/token.cc
@@ -251,8 +251,8 @@
       return "sampler";
     case Token::Type::kComparisonSampler:
       return "sampler_comparison";
-    case Token::Type::kStorageBuffer:
-      return "storage_buffer";
+    case Token::Type::kStorage:
+      return "storage";
     case Token::Type::kStruct:
       return "struct";
     case Token::Type::kSwitch:
diff --git a/src/reader/wgsl/token.h b/src/reader/wgsl/token.h
index 58d6b52..79e04ce 100644
--- a/src/reader/wgsl/token.h
+++ b/src/reader/wgsl/token.h
@@ -262,8 +262,8 @@
     kSampler,
     /// A 'sampler_comparison'
     kComparisonSampler,
-    /// A 'storage_buffer'
-    kStorageBuffer,
+    /// A 'storage'
+    kStorage,
     /// A 'struct'
     kStruct,
     /// A 'switch'
@@ -629,8 +629,8 @@
   bool IsReturn() const { return type_ == Type::kReturn; }
   /// @returns true if token is a 'sampler'
   bool IsSampler() const { return type_ == Type::kSampler; }
-  /// @returns true if token is a 'storage_buffer'
-  bool IsStorageBuffer() const { return type_ == Type::kStorageBuffer; }
+  /// @returns true if token is a 'storage'
+  bool IsStorage() const { return type_ == Type::kStorage; }
   /// @returns true if token is a 'struct'
   bool IsStruct() const { return type_ == Type::kStruct; }
   /// @returns true if token is a 'switch'
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 3ec0ce3..ae121f4 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -288,12 +288,12 @@
     // The decorated variable with struct type
     std::string name = GetVertexBufferName(i);
     auto* var = out->create<ast::Variable>(
-        Source{},                           // source
-        out->RegisterSymbol(name),          // symbol
-        ast::StorageClass::kStorageBuffer,  // storage_class
-        struct_type,                        // type
-        false,                              // is_const
-        nullptr,                            // constructor
+        Source{},                     // source
+        out->RegisterSymbol(name),    // symbol
+        ast::StorageClass::kStorage,  // storage_class
+        struct_type,                  // type
+        false,                        // is_const
+        nullptr,                      // constructor
         ast::VariableDecorationList{
             // decorations
             out->create<ast::BindingDecoration>(Source{}, i),
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index 4317785..edc8abc 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -134,7 +134,7 @@
 };
 
 [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 
 [[stage(vertex)]]
@@ -173,7 +173,7 @@
 };
 
 [[builtin(instance_index)]] var<in> _tint_pulling_instance_index : i32;
-[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 
 [[stage(vertex)]]
@@ -212,7 +212,7 @@
 };
 
 [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), group(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(5)]] var<storage> _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), 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(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
 var<private> var_a : f32;
 var<private> var_b : f32;
 [[builtin(vertex_index)]] var<in> custom_vertex_index : i32;
@@ -302,7 +302,7 @@
 };
 
 [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
-[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
 var<private> var_a : f32;
 var<private> var_b : array<f32, 4>;
 
@@ -348,9 +348,9 @@
 };
 
 [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
-[[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;
+[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
+[[binding(2), group(4)]] var<storage> _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/type_determiner_test.cc b/src/type_determiner_test.cc
index b05d2ee..42c9c7a 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -650,7 +650,7 @@
 TEST_F(TypeDeterminerTest, Function_RegisterInputOutputVariables) {
   auto* in_var = Var("in_var", ast::StorageClass::kInput, ty.f32);
   auto* out_var = Var("out_var", ast::StorageClass::kOutput, ty.f32);
-  auto* sb_var = Var("sb_var", ast::StorageClass::kStorageBuffer, ty.f32);
+  auto* sb_var = Var("sb_var", ast::StorageClass::kStorage, ty.f32);
   auto* wg_var = Var("wg_var", ast::StorageClass::kWorkgroup, ty.f32);
   auto* priv_var = Var("priv_var", ast::StorageClass::kPrivate, ty.f32);
 
@@ -687,7 +687,7 @@
 TEST_F(TypeDeterminerTest, Function_RegisterInputOutputVariables_SubFunction) {
   auto* in_var = Var("in_var", ast::StorageClass::kInput, ty.f32);
   auto* out_var = Var("out_var", ast::StorageClass::kOutput, ty.f32);
-  auto* sb_var = Var("sb_var", ast::StorageClass::kStorageBuffer, ty.f32);
+  auto* sb_var = Var("sb_var", ast::StorageClass::kStorage, ty.f32);
   auto* wg_var = Var("wg_var", ast::StorageClass::kWorkgroup, ty.f32);
   auto* priv_var = Var("priv_var", ast::StorageClass::kPrivate, ty.f32);
 
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 20fc255..e3e53ad 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -2067,7 +2067,7 @@
     if (!global_variables_.get(ident->symbol(), &var)) {
       return false;
     }
-    return var->storage_class() == ast::StorageClass::kStorageBuffer;
+    return var->storage_class() == ast::StorageClass::kStorage;
   } else if (auto* member = structure->As<ast::MemberAccessorExpression>()) {
     return is_storage_buffer_access(member);
   } else if (auto* array = structure->As<ast::ArrayAccessorExpression>()) {
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 557a35b..70ce1b3 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -382,12 +382,11 @@
   auto* s = ty.struct_("Data", str);
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
-  auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
-          ast::VariableDecorationList{
-              create<ast::BindingDecoration>(0),
-              create<ast::GroupDecoration>(1),
-          });
+  auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
+                        ast::VariableDecorationList{
+                            create<ast::BindingDecoration>(0),
+                            create<ast::GroupDecoration>(1),
+                        });
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -429,13 +428,12 @@
   auto* s = ty.struct_("Data", str);
   ast::type::AccessControl ac(ast::AccessControl::kReadOnly, s);
 
-  auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
-          ast::VariableDecorationList{
-              // decorations
-              create<ast::BindingDecoration>(0),
-              create<ast::GroupDecoration>(1),
-          });
+  auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
+                        ast::VariableDecorationList{
+                            // decorations
+                            create<ast::BindingDecoration>(0),
+                            create<ast::GroupDecoration>(1),
+                        });
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -477,12 +475,11 @@
   auto* s = ty.struct_("Data", str);
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
-  auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
-          ast::VariableDecorationList{
-              create<ast::BindingDecoration>(0),
-              create<ast::GroupDecoration>(1),
-          });
+  auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
+                        ast::VariableDecorationList{
+                            create<ast::BindingDecoration>(0),
+                            create<ast::GroupDecoration>(1),
+                        });
 
   td.RegisterVariableForTesting(coord_var);
   mod->AddGlobalVariable(coord_var);
@@ -777,12 +774,11 @@
 TEST_F(HlslGeneratorImplTest_Function,
        Emit_FunctionDecoration_Called_By_EntryPoint_With_StorageBuffer) {
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, ty.vec4<f32>());
-  auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
-          ast::VariableDecorationList{
-              create<ast::BindingDecoration>(0),
-              create<ast::GroupDecoration>(1),
-          });
+  auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
+                        ast::VariableDecorationList{
+                            create<ast::BindingDecoration>(0),
+                            create<ast::GroupDecoration>(1),
+                        });
 
   td.RegisterVariableForTesting(coord_var);
 
@@ -969,7 +965,7 @@
   // [[block]] struct Data {
   //   [[offset(0)]] d : f32;
   // };
-  // [[binding(0), group(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -988,7 +984,7 @@
   auto* s = ty.struct_("Data", str);
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
-  auto* data_var = Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+  auto* data_var = Var("data", ast::StorageClass::kStorage, &ac, nullptr,
                        ast::VariableDecorationList{
                            create<ast::BindingDecoration>(0),
                            create<ast::GroupDecoration>(0),
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index 4b13271..ee8345a 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -63,7 +63,7 @@
   //   [[offset(0)]] a : i32;
   //   [[offset(4)]] b : f32;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.b;
   //
   // -> asfloat(data.Load(4));
@@ -74,7 +74,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = MemberAccessor("data", "b");
 
   td.RegisterVariableForTesting(coord_var);
@@ -94,7 +94,7 @@
   //   [[offset(0)]] a : i32;
   //   [[offset(4)]] b : f32;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a;
   //
   // -> asint(data.Load(0));
@@ -104,7 +104,7 @@
                             Member("b", ty.f32, {MemberOffset(4)})},
       ast::StructDecorationList{});
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = MemberAccessor("data", "a");
 
   td.RegisterVariableForTesting(coord_var);
@@ -123,7 +123,7 @@
   //   [[offset(0)]] z : f32;
   //   [[offset(4)]] a : mat2x3<f32>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // mat2x3<f32> b;
   // data.a = b;
   //
@@ -138,7 +138,7 @@
 
   auto* s = ty.struct_("Data", str);
   auto* b_var = Var("b", ast::StorageClass::kPrivate, ty.mat2x3<f32>());
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   auto* lhs = MemberAccessor("data", "a");
   auto* rhs = Expr("b");
@@ -168,7 +168,7 @@
   //   [[offset(0)]] z : f32;
   //   [[offset(4)]] a : mat2x3<f32>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a = mat2x3<f32>();
   //
   // -> float3x2 _tint_tmp = float3x2(0.0f, 0.0f, 0.0f,
@@ -182,7 +182,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   auto* lhs = MemberAccessor("data", "a");
   auto* rhs = Construct(ty.mat2x3<f32>(), ast::ExpressionList{});
@@ -211,7 +211,7 @@
   //   [[offset(0)]] z : f32;
   //   [[offset(4)]] a : mat3x2<f32>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a;
   //
   // -> asfloat(uint2x3(data.Load2(4 + 0), data.Load2(4 + 8),
@@ -223,7 +223,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   auto* expr = MemberAccessor("data", "a");
 
@@ -250,7 +250,7 @@
   //   [[offset(0)]] c : f32;
   //   [[offset(4)]] b : Data;
   // };
-  // var<storage_buffer> data : Outer;
+  // var<storage> data : Outer;
   // data.b.a;
   //
   // -> asfloat(uint3x2(data.Load3(4 + 0), data.Load3(4 + 16)));
@@ -263,7 +263,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = MemberAccessor("data", "a");
 
   td.RegisterVariableForTesting(coord_var);
@@ -284,7 +284,7 @@
   // struct Data {
   //   [[offset(4)]] a : mat3x3<f32;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a;
   //
   // -> asfloat(uint3x3(data.Load3(0), data.Load3(16),
@@ -295,7 +295,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = MemberAccessor("data", "a");
 
   td.RegisterVariableForTesting(coord_var);
@@ -317,7 +317,7 @@
   //   [[offset(0)]] z : f32;
   //   [[offset(16)]] a : mat4x3<f32>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a[2][1];
   //
   // -> asfloat(data.Load((2 * 16) + (1 * 4) + 16)))
@@ -328,7 +328,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = IndexAccessor(
       IndexAccessor(MemberAccessor("data", "a"), Expr(2)), Expr(1));
 
@@ -348,7 +348,7 @@
   // struct Data {
   //   [[offset(0)]] a : [[stride(4)]] array<i32, 5>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a[2];
   //
   // -> asint(data.Load((2 * 4));
@@ -361,7 +361,7 @@
       ast::StructMemberList{Member("a", &ary, {MemberOffset(0)})},
       ast::StructDecorationList{});
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = IndexAccessor(MemberAccessor("data", "a"), Expr(2));
 
   td.RegisterVariableForTesting(coord_var);
@@ -380,7 +380,7 @@
   // struct Data {
   //   [[offset(0)]] a : [[stride(4)]] array<i32, 5>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a[(2 + 4) - 3];
   //
   // -> asint(data.Load((4 * ((2 + 4) - 3)));
@@ -393,7 +393,7 @@
       ast::StructMemberList{Member("a", &ary, {MemberOffset(0)})},
       ast::StructDecorationList{});
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
   auto* expr = IndexAccessor(MemberAccessor("data", "a"),
                              Sub(Add(Expr(2), Expr(4)), Expr(3)));
 
@@ -414,7 +414,7 @@
   //   [[offset(0)]] a : i32;
   //   [[offset(4)]] b : f32;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.b = 2.3f;
   //
   // -> data.Store(0, asuint(2.0f));
@@ -425,7 +425,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -448,7 +448,7 @@
   // struct Data {
   //   [[offset(0)]] a : [[stride(4)]] array<i32, 5>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a[2] = 2;
   //
   // -> data.Store((2 * 4), asuint(2.3f));
@@ -463,7 +463,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -487,7 +487,7 @@
   //   [[offset(0)]] a : i32;
   //   [[offset(4)]] b : f32;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.a = 2;
   //
   // -> data.Store(0, asuint(2));
@@ -498,7 +498,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -522,7 +522,7 @@
   //   [[offset(0)]] a : vec3<i32>;
   //   [[offset(16)]] b : vec3<f32>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.b;
   //
   // -> asfloat(data.Load(16));
@@ -533,7 +533,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -554,7 +554,7 @@
   //   [[offset(0)]] a : vec3<i32>;
   //   [[offset(16)]] b : vec3<f32>;
   // };
-  // var<storage_buffer> data : Data;
+  // var<storage> data : Data;
   // data.b = vec3<f32>(2.3f, 1.2f, 0.2f);
   //
   // -> data.Store(16, asuint(float3(2.3f, 1.2f, 0.2f)));
@@ -565,7 +565,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, s);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, s);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -595,7 +595,7 @@
   //   var c : [[stride(32)]] array<Data, 4>;
   // };
   //
-  // var<storage_buffer> data : Pre;
+  // var<storage> data : Pre;
   // data.c[2].b
   //
   // -> asfloat(data.Load3(16 + (2 * 32)))
@@ -618,7 +618,7 @@
       ast::StructDecorationList{});
 
   auto* pre_struct = ty.struct_("Pre", pre_str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, pre_struct);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, pre_struct);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -644,7 +644,7 @@
   //   var c : [[stride(32)]] array<Data, 4>;
   // };
   //
-  // var<storage_buffer> data : Pre;
+  // var<storage> data : Pre;
   // data.c[2].b.xy
   //
   // -> asfloat(data.Load3(16 + (2 * 32))).xy
@@ -665,7 +665,7 @@
       ast::StructDecorationList{});
 
   auto* pre_struct = ty.struct_("Pre", pre_str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, pre_struct);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, pre_struct);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -693,7 +693,7 @@
   //   var c : [[stride(32)]] array<Data, 4>;
   // };
   //
-  // var<storage_buffer> data : Pre;
+  // var<storage> data : Pre;
   // data.c[2].b.g
   //
   // -> asfloat(data.Load((4 * 1) + 16 + (2 * 32) + 0))
@@ -716,7 +716,7 @@
       ast::StructDecorationList{});
 
   auto* pre_struct = ty.struct_("Pre", pre_str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, pre_struct);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, pre_struct);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -743,7 +743,7 @@
   //   var c : [[stride(32)]] array<Data, 4>;
   // };
   //
-  // var<storage_buffer> data : Pre;
+  // var<storage> data : Pre;
   // data.c[2].b[1]
   //
   // -> asfloat(data.Load(4 + 16 + (2 * 32)))
@@ -766,7 +766,7 @@
       ast::StructDecorationList{});
 
   auto* pre_struct = ty.struct_("Pre", pre_str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, pre_struct);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, pre_struct);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -793,7 +793,7 @@
   //   var c : [[stride(32)]] array<Data, 4>;
   // };
   //
-  // var<storage_buffer> data : Pre;
+  // var<storage> data : Pre;
   // data.c[2].b = vec3<f32>(1.f, 2.f, 3.f);
   //
   // -> data.Store3(16 + (2 * 32), asuint(float3(1.0f, 2.0f, 3.0f)));
@@ -816,7 +816,7 @@
       ast::StructDecorationList{});
 
   auto* pre_struct = ty.struct_("Pre", pre_str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, pre_struct);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, pre_struct);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
@@ -847,7 +847,7 @@
   //   var c : [[stride(32)]] array<Data, 4>;
   // };
   //
-  // var<storage_buffer> data : Pre;
+  // var<storage> data : Pre;
   // data.c[2].b.y = 1.f;
   //
   // -> data.Store((4 * 1) + 16 + (2 * 32) + 0, asuint(1.0f));
@@ -870,7 +870,7 @@
       ast::StructDecorationList{});
 
   auto* pre_struct = ty.struct_("Pre", pre_str);
-  auto* coord_var = Var("data", ast::StorageClass::kStorageBuffer, pre_struct);
+  auto* coord_var = Var("data", ast::StorageClass::kStorage, pre_struct);
 
   td.RegisterVariableForTesting(coord_var);
   gen.register_global(coord_var);
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 0c3cd3b..53b80ec 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -334,7 +334,7 @@
   mod->AddConstructedType(s);
 
   auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+      Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
                                       create<ast::GroupDecoration>(1)});
 
@@ -386,7 +386,7 @@
   mod->AddConstructedType(s);
 
   auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+      Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
                                       create<ast::GroupDecoration>(1)});
 
@@ -691,7 +691,7 @@
   mod->AddConstructedType(s);
 
   auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+      Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
                                       create<ast::GroupDecoration>(1)});
 
@@ -758,7 +758,7 @@
   mod->AddConstructedType(s);
 
   auto* coord_var =
-      Var("coord", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+      Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
                                       create<ast::GroupDecoration>(1)});
 
@@ -914,7 +914,7 @@
   // [[block]] struct Data {
   //   [[offset(0)]] d : f32;
   // };
-  // [[binding(0), group(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -936,7 +936,7 @@
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* data_var =
-      Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+      Var("data", ast::StorageClass::kStorage, &ac, nullptr,
           ast::VariableDecorationList{create<ast::BindingDecoration>(0),
                                       create<ast::GroupDecoration>(0)});
 
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index cf8e5ac..26212e6 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -3114,7 +3114,7 @@
       return SpvStorageClassWorkgroup;
     case ast::StorageClass::kUniformConstant:
       return SpvStorageClassUniformConstant;
-    case ast::StorageClass::kStorageBuffer:
+    case ast::StorageClass::kStorage:
       return SpvStorageClassStorageBuffer;
     case ast::StorageClass::kImage:
       return SpvStorageClassImage;
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index 8c19bb3..3c4c00d 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), group(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -219,7 +219,7 @@
   auto* s = ty.struct_("Data", str);
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
-  auto* data_var = Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+  auto* data_var = Var("data", ast::StorageClass::kStorage, &ac, nullptr,
                        ast::VariableDecorationList{
                            create<ast::BindingDecoration>(0),
                            create<ast::GroupDecoration>(0),
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 55b49ec..0a1cc4d 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -386,7 +386,7 @@
                ast::StructDecorationList{}));
   ast::type::AccessControl ac{ast::AccessControl::kReadOnly, A};
 
-  auto* var = Var("b", ast::StorageClass::kStorageBuffer, &ac);
+  auto* var = Var("b", ast::StorageClass::kStorage, &ac);
   EXPECT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.annots()), R"(OpMemberDecorate %3 0 NonWritable
@@ -416,7 +416,7 @@
                                ast::StructDecorationList{}));
   auto* B = ty.alias("B", A);
   ast::type::AccessControl ac{ast::AccessControl::kReadOnly, B};
-  auto* var = Var("b", ast::StorageClass::kStorageBuffer, &ac);
+  auto* var = Var("b", ast::StorageClass::kStorage, &ac);
   EXPECT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.annots()), R"(OpMemberDecorate %3 0 NonWritable
@@ -444,7 +444,7 @@
                                ast::StructDecorationList{}));
   ast::type::AccessControl ac{ast::AccessControl::kReadOnly, A};
   auto* B = ty.alias("B", &ac);
-  auto* var = Var("b", ast::StorageClass::kStorageBuffer, B);
+  auto* var = Var("b", ast::StorageClass::kStorage, B);
   EXPECT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.annots()), R"(OpMemberDecorate %3 0 NonWritable
@@ -473,8 +473,8 @@
   ast::type::AccessControl read{ast::AccessControl::kReadOnly, A};
   ast::type::AccessControl rw{ast::AccessControl::kReadWrite, A};
 
-  auto* var_b = Var("b", ast::StorageClass::kStorageBuffer, &read);
-  auto* var_c = Var("c", ast::StorageClass::kStorageBuffer, &rw);
+  auto* var_b = Var("b", ast::StorageClass::kStorage, &read);
+  auto* var_c = Var("c", ast::StorageClass::kStorage, &rw);
   EXPECT_TRUE(b.GenerateGlobalVariable(var_b)) << b.error();
   EXPECT_TRUE(b.GenerateGlobalVariable(var_c)) << b.error();
 
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 9e29ab2..b1cf1c0 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -527,8 +527,7 @@
         PtrData{ast::StorageClass::kWorkgroup, SpvStorageClassWorkgroup},
         PtrData{ast::StorageClass::kUniformConstant,
                 SpvStorageClassUniformConstant},
-        PtrData{ast::StorageClass::kStorageBuffer,
-                SpvStorageClassStorageBuffer},
+        PtrData{ast::StorageClass::kStorage, SpvStorageClassStorageBuffer},
         PtrData{ast::StorageClass::kImage, SpvStorageClassImage},
         PtrData{ast::StorageClass::kPrivate, SpvStorageClassPrivate},
         PtrData{ast::StorageClass::kFunction, SpvStorageClassFunction}));
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index e3cf06e..c8f4b86 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), group(0)]] var<storage_buffer> data : Data;
+  // [[binding(0), group(0)]] var<storage> data : Data;
   //
   // [[stage(compute)]]
   // fn a() -> void {
@@ -174,7 +174,7 @@
   auto* s = ty.struct_("Data", str);
   ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
-  auto* data_var = Var("data", ast::StorageClass::kStorageBuffer, &ac, nullptr,
+  auto* data_var = Var("data", ast::StorageClass::kStorage, &ac, nullptr,
                        ast::VariableDecorationList{
                            // decorations
                            create<ast::BindingDecoration>(0),
@@ -233,7 +233,7 @@
   d : f32;
 };
 
-[[binding(0), group(0)]] var<storage_buffer> data : [[access(read_write)]]
+[[binding(0), group(0)]] var<storage> data : [[access(read_write)]]
 Data;
 
 [[stage(compute)]]
diff --git a/test/compute_boids.wgsl b/test/compute_boids.wgsl
index db76200..86617a6 100644
--- a/test/compute_boids.wgsl
+++ b/test/compute_boids.wgsl
@@ -57,8 +57,8 @@
 };
 
 [[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;
+[[binding(1), group(0)]] var<storage> particlesA : [[access(read_write)]] Particles;
+[[binding(2), group(0)]] var<storage> particlesB : [[access(read_write)]] Particles;
 
 [[builtin(global_invocation_id)]] var<in> gl_GlobalInvocationID : vec3<u32>;