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>;
 
