diff --git a/BUILD.gn b/BUILD.gn
index d93cb69..112e76e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -817,6 +817,7 @@
     "src/ast/type/sampler_type_test.cc",
     "src/ast/type/storage_texture_type_test.cc",
     "src/ast/type/struct_type_test.cc",
+    "src/ast/type/texture_type_test.cc",
     "src/ast/type/u32_type_test.cc",
     "src/ast/type/vector_type_test.cc",
     "src/ast/type_constructor_expression_test.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d23d6bf..8cc4777 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -446,6 +446,7 @@
     ast/type/sampler_type_test.cc
     ast/type/storage_texture_type_test.cc
     ast/type/struct_type_test.cc
+    ast/type/texture_type_test.cc
     ast/type/u32_type_test.cc
     ast/type/vector_type_test.cc
     ast/traits_test.cc
diff --git a/src/ast/type/texture_type.cc b/src/ast/type/texture_type.cc
index 2914fb6..58a0d47 100644
--- a/src/ast/type/texture_type.cc
+++ b/src/ast/type/texture_type.cc
@@ -72,6 +72,24 @@
   return false;
 }
 
+int NumCoordinateAxes(TextureDimension dim) {
+  switch (dim) {
+    case TextureDimension::kNone:
+      return 0;
+    case TextureDimension::k1d:
+    case TextureDimension::k1dArray:
+      return 1;
+    case TextureDimension::k2d:
+    case TextureDimension::k2dArray:
+      return 2;
+    case TextureDimension::k3d:
+    case TextureDimension::kCube:
+    case TextureDimension::kCubeArray:
+      return 3;
+  }
+  return 0;
+}
+
 Texture::Texture(TextureDimension dim) : dim_(dim) {}
 
 Texture::Texture(Texture&&) = default;
diff --git a/src/ast/type/texture_type.h b/src/ast/type/texture_type.h
index d44f5e2..495afd9 100644
--- a/src/ast/type/texture_type.h
+++ b/src/ast/type/texture_type.h
@@ -46,6 +46,15 @@
 /// @return true if the given TextureDimension is an array texture
 bool IsTextureArray(TextureDimension dim);
 
+/// Returns the number of axes in the coordinate for a dimensionality.
+///  None -> 0
+///  1D, 1DArray -> 1
+///  2D, 2DArray -> 2
+///  3D, Cube, CubeArray -> 3
+/// @param dim the TextureDimension to query
+/// @return number of dimensions in a coordinate for the dimensionality
+int NumCoordinateAxes(TextureDimension dim);
+
 /// A texture type.
 class Texture : public Castable<Texture, Type> {
  public:
diff --git a/src/ast/type/texture_type_test.cc b/src/ast/type/texture_type_test.cc
new file mode 100644
index 0000000..3ed1921
--- /dev/null
+++ b/src/ast/type/texture_type_test.cc
@@ -0,0 +1,51 @@
+// Copyright 2021 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/ast/type/texture_type.h"
+
+#include "src/ast/test_helper.h"
+
+namespace tint {
+namespace ast {
+namespace type {
+namespace {
+
+using TextureTypeTest = TestHelper;
+
+TEST_F(TextureTypeTest, IsTextureArray) {
+  EXPECT_EQ(false, IsTextureArray(TextureDimension::kNone));
+  EXPECT_EQ(false, IsTextureArray(TextureDimension::k1d));
+  EXPECT_EQ(true, IsTextureArray(TextureDimension::k1dArray));
+  EXPECT_EQ(false, IsTextureArray(TextureDimension::k2d));
+  EXPECT_EQ(true, IsTextureArray(TextureDimension::k2dArray));
+  EXPECT_EQ(false, IsTextureArray(TextureDimension::k3d));
+  EXPECT_EQ(false, IsTextureArray(TextureDimension::kCube));
+  EXPECT_EQ(true, IsTextureArray(TextureDimension::kCubeArray));
+}
+
+TEST_F(TextureTypeTest, NumCoordinateAxes) {
+  EXPECT_EQ(0, NumCoordinateAxes(TextureDimension::kNone));
+  EXPECT_EQ(1, NumCoordinateAxes(TextureDimension::k1d));
+  EXPECT_EQ(1, NumCoordinateAxes(TextureDimension::k1dArray));
+  EXPECT_EQ(2, NumCoordinateAxes(TextureDimension::k2d));
+  EXPECT_EQ(2, NumCoordinateAxes(TextureDimension::k2dArray));
+  EXPECT_EQ(3, NumCoordinateAxes(TextureDimension::k3d));
+  EXPECT_EQ(3, NumCoordinateAxes(TextureDimension::kCube));
+  EXPECT_EQ(3, NumCoordinateAxes(TextureDimension::kCubeArray));
+}
+
+}  // namespace
+}  // namespace type
+}  // namespace ast
+}  // namespace tint
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index abd6e25..af6e3b5 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -4340,41 +4340,12 @@
   ast::type::TextureDimension dim =
       unwrapped_type->As<ast::type::Texture>()->dim();
   // Number of regular coordinates.
-  uint32_t num_axes = 0;
-  bool is_arrayed = false;
-  switch (dim) {
-    case ast::type::TextureDimension::k1d:
-      num_axes = 1;
-      break;
-    case ast::type::TextureDimension::k1dArray:
-      num_axes = 1;
-      is_arrayed = true;
-      break;
-    case ast::type::TextureDimension::k2d:
-      num_axes = 2;
-      break;
-    case ast::type::TextureDimension::k2dArray:
-      num_axes = 2;
-      is_arrayed = true;
-      break;
-    case ast::type::TextureDimension::k3d:
-      num_axes = 3;
-      break;
-    case ast::type::TextureDimension::kCube:
-      // For cubes, 3 coordinates form a direction vector.
-      num_axes = 3;
-      break;
-    case ast::type::TextureDimension::kCubeArray:
-      // For cubes, 3 coordinates form a direction vector.
-      num_axes = 3;
-      is_arrayed = true;
-      break;
-    default:
-      Fail() << "unsupported image dimensionality for " << type->type_name()
-             << " prompted by " << inst.PrettyPrint();
-      return {};
+  uint32_t num_axes = ast::type::NumCoordinateAxes(dim);
+  bool is_arrayed = ast::type::IsTextureArray(dim);
+  if ((num_axes == 0) || (num_axes > 3)) {
+    Fail() << "unsupported image dimensionality for " << type->type_name()
+           << " prompted by " << inst.PrettyPrint();
   }
-  assert(num_axes <= 3);
   const auto num_coords_required = num_axes + (is_arrayed ? 1 : 0);
   uint32_t num_coords_supplied = 0;
   auto* component_type = raw_coords.type;
