diff --git a/src/ast/access_control.cc b/src/ast/access_control.cc
index 635eeb6..ad86d2c 100644
--- a/src/ast/access_control.cc
+++ b/src/ast/access_control.cc
@@ -37,10 +37,10 @@
 std::string AccessControl::type_name() const {
   std::string name = "__access_control_";
   switch (access_) {
-    case ast::AccessControl::kReadOnly:
+    case ast::AccessControl::kRead:
       name += "read_only";
       break;
-    case ast::AccessControl::kWriteOnly:
+    case ast::AccessControl::kWrite:
       name += "write_only";
       break;
     case ast::AccessControl::kReadWrite:
@@ -54,10 +54,10 @@
   std::ostringstream out;
   out << "[[access(";
   switch (access_) {
-    case ast::AccessControl::kReadOnly:
+    case ast::AccessControl::kRead:
       out << "read";
       break;
-    case ast::AccessControl::kWriteOnly:
+    case ast::AccessControl::kWrite:
       out << "write";
       break;
     case ast::AccessControl::kReadWrite:
@@ -77,7 +77,7 @@
 
 std::ostream& operator<<(std::ostream& out, AccessControl::Access access) {
   switch (access) {
-    case ast::AccessControl::kReadOnly: {
+    case ast::AccessControl::kRead: {
       out << "read_only";
       break;
     }
@@ -85,7 +85,7 @@
       out << "read_write";
       break;
     }
-    case ast::AccessControl::kWriteOnly: {
+    case ast::AccessControl::kWrite: {
       out << "write_only";
       break;
     }
diff --git a/src/ast/access_control.h b/src/ast/access_control.h
index fa5f92a..705faca 100644
--- a/src/ast/access_control.h
+++ b/src/ast/access_control.h
@@ -29,9 +29,9 @@
   /// The access control settings
   enum Access {
     /// Read only
-    kReadOnly,
+    kRead,
     /// Write only
-    kWriteOnly,
+    kWrite,
     /// Read write
     kReadWrite
   };
@@ -50,9 +50,9 @@
   ~AccessControl() override;
 
   /// @returns true if the access control is read only
-  bool IsReadOnly() const { return access_ == Access::kReadOnly; }
+  bool IsReadOnly() const { return access_ == Access::kRead; }
   /// @returns true if the access control is write only
-  bool IsWriteOnly() const { return access_ == Access::kWriteOnly; }
+  bool IsWriteOnly() const { return access_ == Access::kWrite; }
   /// @returns true if the access control is read/write
   bool IsReadWrite() const { return access_ == Access::kReadWrite; }
 
diff --git a/src/ast/access_control_test.cc b/src/ast/access_control_test.cc
index 54ad8cc..d8fca38 100644
--- a/src/ast/access_control_test.cc
+++ b/src/ast/access_control_test.cc
@@ -43,7 +43,7 @@
 
 TEST_F(AstAccessControlTest, AccessRead) {
   auto* i32 = create<I32>();
-  auto* ac = create<AccessControl>(AccessControl::kReadOnly, i32);
+  auto* ac = create<AccessControl>(AccessControl::kRead, i32);
   EXPECT_TRUE(ac->IsReadOnly());
   EXPECT_FALSE(ac->IsWriteOnly());
   EXPECT_FALSE(ac->IsReadWrite());
@@ -53,7 +53,7 @@
 
 TEST_F(AstAccessControlTest, AccessWrite) {
   auto* i32 = create<I32>();
-  auto* ac = create<AccessControl>(AccessControl::kWriteOnly, i32);
+  auto* ac = create<AccessControl>(AccessControl::kWrite, i32);
   EXPECT_FALSE(ac->IsReadOnly());
   EXPECT_TRUE(ac->IsWriteOnly());
   EXPECT_FALSE(ac->IsReadWrite());
@@ -73,13 +73,13 @@
 
 TEST_F(AstAccessControlTest, FriendlyNameReadOnly) {
   auto* i32 = create<I32>();
-  auto* ac = create<AccessControl>(AccessControl::kReadOnly, i32);
+  auto* ac = create<AccessControl>(AccessControl::kRead, i32);
   EXPECT_EQ(ac->FriendlyName(Symbols()), "[[access(read)]] i32");
 }
 
 TEST_F(AstAccessControlTest, FriendlyNameWriteOnly) {
   auto* i32 = create<I32>();
-  auto* ac = create<AccessControl>(AccessControl::kWriteOnly, i32);
+  auto* ac = create<AccessControl>(AccessControl::kWrite, i32);
   EXPECT_EQ(ac->FriendlyName(Symbols()), "[[access(write)]] i32");
 }
 
diff --git a/src/ast/access_decoration_test.cc b/src/ast/access_decoration_test.cc
index f224563..047b170 100644
--- a/src/ast/access_decoration_test.cc
+++ b/src/ast/access_decoration_test.cc
@@ -23,12 +23,12 @@
 using AccessDecorationTest = TestHelper;
 
 TEST_F(AccessDecorationTest, Creation) {
-  auto* d = create<AccessDecoration>(ast::AccessControl::kWriteOnly);
-  EXPECT_EQ(ast::AccessControl::kWriteOnly, d->value());
+  auto* d = create<AccessDecoration>(ast::AccessControl::kWrite);
+  EXPECT_EQ(ast::AccessControl::kWrite, d->value());
 }
 
 TEST_F(AccessDecorationTest, ToStr) {
-  auto* d = create<AccessDecoration>(ast::AccessControl::kReadOnly);
+  auto* d = create<AccessDecoration>(ast::AccessControl::kRead);
   EXPECT_EQ(str(d), R"(AccessDecoration{read_only}
 )");
 }
diff --git a/src/ast/alias_test.cc b/src/ast/alias_test.cc
index b6dc0f3..1dc9710 100644
--- a/src/ast/alias_test.cc
+++ b/src/ast/alias_test.cc
@@ -78,7 +78,7 @@
 
 TEST_F(AstAliasTest, UnwrapAll_AccessControlPointer) {
   auto* u32 = create<U32>();
-  auto* a = create<AccessControl>(AccessControl::kReadOnly, u32);
+  auto* a = create<AccessControl>(AccessControl::kRead, u32);
   auto* pa = create<Pointer>(a, StorageClass::kUniform);
   EXPECT_EQ(pa->type(), a);
   EXPECT_EQ(pa->UnwrapAll(), u32);
@@ -87,7 +87,7 @@
 TEST_F(AstAliasTest, UnwrapAll_PointerAccessControl) {
   auto* u32 = create<U32>();
   auto* p = create<Pointer>(u32, StorageClass::kUniform);
-  auto* a = create<AccessControl>(AccessControl::kReadOnly, p);
+  auto* a = create<AccessControl>(AccessControl::kRead, p);
 
   EXPECT_EQ(a->type(), p);
   EXPECT_EQ(a->UnwrapAll(), u32);
diff --git a/src/ast/intrinsic_texture_helper_test.cc b/src/ast/intrinsic_texture_helper_test.cc
index 3cd12f6..82cf623 100644
--- a/src/ast/intrinsic_texture_helper_test.cc
+++ b/src/ast/intrinsic_texture_helper_test.cc
@@ -405,7 +405,7 @@
       {
           ValidTextureOverload::kDimensionsStorageRO1d,
           "textureDimensions(t : texture_storage_1d<rgba32float>) -> i32",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k1d,
           TextureDataType::kF32,
@@ -416,7 +416,7 @@
           ValidTextureOverload::kDimensionsStorageRO2d,
           "textureDimensions(t : texture_storage_2d<rgba32float>) -> "
           "vec2<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -427,7 +427,7 @@
           ValidTextureOverload::kDimensionsStorageRO2dArray,
           "textureDimensions(t : texture_storage_2d_array<rgba32float>) -> "
           "vec2<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2dArray,
           TextureDataType::kF32,
@@ -438,7 +438,7 @@
           ValidTextureOverload::kDimensionsStorageRO3d,
           "textureDimensions(t : texture_storage_3d<rgba32float>) -> "
           "vec3<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k3d,
           TextureDataType::kF32,
@@ -448,7 +448,7 @@
       {
           ValidTextureOverload::kDimensionsStorageWO1d,
           "textureDimensions(t : texture_storage_1d<rgba32float>) -> i32",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k1d,
           TextureDataType::kF32,
@@ -459,7 +459,7 @@
           ValidTextureOverload::kDimensionsStorageWO2d,
           "textureDimensions(t : texture_storage_2d<rgba32float>) -> "
           "vec2<i32>",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -470,7 +470,7 @@
           ValidTextureOverload::kDimensionsStorageWO2dArray,
           "textureDimensions(t : texture_storage_2d_array<rgba32float>) -> "
           "vec2<i32>",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2dArray,
           TextureDataType::kF32,
@@ -481,7 +481,7 @@
           ValidTextureOverload::kDimensionsStorageWO3d,
           "textureDimensions(t : texture_storage_3d<rgba32float>) -> "
           "vec3<i32>",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k3d,
           TextureDataType::kF32,
@@ -531,7 +531,7 @@
       {
           ValidTextureOverload::kNumLayersStorageWO2dArray,
           "textureNumLayers(t : texture_storage_2d_array<rgba32float>) -> i32",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2dArray,
           TextureDataType::kF32,
@@ -1887,7 +1887,7 @@
           ValidTextureOverload::kLoadStorageRO1dRgba32float,
           "textureLoad(t      : texture_storage_1d<rgba32float>,\n"
           "            coords : i32) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k1d,
           TextureDataType::kF32,
@@ -1901,7 +1901,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba8unorm,
           "textureLoad(t           : texture_storage_2d<rgba8unorm>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba8Unorm,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -1915,7 +1915,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba8snorm,
           "textureLoad(t           : texture_storage_2d<rgba8snorm>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba8Snorm,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -1929,7 +1929,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba8uint,
           "textureLoad(t           : texture_storage_2d<rgba8uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba8Uint,
           ast::TextureDimension::k2d,
           TextureDataType::kU32,
@@ -1943,7 +1943,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba8sint,
           "textureLoad(t           : texture_storage_2d<rgba8sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba8Sint,
           ast::TextureDimension::k2d,
           TextureDataType::kI32,
@@ -1957,7 +1957,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba16uint,
           "textureLoad(t           : texture_storage_2d<rgba16uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba16Uint,
           ast::TextureDimension::k2d,
           TextureDataType::kU32,
@@ -1971,7 +1971,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba16sint,
           "textureLoad(t           : texture_storage_2d<rgba16sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba16Sint,
           ast::TextureDimension::k2d,
           TextureDataType::kI32,
@@ -1985,7 +1985,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba16float,
           "textureLoad(t           : texture_storage_2d<rgba16float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba16Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -1999,7 +1999,7 @@
           ValidTextureOverload::kLoadStorageRO2dR32uint,
           "textureLoad(t           : texture_storage_2d<r32uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kR32Uint,
           ast::TextureDimension::k2d,
           TextureDataType::kU32,
@@ -2013,7 +2013,7 @@
           ValidTextureOverload::kLoadStorageRO2dR32sint,
           "textureLoad(t           : texture_storage_2d<r32sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kR32Sint,
           ast::TextureDimension::k2d,
           TextureDataType::kI32,
@@ -2027,7 +2027,7 @@
           ValidTextureOverload::kLoadStorageRO2dR32float,
           "textureLoad(t           : texture_storage_2d<r32float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kR32Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -2041,7 +2041,7 @@
           ValidTextureOverload::kLoadStorageRO2dRg32uint,
           "textureLoad(t           : texture_storage_2d<rg32uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRg32Uint,
           ast::TextureDimension::k2d,
           TextureDataType::kU32,
@@ -2055,7 +2055,7 @@
           ValidTextureOverload::kLoadStorageRO2dRg32sint,
           "textureLoad(t           : texture_storage_2d<rg32sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRg32Sint,
           ast::TextureDimension::k2d,
           TextureDataType::kI32,
@@ -2069,7 +2069,7 @@
           ValidTextureOverload::kLoadStorageRO2dRg32float,
           "textureLoad(t           : texture_storage_2d<rg32float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRg32Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -2083,7 +2083,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba32uint,
           "textureLoad(t           : texture_storage_2d<rgba32uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Uint,
           ast::TextureDimension::k2d,
           TextureDataType::kU32,
@@ -2097,7 +2097,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba32sint,
           "textureLoad(t           : texture_storage_2d<rgba32sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Sint,
           ast::TextureDimension::k2d,
           TextureDataType::kI32,
@@ -2111,7 +2111,7 @@
           ValidTextureOverload::kLoadStorageRO2dRgba32float,
           "textureLoad(t           : texture_storage_2d<rgba32float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -2127,7 +2127,7 @@
           "texture_storage_2d_array<rgba32float>,\n"
           "            coords      : vec2<i32>,\n"
           "            array_index : i32) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2dArray,
           TextureDataType::kF32,
@@ -2142,7 +2142,7 @@
           ValidTextureOverload::kLoadStorageRO3dRgba32float,
           "textureLoad(t      : texture_storage_3d<rgba32float>,\n"
           "            coords : vec3<i32>) -> vec4<f32>",
-          ast::AccessControl::kReadOnly,
+          ast::AccessControl::kRead,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k3d,
           TextureDataType::kF32,
@@ -2157,7 +2157,7 @@
           "textureStore(t      : texture_storage_1d<rgba32float>,\n"
           "             coords : i32,\n"
           "             value  : vec4<T>)",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k1d,
           TextureDataType::kF32,
@@ -2173,7 +2173,7 @@
           "textureStore(t      : texture_storage_2d<rgba32float>,\n"
           "             coords : vec2<i32>,\n"
           "             value  : vec4<T>)",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2d,
           TextureDataType::kF32,
@@ -2190,7 +2190,7 @@
           "             coords      : vec2<i32>,\n"
           "             array_index : i32,\n"
           "             value       : vec4<T>)",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k2dArray,
           TextureDataType::kF32,
@@ -2207,7 +2207,7 @@
           "textureStore(t      : texture_storage_3d<rgba32float>,\n"
           "             coords : vec3<i32>,\n"
           "             value  : vec4<T>)",
-          ast::AccessControl::kWriteOnly,
+          ast::AccessControl::kWrite,
           ast::ImageFormat::kRgba32Float,
           ast::TextureDimension::k3d,
           TextureDataType::kF32,
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 527e0d1..51030f9 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -641,7 +641,7 @@
     auto* var = rsv.first;
     auto binding_info = rsv.second;
 
-    if (read_only != (var->AccessControl() == ast::AccessControl::kReadOnly)) {
+    if (read_only != (var->AccessControl() == ast::AccessControl::kRead)) {
       continue;
     }
 
@@ -724,7 +724,7 @@
     auto* texture_type = var->Type()->UnwrapRef()->As<sem::StorageTexture>();
 
     if (read_only !=
-        (texture_type->access_control() == ast::AccessControl::kReadOnly)) {
+        (texture_type->access_control() == ast::AccessControl::kRead)) {
       continue;
     }
 
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index d8a3a35..dd3f534 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -256,7 +256,7 @@
       std::vector<ast::Type*> member_types) {
     MakeStructType(name, member_types, true);
     return [this, name] {
-      return ty.access(ast::AccessControl::kReadOnly, ty.type_name(name));
+      return ty.access(ast::AccessControl::kRead, ty.type_name(name));
     };
   }
 
@@ -575,8 +575,8 @@
   ast::Type* MakeStorageTextureTypes(ast::TextureDimension dim,
                                      ast::ImageFormat format,
                                      bool read_only) {
-    auto ac = read_only ? ast::AccessControl::kReadOnly
-                        : ast::AccessControl::kWriteOnly;
+    auto ac =
+        read_only ? ast::AccessControl::kRead : ast::AccessControl::kWrite;
     auto* tex = ty.storage_texture(dim, format);
 
     return ty.access(ac, tex);
diff --git a/src/intrinsic_table.cc b/src/intrinsic_table.cc
index bcbb5c3..048f12b 100644
--- a/src/intrinsic_table.cc
+++ b/src/intrinsic_table.cc
@@ -1126,22 +1126,21 @@
   auto* tex_storage_3d_FT =
       storage_texture(Dim::k3d, OpenNumber::A, OpenNumber::F, OpenType::T);
   auto* tex_storage_ro_1d_FT = storage_texture(
-      Dim::k1d, ast::AccessControl::kReadOnly, OpenNumber::F, OpenType::T);
+      Dim::k1d, ast::AccessControl::kRead, OpenNumber::F, OpenType::T);
   auto* tex_storage_ro_2d_FT = storage_texture(
-      Dim::k2d, ast::AccessControl::kReadOnly, OpenNumber::F, OpenType::T);
+      Dim::k2d, ast::AccessControl::kRead, OpenNumber::F, OpenType::T);
   auto* tex_storage_ro_2d_array_FT = storage_texture(
-      Dim::k2dArray, ast::AccessControl::kReadOnly, OpenNumber::F, OpenType::T);
+      Dim::k2dArray, ast::AccessControl::kRead, OpenNumber::F, OpenType::T);
   auto* tex_storage_ro_3d_FT = storage_texture(
-      Dim::k3d, ast::AccessControl::kReadOnly, OpenNumber::F, OpenType::T);
+      Dim::k3d, ast::AccessControl::kRead, OpenNumber::F, OpenType::T);
   auto* tex_storage_wo_1d_FT = storage_texture(
-      Dim::k1d, ast::AccessControl::kWriteOnly, OpenNumber::F, OpenType::T);
+      Dim::k1d, ast::AccessControl::kWrite, OpenNumber::F, OpenType::T);
   auto* tex_storage_wo_2d_FT = storage_texture(
-      Dim::k2d, ast::AccessControl::kWriteOnly, OpenNumber::F, OpenType::T);
-  auto* tex_storage_wo_2d_array_FT =
-      storage_texture(Dim::k2dArray, ast::AccessControl::kWriteOnly,
-                      OpenNumber::F, OpenType::T);
+      Dim::k2d, ast::AccessControl::kWrite, OpenNumber::F, OpenType::T);
+  auto* tex_storage_wo_2d_array_FT = storage_texture(
+      Dim::k2dArray, ast::AccessControl::kWrite, OpenNumber::F, OpenType::T);
   auto* tex_storage_wo_3d_FT = storage_texture(
-      Dim::k3d, ast::AccessControl::kWriteOnly, OpenNumber::F, OpenType::T);
+      Dim::k3d, ast::AccessControl::kWrite, OpenNumber::F, OpenType::T);
 
   auto* sampler = this->sampler(ast::SamplerKind::kSampler);
   auto* sampler_comparison =
diff --git a/src/intrinsic_table_test.cc b/src/intrinsic_table_test.cc
index 3b1c527..60d2776 100644
--- a/src/intrinsic_table_test.cc
+++ b/src/intrinsic_table_test.cc
@@ -342,9 +342,9 @@
   auto* vec4_f32 = create<sem::Vector>(f32, 4);
   auto* subtype =
       sem::StorageTexture::SubtypeFor(ast::ImageFormat::kR16Float, Types());
-  auto* tex = create<sem::StorageTexture>(
-      ast::TextureDimension::k2d, ast::ImageFormat::kR16Float,
-      ast::AccessControl::kReadOnly, subtype);
+  auto* tex = create<sem::StorageTexture>(ast::TextureDimension::k2d,
+                                          ast::ImageFormat::kR16Float,
+                                          ast::AccessControl::kRead, subtype);
 
   auto result = table->Lookup(*this, IntrinsicType::kTextureLoad,
                               {tex, vec2_i32}, Source{});
@@ -364,9 +364,9 @@
   auto* vec4_f32 = create<sem::Vector>(f32, 4);
   auto* subtype =
       sem::StorageTexture::SubtypeFor(ast::ImageFormat::kR16Float, Types());
-  auto* tex = create<sem::StorageTexture>(
-      ast::TextureDimension::k2d, ast::ImageFormat::kR16Float,
-      ast::AccessControl::kWriteOnly, subtype);
+  auto* tex = create<sem::StorageTexture>(ast::TextureDimension::k2d,
+                                          ast::ImageFormat::kR16Float,
+                                          ast::AccessControl::kWrite, subtype);
 
   auto result = table->Lookup(*this, IntrinsicType::kTextureStore,
                               {tex, vec2_i32, vec4_f32}, Source{});
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 986ca7a..a573634 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -1361,8 +1361,8 @@
     }
 
     // Apply the access(read) or access(read_write) modifier.
-    auto access = read_only ? ast::AccessControl::kReadOnly
-                            : ast::AccessControl::kReadWrite;
+    auto access =
+        read_only ? ast::AccessControl::kRead : ast::AccessControl::kReadWrite;
     storage_type = ty_.AccessControl(storage_type, access);
   }
 
@@ -2124,8 +2124,8 @@
       }
     } else {
       const auto access = usage.IsStorageReadTexture()
-                              ? ast::AccessControl::kReadOnly
-                              : ast::AccessControl::kWriteOnly;
+                              ? ast::AccessControl::kRead
+                              : ast::AccessControl::kWrite;
       const auto format = enum_converter_.ToImageFormat(image_type->format());
       if (format == ast::ImageFormat::kNone) {
         return nullptr;
diff --git a/src/reader/spirv/parser_type_test.cc b/src/reader/spirv/parser_type_test.cc
index 11458ee..fa89aa3 100644
--- a/src/reader/spirv/parser_type_test.cc
+++ b/src/reader/spirv/parser_type_test.cc
@@ -35,8 +35,8 @@
   EXPECT_EQ(ty.Vector(ty.I32(), 3), ty.Vector(ty.I32(), 3));
   EXPECT_EQ(ty.Matrix(ty.I32(), 3, 2), ty.Matrix(ty.I32(), 3, 2));
   EXPECT_EQ(ty.Array(ty.I32(), 3, 2), ty.Array(ty.I32(), 3, 2));
-  EXPECT_EQ(ty.AccessControl(ty.I32(), ast::AccessControl::kReadOnly),
-            ty.AccessControl(ty.I32(), ast::AccessControl::kReadOnly));
+  EXPECT_EQ(ty.AccessControl(ty.I32(), ast::AccessControl::kRead),
+            ty.AccessControl(ty.I32(), ast::AccessControl::kRead));
   EXPECT_EQ(ty.Alias(sym, ty.I32()), ty.Alias(sym, ty.I32()));
   EXPECT_EQ(ty.Struct(sym, {ty.I32()}), ty.Struct(sym, {ty.I32()}));
   EXPECT_EQ(ty.Sampler(ast::SamplerKind::kSampler),
@@ -70,10 +70,10 @@
   EXPECT_NE(ty.Array(ty.I32(), 3, 2), ty.Array(ty.U32(), 3, 2));
   EXPECT_NE(ty.Array(ty.I32(), 3, 2), ty.Array(ty.I32(), 2, 2));
   EXPECT_NE(ty.Array(ty.I32(), 3, 2), ty.Array(ty.I32(), 3, 3));
-  EXPECT_NE(ty.AccessControl(ty.I32(), ast::AccessControl::kReadOnly),
-            ty.AccessControl(ty.U32(), ast::AccessControl::kReadOnly));
-  EXPECT_NE(ty.AccessControl(ty.I32(), ast::AccessControl::kReadOnly),
-            ty.AccessControl(ty.I32(), ast::AccessControl::kWriteOnly));
+  EXPECT_NE(ty.AccessControl(ty.I32(), ast::AccessControl::kRead),
+            ty.AccessControl(ty.U32(), ast::AccessControl::kRead));
+  EXPECT_NE(ty.AccessControl(ty.I32(), ast::AccessControl::kRead),
+            ty.AccessControl(ty.I32(), ast::AccessControl::kWrite));
   EXPECT_NE(ty.Alias(sym_a, ty.I32()), ty.Alias(sym_b, ty.I32()));
   EXPECT_NE(ty.Struct(sym_a, {ty.I32()}), ty.Struct(sym_b, {ty.I32()}));
   EXPECT_NE(ty.Sampler(ast::SamplerKind::kSampler),
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index ca63df2..af0b930 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -909,9 +909,9 @@
     return Failure::kErrored;
 
   if (ident.value == kReadAccessControl)
-    return {ast::AccessControl::kReadOnly, ident.source};
+    return {ast::AccessControl::kRead, ident.source};
   if (ident.value == kWriteAccessControl)
-    return {ast::AccessControl::kWriteOnly, ident.source};
+    return {ast::AccessControl::kWrite, ident.source};
   if (ident.value == kReadWriteAccessControl)
     return {ast::AccessControl::kReadWrite, ident.source};
 
diff --git a/src/resolver/assignment_validation_test.cc b/src/resolver/assignment_validation_test.cc
index 3a4bc3f..62b7f6f 100644
--- a/src/resolver/assignment_validation_test.cc
+++ b/src/resolver/assignment_validation_test.cc
@@ -163,7 +163,7 @@
   auto make_type = [&] {
     auto* tex_type = ty.storage_texture(ast::TextureDimension::k1d,
                                         ast::ImageFormat::kRgba8Unorm);
-    return ty.access(ast::AccessControl::kReadOnly, tex_type);
+    return ty.access(ast::AccessControl::kRead, tex_type);
   };
 
   Global("a", make_type(), ast::StorageClass::kNone, nullptr,
diff --git a/src/resolver/decoration_validation_test.cc b/src/resolver/decoration_validation_test.cc
index 15f8f7e..4b6c77c 100644
--- a/src/resolver/decoration_validation_test.cc
+++ b/src/resolver/decoration_validation_test.cc
@@ -69,8 +69,8 @@
                                              DecorationKind kind) {
   switch (kind) {
     case DecorationKind::kAccess:
-      return {builder.create<ast::AccessDecoration>(
-          source, ast::AccessControl::kReadOnly)};
+      return {builder.create<ast::AccessDecoration>(source,
+                                                    ast::AccessControl::kRead)};
     case DecorationKind::kAlign:
       return {builder.create<ast::StructMemberAlignDecoration>(source, 4u)};
     case DecorationKind::kBinding:
@@ -523,7 +523,7 @@
 TEST_F(ResourceDecorationTest, StorageBufferMissingBinding) {
   auto* s = Structure("S", {Member("x", ty.i32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{12, 34}}, "G", ac, ast::StorageClass::kStorage);
 
   EXPECT_FALSE(r()->Resolve());
diff --git a/src/resolver/host_shareable_validation_test.cc b/src/resolver/host_shareable_validation_test.cc
index baa43a5..96fe861 100644
--- a/src/resolver/host_shareable_validation_test.cc
+++ b/src/resolver/host_shareable_validation_test.cc
@@ -28,7 +28,7 @@
 TEST_F(ResolverHostShareableValidationTest, BoolMember) {
   auto* s = Structure("S", {Member(Source{{12, 34}}, "x", ty.bool_())},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -47,7 +47,7 @@
 TEST_F(ResolverHostShareableValidationTest, BoolVectorMember) {
   auto* s = Structure("S", {Member(Source{{12, 34}}, "x", ty.vec3<bool>())},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -68,7 +68,7 @@
   AST().AddConstructedType(a1);
   auto* s = Structure("S", {Member(Source{{12, 34}}, "x", a1)},
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
   auto* a2 = ty.alias("a2", ac);
   AST().AddConstructedType(a2);
   Global(Source{{56, 78}}, "g", a2, ast::StorageClass::kStorage, nullptr,
@@ -93,7 +93,7 @@
 
   auto* s = Structure("S", {Member(Source{{7, 8}}, "m", i3)},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{9, 10}}, "g", a, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -135,7 +135,7 @@
 
   auto* s = Structure("S", {Member(Source{{7, 8}}, "m", i3)},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{9, 10}}, "g", a, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
diff --git a/src/resolver/intrinsic_test.cc b/src/resolver/intrinsic_test.cc
index 76452e8..68a1bc0 100644
--- a/src/resolver/intrinsic_test.cc
+++ b/src/resolver/intrinsic_test.cc
@@ -275,8 +275,7 @@
 
   auto* coords_type = GetCoordsType(dim, ty.i32());
   auto* texture_type = ty.storage_texture(dim, format);
-  auto* ro_texture_type =
-      ty.access(ast::AccessControl::kReadOnly, texture_type);
+  auto* ro_texture_type = ty.access(ast::AccessControl::kRead, texture_type);
 
   ast::ExpressionList call_params;
 
@@ -768,7 +767,7 @@
   auto* ary = ty.array<i32>();
   auto* str = Structure("S", {Member("x", ary)},
                         {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, str);
+  auto* ac = ty.access(ast::AccessControl::kRead, str);
   Global("a", ac, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
diff --git a/src/resolver/resolver_test.cc b/src/resolver/resolver_test.cc
index 7406204..e4c777a 100644
--- a/src/resolver/resolver_test.cc
+++ b/src/resolver/resolver_test.cc
@@ -784,7 +784,7 @@
 TEST_F(ResolverTest, Function_RegisterInputOutputVariables) {
   auto* s = Structure("S", {Member("m", ty.u32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
 
   auto* in_var = Global("in_var", ty.f32(), ast::StorageClass::kInput);
   auto* out_var = Global("out_var", ty.f32(), ast::StorageClass::kOutput);
@@ -823,7 +823,7 @@
 TEST_F(ResolverTest, Function_RegisterInputOutputVariables_SubFunction) {
   auto* s = Structure("S", {Member("m", ty.u32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
 
   auto* in_var = Global("in_var", ty.f32(), ast::StorageClass::kInput);
   auto* out_var = Global("out_var", ty.f32(), ast::StorageClass::kOutput);
@@ -1752,7 +1752,7 @@
 
 TEST_F(ResolverTest, StorageClass_SetForTexture) {
   auto* t = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, t);
+  auto* ac = ty.access(ast::AccessControl::kRead, t);
   auto* var = Global("var", ac, ast::StorageClass::kNone, nullptr,
                      {
                          create<ast::BindingDecoration>(0),
diff --git a/src/resolver/resolver_test_helper.h b/src/resolver/resolver_test_helper.h
index 4a10110..675fa33 100644
--- a/src/resolver/resolver_test_helper.h
+++ b/src/resolver/resolver_test_helper.h
@@ -229,7 +229,7 @@
 template <create_ast_type_func_ptr create_type>
 ast::Type* ast_access(const ProgramBuilder::TypesBuilder& ty) {
   auto* type = create_type(ty);
-  return ty.access(ast::AccessControl::kReadOnly, type);
+  return ty.access(ast::AccessControl::kRead, type);
 }
 
 inline sem::Type* sem_bool(const ProgramBuilder::TypesBuilder& ty) {
diff --git a/src/resolver/storage_class_validation_test.cc b/src/resolver/storage_class_validation_test.cc
index 15e3594..95df0a7 100644
--- a/src/resolver/storage_class_validation_test.cc
+++ b/src/resolver/storage_class_validation_test.cc
@@ -69,7 +69,7 @@
   // var<storage> g : [[access(read)]] array<S, 3>;
   auto* s = Structure("S", {Member("a", ty.f32())});
   auto* a = ty.array(s, 3);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, a);
+  auto* ac = ty.access(ast::AccessControl::kRead, a);
   Global(Source{{56, 78}}, "g", ac, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -121,7 +121,7 @@
   // struct S { x : i32 };
   // var<storage> g : [[access(read)]] S;
   auto* s = Structure(Source{{12, 34}}, "S", {Member("x", ty.i32())});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -141,7 +141,7 @@
   // var<storage> g : [[access(read)]] S;
   auto* s = Structure("S", {Member(Source{{12, 34}}, "x", ty.i32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   Global(Source{{56, 78}}, "g", a, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -160,7 +160,7 @@
                       {create<ast::StructBlockDecoration>()});
   auto* a1 = ty.alias("a1", s);
   AST().AddConstructedType(a1);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, a1);
+  auto* ac = ty.access(ast::AccessControl::kRead, a1);
   auto* a2 = ty.alias("a2", ac);
   AST().AddConstructedType(a2);
   Global(Source{{56, 78}}, "g", a2, ast::StorageClass::kStorage, nullptr,
@@ -210,7 +210,7 @@
   // var<uniform> g : [[access(read)]] array<S, 3>;
   auto* s = Structure("S", {Member("a", ty.f32())});
   auto* a = ty.array(s, 3);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, a);
+  auto* ac = ty.access(ast::AccessControl::kRead, a);
   Global(Source{{56, 78}}, "g", ac, ast::StorageClass::kUniform, nullptr,
          {
              create<ast::BindingDecoration>(0),
diff --git a/src/resolver/struct_storage_class_use_test.cc b/src/resolver/struct_storage_class_use_test.cc
index 674e84b..1f40bdf 100644
--- a/src/resolver/struct_storage_class_use_test.cc
+++ b/src/resolver/struct_storage_class_use_test.cc
@@ -172,7 +172,7 @@
 TEST_F(ResolverStorageClassUseTest, StructMultipleStorageClassUses) {
   auto* s = Structure("S", {Member("a", ty.f32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
   Global("x", s, ast::StorageClass::kUniform, nullptr,
          {
              create<ast::BindingDecoration>(0),
diff --git a/src/resolver/type_validation_test.cc b/src/resolver/type_validation_test.cc
index 29365ae..e45db09 100644
--- a/src/resolver/type_validation_test.cc
+++ b/src/resolver/type_validation_test.cc
@@ -519,7 +519,7 @@
   auto& params = GetParam();
 
   auto* st = ty.storage_texture(params.dim, ast::ImageFormat::kR32Uint);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, st);
+  auto* ac = ty.access(ast::AccessControl::kRead, st);
 
   Global(Source{{12, 34}}, "a", ac, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
@@ -595,7 +595,7 @@
   // var d : [[access(read)]] texture_storage_3d<*>;
 
   auto* st_a = ty.storage_texture(ast::TextureDimension::k1d, params.format);
-  auto* ac_a = ty.access(ast::AccessControl::kReadOnly, st_a);
+  auto* ac_a = ty.access(ast::AccessControl::kRead, st_a);
   Global(Source{{12, 34}}, "a", ac_a, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
              create<ast::BindingDecoration>(0),
@@ -603,7 +603,7 @@
          });
 
   auto* st_b = ty.storage_texture(ast::TextureDimension::k2d, params.format);
-  auto* ac_b = ty.access(ast::AccessControl::kReadOnly, st_b);
+  auto* ac_b = ty.access(ast::AccessControl::kRead, st_b);
   Global("b", ac_b, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
              create<ast::BindingDecoration>(0),
@@ -612,7 +612,7 @@
 
   auto* st_c =
       ty.storage_texture(ast::TextureDimension::k2dArray, params.format);
-  auto* ac_c = ty.access(ast::AccessControl::kReadOnly, st_c);
+  auto* ac_c = ty.access(ast::AccessControl::kRead, st_c);
   Global("c", ac_c, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
              create<ast::BindingDecoration>(0),
@@ -620,7 +620,7 @@
          });
 
   auto* st_d = ty.storage_texture(ast::TextureDimension::k3d, params.format);
-  auto* ac_d = ty.access(ast::AccessControl::kReadOnly, st_d);
+  auto* ac_d = ty.access(ast::AccessControl::kRead, st_d);
   Global("d", ac_d, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
              create<ast::BindingDecoration>(0),
@@ -687,7 +687,7 @@
 
   auto* st = ty.storage_texture(ast::TextureDimension::k1d,
                                 ast::ImageFormat::kR32Uint);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, st);
+  auto* ac = ty.access(ast::AccessControl::kRead, st);
 
   Global("a", ac, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
@@ -704,7 +704,7 @@
 
   auto* st = ty.storage_texture(ast::TextureDimension::k1d,
                                 ast::ImageFormat::kR32Uint);
-  auto* ac = ty.access(ast::AccessControl::kWriteOnly, st);
+  auto* ac = ty.access(ast::AccessControl::kWrite, st);
 
   Global("a", ac, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
diff --git a/src/transform/binding_remapper_test.cc b/src/transform/binding_remapper_test.cc
index 263d20b..2015a01 100644
--- a/src/transform/binding_remapper_test.cc
+++ b/src/transform/binding_remapper_test.cc
@@ -128,9 +128,9 @@
   data.Add<BindingRemapper::Remappings>(
       BindingRemapper::BindingPoints{},
       BindingRemapper::AccessControls{
-          {{2, 1}, ast::AccessControl::kWriteOnly},  // Modify access control
+          {{2, 1}, ast::AccessControl::kWrite},  // Modify access control
           // Keep [[group(3), binding(2)]] as is
-          {{4, 3}, ast::AccessControl::kReadOnly},  // Add access control
+          {{4, 3}, ast::AccessControl::kRead},  // Add access control
       });
   auto got = Run<BindingRemapper>(src, data);
 
@@ -188,9 +188,9 @@
   data.Add<BindingRemapper::Remappings>(
       BindingRemapper::BindingPoints{},
       BindingRemapper::AccessControls{
-          {{2, 1}, ast::AccessControl::kWriteOnly},  // Modify access control
+          {{2, 1}, ast::AccessControl::kWrite},  // Modify access control
           // Keep [[group(3), binding(2)]] as is
-          {{4, 3}, ast::AccessControl::kReadOnly},  // Add access control
+          {{4, 3}, ast::AccessControl::kRead},  // Add access control
       });
   auto got = Run<BindingRemapper>(src, data);
 
@@ -233,8 +233,8 @@
           {{3, 2}, {6, 7}},
       },
       BindingRemapper::AccessControls{
-          {{2, 1}, ast::AccessControl::kWriteOnly},
-          {{3, 2}, ast::AccessControl::kWriteOnly},
+          {{2, 1}, ast::AccessControl::kWrite},
+          {{3, 2}, ast::AccessControl::kWrite},
       });
   auto got = Run<BindingRemapper>(src, data);
 
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 73287b9..296e2d8 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -214,8 +214,7 @@
             ctx.dst->create<ast::StructBlockDecoration>(),
         });
     for (uint32_t i = 0; i < cfg.vertex_state.size(); ++i) {
-      auto* access =
-          ctx.dst->ty.access(ast::AccessControl::kReadOnly, struct_type);
+      auto* access = ctx.dst->ty.access(ast::AccessControl::kRead, struct_type);
       // The decorated variable with struct type
       ctx.dst->Global(
           GetVertexBufferName(i), access, ast::StorageClass::kStorage, nullptr,
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 8679601..b6aa276 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1753,8 +1753,7 @@
 
     out << " " << builder_.Symbols().NameFor(decl->symbol())
         << RegisterAndSpace(
-               var->AccessControl() == ast::AccessControl::kReadOnly ? 't'
-                                                                     : 'u',
+               var->AccessControl() == ast::AccessControl::kRead ? 't' : 'u',
                binding_point)
         << ";" << std::endl;
     emitted_storagebuffer = true;
@@ -1917,7 +1916,7 @@
       if (unwrapped_type->Is<sem::Texture>()) {
         register_space = "t";
         if (auto* storage_tex = unwrapped_type->As<sem::StorageTexture>()) {
-          if (storage_tex->access_control() != ast::AccessControl::kReadOnly) {
+          if (storage_tex->access_control() != ast::AccessControl::kRead) {
             register_space = "u";
           }
         }
@@ -2330,7 +2329,7 @@
                              ast::AccessControl::Access access_control,
                              const std::string& name) {
   if (storage_class == ast::StorageClass::kStorage) {
-    if (access_control != ast::AccessControl::kReadOnly) {
+    if (access_control != ast::AccessControl::kRead) {
       out << "RW";
     }
     out << "ByteAddressBuffer";
@@ -2396,7 +2395,7 @@
     auto* sampled = tex->As<sem::SampledTexture>();
 
     if (storage) {
-      if (access_control != ast::AccessControl::kReadOnly) {
+      if (access_control != ast::AccessControl::kRead) {
         out << "RW";
       }
     }
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 54865db..187bce1 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -472,7 +472,7 @@
                       },
                       {create<ast::StructBlockDecoration>()});
 
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("coord", ac, ast::StorageClass::kStorage, nullptr,
          {
@@ -518,7 +518,7 @@
                       },
                       {create<ast::StructBlockDecoration>()});
 
-  auto* ac = ty.access(ast::AccessControl::kWriteOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kWrite, s);
 
   Global("coord", ac, ast::StorageClass::kStorage, nullptr,
          {
diff --git a/src/writer/hlsl/generator_impl_sanitizer_test.cc b/src/writer/hlsl/generator_impl_sanitizer_test.cc
index 0c4bae7..8691319 100644
--- a/src/writer/hlsl/generator_impl_sanitizer_test.cc
+++ b/src/writer/hlsl/generator_impl_sanitizer_test.cc
@@ -33,7 +33,7 @@
                           {
                               create<ast::StructBlockDecoration>(),
                           });
-  auto* ac_ty = ty.access(ast::AccessControl::kReadOnly, sb_ty);
+  auto* ac_ty = ty.access(ast::AccessControl::kRead, sb_ty);
 
   Global("sb", ac_ty, ast::StorageClass::kStorage, nullptr,
          {
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 1346cc8..200cd76 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -553,9 +553,8 @@
   auto params = GetParam();
 
   auto* t = ty.storage_texture(params.dim, params.imgfmt);
-  auto* ac = ty.access(params.ro ? ast::AccessControl::kReadOnly
-                                 : ast::AccessControl::kWriteOnly,
-                       t);
+  auto* ac = ty.access(
+      params.ro ? ast::AccessControl::kRead : ast::AccessControl::kWrite, t);
 
   Global("tex", ac, ast::StorageClass::kNone, nullptr,
          ast::DecorationList{
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 132964e..40e1e16 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -1288,7 +1288,7 @@
     }
     first = false;
 
-    if (var->AccessControl() == ast::AccessControl::kReadOnly) {
+    if (var->AccessControl() == ast::AccessControl::kRead) {
       out_ << "const ";
     }
 
@@ -1506,7 +1506,7 @@
     auto* binding = data.second.binding;
     // auto* set = data.second.set;
 
-    if (var->AccessControl() == ast::AccessControl::kReadOnly) {
+    if (var->AccessControl() == ast::AccessControl::kRead) {
       out_ << "const ";
     }
 
@@ -1988,9 +1988,9 @@
       }
 
       std::string access_str;
-      if (storage->access_control() == ast::AccessControl::kReadOnly) {
+      if (storage->access_control() == ast::AccessControl::kRead) {
         out_ << ", access::read";
-      } else if (storage->access_control() == ast::AccessControl::kWriteOnly) {
+      } else if (storage->access_control() == ast::AccessControl::kWrite) {
         out_ << ", access::write";
       } else {
         diagnostics_.add_error("Invalid access control for storage texture");
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 8ec73fb..6a17d3a 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -351,7 +351,7 @@
                       },
                       {create<ast::StructBlockDecoration>()});
 
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("coord", ac, ast::StorageClass::kStorage, nullptr,
          {create<ast::BindingDecoration>(0), create<ast::GroupDecoration>(1)});
@@ -663,7 +663,7 @@
                       },
                       {create<ast::StructBlockDecoration>()});
 
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("coord", ac, ast::StorageClass::kStorage, nullptr,
          {create<ast::BindingDecoration>(0), create<ast::GroupDecoration>(1)});
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index 9c682a6..2a0079f 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -232,7 +232,7 @@
                 },
                 {create<ast::StructBlockDecoration>()});
 
-  Global("G", ty.access(ast::AccessControl::kReadOnly, s),
+  Global("G", ty.access(ast::AccessControl::kRead, s),
          ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -342,7 +342,7 @@
                       },
                       {create<ast::StructBlockDecoration>()});
 
-  Global("G", ty.access(ast::AccessControl::kReadOnly, s),
+  Global("G", ty.access(ast::AccessControl::kRead, s),
          ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -437,7 +437,7 @@
                 },
                 ast::DecorationList{create<ast::StructBlockDecoration>()});
 
-  Global("G", ty.access(ast::AccessControl::kReadOnly, s),
+  Global("G", ty.access(ast::AccessControl::kRead, s),
          ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -544,7 +544,7 @@
       },
       {create<ast::StructBlockDecoration>()});
 
-  Global("G", ty.access(ast::AccessControl::kReadOnly, s),
+  Global("G", ty.access(ast::AccessControl::kRead, s),
          ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -610,7 +610,7 @@
                       },
                       {create<ast::StructBlockDecoration>()});
 
-  Global("G", ty.access(ast::AccessControl::kReadOnly, s),
+  Global("G", ty.access(ast::AccessControl::kRead, s),
          ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -765,9 +765,8 @@
   auto params = GetParam();
 
   auto* s = ty.storage_texture(params.dim, ast::ImageFormat::kR32Float);
-  auto* ac = ty.access(params.ro ? ast::AccessControl::kReadOnly
-                                 : ast::AccessControl::kWriteOnly,
-                       s);
+  auto* ac = ty.access(
+      params.ro ? ast::AccessControl::kRead : ast::AccessControl::kWrite, s);
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
              create<ast::BindingDecoration>(0),
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 79e551c..7f51152 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -788,12 +788,12 @@
     if (type->Is<sem::StorageTexture>() || type->Is<sem::Struct>()) {
       // type is a sem::Struct or a sem::StorageTexture
       switch (sem->AccessControl()) {
-        case ast::AccessControl::kWriteOnly:
+        case ast::AccessControl::kWrite:
           push_annot(
               spv::Op::OpDecorate,
               {Operand::Int(var_id), Operand::Int(SpvDecorationNonReadable)});
           break;
-        case ast::AccessControl::kReadOnly:
+        case ast::AccessControl::kRead:
           push_annot(
               spv::Op::OpDecorate,
               {Operand::Int(var_id), Operand::Int(SpvDecorationNonWritable)});
@@ -3175,12 +3175,12 @@
         type_name_to_id_[builder_
                              .create<sem::StorageTexture>(
                                  st->dim(), st->image_format(),
-                                 ast::AccessControl::kReadOnly, st->type())
+                                 ast::AccessControl::kRead, st->type())
                              ->type_name()] = id;
         type_name_to_id_[builder_
                              .create<sem::StorageTexture>(
                                  st->dim(), st->image_format(),
-                                 ast::AccessControl::kWriteOnly, st->type())
+                                 ast::AccessControl::kWrite, st->type())
                              ->type_name()] = id;
         type_name_to_id_[builder_
                              .create<sem::StorageTexture>(
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 38a5cc0..0ec6189 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -402,7 +402,7 @@
                           Member("b", ty.i32()),
                       },
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, A);
+  auto* ac = ty.access(ast::AccessControl::kRead, A);
 
   auto* var = Global("b", ac, ast::StorageClass::kStorage, nullptr,
                      {
@@ -444,7 +444,7 @@
                       {create<ast::StructBlockDecoration>()});
   auto* B = ty.alias("B", A);
   AST().AddConstructedType(B);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, B);
+  auto* ac = ty.access(ast::AccessControl::kRead, B);
   auto* var = Global("b", ac, ast::StorageClass::kStorage, nullptr,
                      {
                          create<ast::BindingDecoration>(0),
@@ -481,7 +481,7 @@
 
   auto* A = Structure("A", {Member("a", ty.i32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, A);
+  auto* ac = ty.access(ast::AccessControl::kRead, A);
   auto* B = ty.alias("B", ac);
   AST().AddConstructedType(B);
   auto* var = Global("b", B, ast::StorageClass::kStorage, nullptr,
@@ -520,7 +520,7 @@
 
   auto* A = Structure("A", {Member("a", ty.i32())},
                       {create<ast::StructBlockDecoration>()});
-  auto* read = ty.access(ast::AccessControl::kReadOnly, A);
+  auto* read = ty.access(ast::AccessControl::kRead, A);
   auto* rw = ty.access(ast::AccessControl::kReadWrite, A);
 
   auto* var_b = Global("b", read, ast::StorageClass::kStorage, nullptr,
@@ -567,7 +567,7 @@
   auto* type = ty.storage_texture(ast::TextureDimension::k2d,
                                   ast::ImageFormat::kR32Uint);
 
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, type);
+  auto* ac = ty.access(ast::AccessControl::kRead, type);
 
   auto* var_a = Global("a", ac, ast::StorageClass::kNone, nullptr,
                        {
@@ -596,7 +596,7 @@
   auto* type = ty.storage_texture(ast::TextureDimension::k2d,
                                   ast::ImageFormat::kR32Uint);
 
-  auto* ac = ty.access(ast::AccessControl::kWriteOnly, type);
+  auto* ac = ty.access(ast::AccessControl::kWrite, type);
 
   auto* var_a = Global("a", ac, ast::StorageClass::kNone, nullptr,
                        {
@@ -625,7 +625,7 @@
   // var<uniform_constant> a : [[access(read)]] texture_storage_2d<r32uint>;
   // var<uniform_constant> b : [[access(write)]] texture_storage_2d<r32uint>;
 
-  auto* type_a = ty.access(ast::AccessControl::kReadOnly,
+  auto* type_a = ty.access(ast::AccessControl::kRead,
                            ty.storage_texture(ast::TextureDimension::k2d,
                                               ast::ImageFormat::kR32Uint));
   auto* var_a = Global("a", type_a, ast::StorageClass::kNone, nullptr,
@@ -634,7 +634,7 @@
                            create<ast::GroupDecoration>(0),
                        });
 
-  auto* type_b = ty.access(ast::AccessControl::kWriteOnly,
+  auto* type_b = ty.access(ast::AccessControl::kWrite,
                            ty.storage_texture(ast::TextureDimension::k2d,
                                               ast::ImageFormat::kR32Uint));
   auto* var_b = Global("b", type_b, ast::StorageClass::kNone, nullptr,
diff --git a/src/writer/spirv/builder_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc
index 8599f1b..002ee07 100644
--- a/src/writer/spirv/builder_intrinsic_test.cc
+++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -1445,7 +1445,7 @@
 TEST_F(IntrinsicBuilderTest, Call_ArrayLength) {
   auto* s = Structure("my_struct", {Member(0, "a", ty.array<f32>(4))},
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
   Global("b", ac, ast::StorageClass::kStorage, nullptr,
          ast::DecorationList{
              create<ast::BindingDecoration>(1),
@@ -1495,7 +1495,7 @@
                           Member(4, "a", ty.array<f32>(4)),
                       },
                       {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
   Global("b", ac, ast::StorageClass::kStorage, nullptr,
          ast::DecorationList{
              create<ast::BindingDecoration>(1),
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index fec6b39..d5feda5 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -30,7 +30,7 @@
   auto* ary = ty.array(ty.i32(), 0);
   auto* str = Structure("S", {Member("x", ary)},
                         {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, str);
+  auto* ac = ty.access(ast::AccessControl::kRead, str);
   Global("a", ac, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -52,7 +52,7 @@
   auto* ary = ty.array(ty.i32(), 0);
   auto* str = Structure("S", {Member("x", ary)},
                         {create<ast::StructBlockDecoration>()});
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, str);
+  auto* ac = ty.access(ast::AccessControl::kRead, str);
   Global("a", ac, ast::StorageClass::kStorage, nullptr,
          {
              create<ast::BindingDecoration>(0),
@@ -832,7 +832,7 @@
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d) {
   auto* s = ty.storage_texture(ast::TextureDimension::k1d,
                                ast::ImageFormat::kR32Float);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
@@ -852,7 +852,7 @@
 TEST_F(BuilderTest_Type, StorageTexture_Generate_2d) {
   auto* s = ty.storage_texture(ast::TextureDimension::k2d,
                                ast::ImageFormat::kR32Float);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
@@ -872,7 +872,7 @@
 TEST_F(BuilderTest_Type, StorageTexture_Generate_2dArray) {
   auto* s = ty.storage_texture(ast::TextureDimension::k2dArray,
                                ast::ImageFormat::kR32Float);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
@@ -892,7 +892,7 @@
 TEST_F(BuilderTest_Type, StorageTexture_Generate_3d) {
   auto* s = ty.storage_texture(ast::TextureDimension::k3d,
                                ast::ImageFormat::kR32Float);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
@@ -913,7 +913,7 @@
        StorageTexture_Generate_SampledTypeFloat_Format_r32float) {
   auto* s = ty.storage_texture(ast::TextureDimension::k2d,
                                ast::ImageFormat::kR32Float);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
@@ -934,7 +934,7 @@
        StorageTexture_Generate_SampledTypeSint_Format_r32sint) {
   auto* s = ty.storage_texture(ast::TextureDimension::k2d,
                                ast::ImageFormat::kR32Sint);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
@@ -955,7 +955,7 @@
        StorageTexture_Generate_SampledTypeUint_Format_r32uint) {
   auto* s = ty.storage_texture(ast::TextureDimension::k2d,
                                ast::ImageFormat::kR32Uint);
-  auto* ac = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* ac = ty.access(ast::AccessControl::kRead, s);
 
   Global("test_var", ac, ast::StorageClass::kNone, nullptr,
          {
diff --git a/src/writer/wgsl/generator_impl_global_decl_test.cc b/src/writer/wgsl/generator_impl_global_decl_test.cc
index 76584d0..83a6a83 100644
--- a/src/writer/wgsl/generator_impl_global_decl_test.cc
+++ b/src/writer/wgsl/generator_impl_global_decl_test.cc
@@ -114,7 +114,7 @@
 
 TEST_F(WgslGeneratorImplTest, Emit_Global_Texture) {
   auto* st = ty.sampled_texture(ast::TextureDimension::k1d, ty.f32());
-  Global("t", ty.access(ast::AccessControl::kReadOnly, st),
+  Global("t", ty.access(ast::AccessControl::kRead, st),
          ast::StorageClass::kNone, nullptr,
          {create<ast::GroupDecoration>(0), create<ast::BindingDecoration>(0)});
 
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index b15559d..d217bfb 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -49,7 +49,7 @@
   auto* s = Structure("S", {Member("a", ty.i32())},
                       {create<ast::StructBlockDecoration>()});
 
-  auto* a = ty.access(ast::AccessControl::kReadOnly, s);
+  auto* a = ty.access(ast::AccessControl::kRead, s);
   AST().AddConstructedType(ty.alias("make_type_reachable", a));
 
   GeneratorImpl& gen = Build();
@@ -441,35 +441,35 @@
     testing::Values(
         StorageTextureData{ast::ImageFormat::kR8Unorm,
                            ast::TextureDimension::k1d,
-                           ast::AccessControl::kReadOnly,
+                           ast::AccessControl::kRead,
                            "[[access(read)]] texture_storage_1d<r8unorm>"},
         StorageTextureData{ast::ImageFormat::kR8Unorm,
                            ast::TextureDimension::k2d,
-                           ast::AccessControl::kReadOnly,
+                           ast::AccessControl::kRead,
                            "[[access(read)]] texture_storage_2d<r8unorm>"},
         StorageTextureData{
             ast::ImageFormat::kR8Unorm, ast::TextureDimension::k2dArray,
-            ast::AccessControl::kReadOnly,
+            ast::AccessControl::kRead,
             "[[access(read)]] texture_storage_2d_array<r8unorm>"},
         StorageTextureData{ast::ImageFormat::kR8Unorm,
                            ast::TextureDimension::k3d,
-                           ast::AccessControl::kReadOnly,
+                           ast::AccessControl::kRead,
                            "[[access(read)]] texture_storage_3d<r8unorm>"},
         StorageTextureData{ast::ImageFormat::kR8Unorm,
                            ast::TextureDimension::k1d,
-                           ast::AccessControl::kWriteOnly,
+                           ast::AccessControl::kWrite,
                            "[[access(write)]] texture_storage_1d<r8unorm>"},
         StorageTextureData{ast::ImageFormat::kR8Unorm,
                            ast::TextureDimension::k2d,
-                           ast::AccessControl::kWriteOnly,
+                           ast::AccessControl::kWrite,
                            "[[access(write)]] texture_storage_2d<r8unorm>"},
         StorageTextureData{
             ast::ImageFormat::kR8Unorm, ast::TextureDimension::k2dArray,
-            ast::AccessControl::kWriteOnly,
+            ast::AccessControl::kWrite,
             "[[access(write)]] texture_storage_2d_array<r8unorm>"},
         StorageTextureData{ast::ImageFormat::kR8Unorm,
                            ast::TextureDimension::k3d,
-                           ast::AccessControl::kWriteOnly,
+                           ast::AccessControl::kWrite,
                            "[[access(write)]] texture_storage_3d<r8unorm>"}));
 
 struct ImageFormatData {
