diff --git a/src/common/BUILD.gn b/src/common/BUILD.gn
index d7daeaa..372ee1b 100644
--- a/src/common/BUILD.gn
+++ b/src/common/BUILD.gn
@@ -202,8 +202,6 @@
       "TypeTraits.h",
       "TypedInteger.h",
       "UnderlyingType.h",
-      "VertexFormatUtils.cpp",
-      "VertexFormatUtils.h",
       "ityp_array.h",
       "ityp_bitset.h",
       "ityp_span.h",
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index c73410e..4bdeec4 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -54,8 +54,6 @@
     "TypeTraits.h"
     "TypedInteger.h"
     "UnderlyingType.h"
-    "VertexFormatUtils.cpp"
-    "VertexFormatUtils.h"
     "ityp_array.h"
     "ityp_bitset.h"
     "ityp_span.h"
diff --git a/src/common/VertexFormatUtils.cpp b/src/common/VertexFormatUtils.cpp
deleted file mode 100644
index 082a6d4..0000000
--- a/src/common/VertexFormatUtils.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2021 The Dawn 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 "VertexFormatUtils.h"
-
-#include "Assert.h"
-
-namespace dawn {
-
-    uint32_t VertexFormatNumComponents(wgpu::VertexFormat format) {
-        switch (format) {
-            case wgpu::VertexFormat::Uint8x4:
-            case wgpu::VertexFormat::Sint8x4:
-            case wgpu::VertexFormat::Unorm8x4:
-            case wgpu::VertexFormat::Snorm8x4:
-            case wgpu::VertexFormat::Uint16x4:
-            case wgpu::VertexFormat::Sint16x4:
-            case wgpu::VertexFormat::Unorm16x4:
-            case wgpu::VertexFormat::Snorm16x4:
-            case wgpu::VertexFormat::Float16x4:
-            case wgpu::VertexFormat::Float32x4:
-            case wgpu::VertexFormat::Uint32x4:
-            case wgpu::VertexFormat::Sint32x4:
-                return 4;
-            case wgpu::VertexFormat::Float32x3:
-            case wgpu::VertexFormat::Uint32x3:
-            case wgpu::VertexFormat::Sint32x3:
-                return 3;
-            case wgpu::VertexFormat::Uint8x2:
-            case wgpu::VertexFormat::Sint8x2:
-            case wgpu::VertexFormat::Unorm8x2:
-            case wgpu::VertexFormat::Snorm8x2:
-            case wgpu::VertexFormat::Uint16x2:
-            case wgpu::VertexFormat::Sint16x2:
-            case wgpu::VertexFormat::Unorm16x2:
-            case wgpu::VertexFormat::Snorm16x2:
-            case wgpu::VertexFormat::Float16x2:
-            case wgpu::VertexFormat::Float32x2:
-            case wgpu::VertexFormat::Uint32x2:
-            case wgpu::VertexFormat::Sint32x2:
-                return 2;
-            case wgpu::VertexFormat::Float32:
-            case wgpu::VertexFormat::Uint32:
-            case wgpu::VertexFormat::Sint32:
-                return 1;
-
-            case wgpu::VertexFormat::Undefined:
-                break;
-        }
-        UNREACHABLE();
-    }
-
-    size_t VertexFormatComponentSize(wgpu::VertexFormat format) {
-        switch (format) {
-            case wgpu::VertexFormat::Uint8x2:
-            case wgpu::VertexFormat::Uint8x4:
-            case wgpu::VertexFormat::Sint8x2:
-            case wgpu::VertexFormat::Sint8x4:
-            case wgpu::VertexFormat::Unorm8x2:
-            case wgpu::VertexFormat::Unorm8x4:
-            case wgpu::VertexFormat::Snorm8x2:
-            case wgpu::VertexFormat::Snorm8x4:
-                return sizeof(char);
-            case wgpu::VertexFormat::Uint16x2:
-            case wgpu::VertexFormat::Uint16x4:
-            case wgpu::VertexFormat::Unorm16x2:
-            case wgpu::VertexFormat::Unorm16x4:
-            case wgpu::VertexFormat::Sint16x2:
-            case wgpu::VertexFormat::Sint16x4:
-            case wgpu::VertexFormat::Snorm16x2:
-            case wgpu::VertexFormat::Snorm16x4:
-            case wgpu::VertexFormat::Float16x2:
-            case wgpu::VertexFormat::Float16x4:
-                return sizeof(uint16_t);
-            case wgpu::VertexFormat::Float32:
-            case wgpu::VertexFormat::Float32x2:
-            case wgpu::VertexFormat::Float32x3:
-            case wgpu::VertexFormat::Float32x4:
-                return sizeof(float);
-            case wgpu::VertexFormat::Uint32:
-            case wgpu::VertexFormat::Uint32x2:
-            case wgpu::VertexFormat::Uint32x3:
-            case wgpu::VertexFormat::Uint32x4:
-            case wgpu::VertexFormat::Sint32:
-            case wgpu::VertexFormat::Sint32x2:
-            case wgpu::VertexFormat::Sint32x3:
-            case wgpu::VertexFormat::Sint32x4:
-                return sizeof(int32_t);
-
-            case wgpu::VertexFormat::Undefined:
-                break;
-        }
-        UNREACHABLE();
-    }
-
-    size_t VertexFormatSize(wgpu::VertexFormat format) {
-        return VertexFormatNumComponents(format) * VertexFormatComponentSize(format);
-    }
-
-    const char* GetWGSLVertexFormatType(wgpu::VertexFormat format) {
-        switch (format) {
-            case wgpu::VertexFormat::Float32:
-                return "f32";
-            case wgpu::VertexFormat::Unorm8x2:
-            case wgpu::VertexFormat::Snorm8x2:
-            case wgpu::VertexFormat::Unorm16x2:
-            case wgpu::VertexFormat::Snorm16x2:
-            case wgpu::VertexFormat::Float16x2:
-            case wgpu::VertexFormat::Float32x2:
-                return "vec2<f32>";
-            case wgpu::VertexFormat::Float32x3:
-                return "vec3<f32>";
-            case wgpu::VertexFormat::Unorm8x4:
-            case wgpu::VertexFormat::Snorm8x4:
-            case wgpu::VertexFormat::Unorm16x4:
-            case wgpu::VertexFormat::Snorm16x4:
-            case wgpu::VertexFormat::Float16x4:
-            case wgpu::VertexFormat::Float32x4:
-                return "vec4<f32>";
-            case wgpu::VertexFormat::Uint32:
-                return "u32";
-            case wgpu::VertexFormat::Uint8x2:
-            case wgpu::VertexFormat::Uint16x2:
-            case wgpu::VertexFormat::Uint32x2:
-                return "vec2<u32>";
-            case wgpu::VertexFormat::Uint32x3:
-                return "vec3<u32>";
-            case wgpu::VertexFormat::Uint8x4:
-            case wgpu::VertexFormat::Uint16x4:
-            case wgpu::VertexFormat::Uint32x4:
-                return "vec4<u32>";
-            case wgpu::VertexFormat::Sint32:
-                return "i32";
-            case wgpu::VertexFormat::Sint8x2:
-            case wgpu::VertexFormat::Sint16x2:
-            case wgpu::VertexFormat::Sint32x2:
-                return "vec2<i32>";
-            case wgpu::VertexFormat::Sint32x3:
-                return "vec3<i32>";
-            case wgpu::VertexFormat::Sint8x4:
-            case wgpu::VertexFormat::Sint16x4:
-            case wgpu::VertexFormat::Sint32x4:
-                return "vec4<i32>";
-
-            case wgpu::VertexFormat::Undefined:
-                break;
-        }
-        UNREACHABLE();
-    }
-
-}  // namespace dawn
diff --git a/src/common/VertexFormatUtils.h b/src/common/VertexFormatUtils.h
deleted file mode 100644
index 1ef5e98..0000000
--- a/src/common/VertexFormatUtils.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2021 The Dawn 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.
-
-#ifndef DAWNNATIVE_VERTEX_FORMAT_UTILS_H_
-#define DAWNNATIVE_VERTEX_FORMAT_UTILS_H_
-
-#include <array>
-
-#include <dawn/webgpu_cpp.h>
-
-// TODO(dawn:695): Remove the dawncpp_headers CMake dependency when VertexFormatUtils is deleted,
-// assuming no other dependencies have been added in other project files.
-
-namespace dawn {
-
-    static constexpr std::array<wgpu::VertexFormat, 30> kAllVertexFormats = {
-        wgpu::VertexFormat::Uint8x2,   wgpu::VertexFormat::Uint8x4,   wgpu::VertexFormat::Sint8x2,
-        wgpu::VertexFormat::Sint8x4,   wgpu::VertexFormat::Unorm8x2,  wgpu::VertexFormat::Unorm8x4,
-        wgpu::VertexFormat::Snorm8x2,  wgpu::VertexFormat::Snorm8x4,  wgpu::VertexFormat::Uint16x2,
-        wgpu::VertexFormat::Uint16x4,  wgpu::VertexFormat::Unorm16x2, wgpu::VertexFormat::Unorm16x4,
-        wgpu::VertexFormat::Sint16x2,  wgpu::VertexFormat::Sint16x4,  wgpu::VertexFormat::Snorm16x2,
-        wgpu::VertexFormat::Snorm16x4, wgpu::VertexFormat::Float16x2, wgpu::VertexFormat::Float16x4,
-        wgpu::VertexFormat::Float32,   wgpu::VertexFormat::Float32x2, wgpu::VertexFormat::Float32x3,
-        wgpu::VertexFormat::Float32x4, wgpu::VertexFormat::Uint32,    wgpu::VertexFormat::Uint32x2,
-        wgpu::VertexFormat::Uint32x3,  wgpu::VertexFormat::Uint32x4,  wgpu::VertexFormat::Sint32,
-        wgpu::VertexFormat::Sint32x2,  wgpu::VertexFormat::Sint32x3,  wgpu::VertexFormat::Sint32x4,
-    };
-
-    uint32_t VertexFormatNumComponents(wgpu::VertexFormat format);
-    size_t VertexFormatComponentSize(wgpu::VertexFormat format);
-    size_t VertexFormatSize(wgpu::VertexFormat format);
-
-    const char* GetWGSLVertexFormatType(wgpu::VertexFormat textureFormat);
-
-}  // namespace dawn
-
-#endif
\ No newline at end of file
diff --git a/src/dawn_native/BUILD.gn b/src/dawn_native/BUILD.gn
index 6fc4e3a..f73bfe2 100644
--- a/src/dawn_native/BUILD.gn
+++ b/src/dawn_native/BUILD.gn
@@ -300,6 +300,8 @@
     "ToBackend.h",
     "Toggles.cpp",
     "Toggles.h",
+    "VertexFormat.cpp",
+    "VertexFormat.h",
     "dawn_platform.h",
   ]
 
diff --git a/src/dawn_native/CMakeLists.txt b/src/dawn_native/CMakeLists.txt
index c787982..84417d4 100644
--- a/src/dawn_native/CMakeLists.txt
+++ b/src/dawn_native/CMakeLists.txt
@@ -166,6 +166,8 @@
     "ToBackend.h"
     "Toggles.cpp"
     "Toggles.h"
+    "VertexFormat.cpp"
+    "VertexFormat.h"
     "dawn_platform.h"
 )
 target_link_libraries(dawn_native
diff --git a/src/dawn_native/RenderPipeline.cpp b/src/dawn_native/RenderPipeline.cpp
index 709fafb..3f59535 100644
--- a/src/dawn_native/RenderPipeline.cpp
+++ b/src/dawn_native/RenderPipeline.cpp
@@ -15,12 +15,12 @@
 #include "dawn_native/RenderPipeline.h"
 
 #include "common/BitSetIterator.h"
-#include "common/VertexFormatUtils.h"
 #include "dawn_native/ChainUtils_autogen.h"
 #include "dawn_native/Commands.h"
 #include "dawn_native/Device.h"
 #include "dawn_native/ObjectContentHasher.h"
 #include "dawn_native/ValidationUtils_autogen.h"
+#include "dawn_native/VertexFormat.h"
 
 #include <cmath>
 
@@ -33,6 +33,7 @@
                                            uint64_t vertexBufferStride,
                                            std::bitset<kMaxVertexAttributes>* attributesSetMask) {
             DAWN_TRY(ValidateVertexFormat(attribute->format));
+            const VertexFormatInfo& formatInfo = GetVertexFormatInfo(attribute->format);
 
             if (attribute->shaderLocation >= kMaxVertexAttributes) {
                 return DAWN_VALIDATION_ERROR("Setting attribute out of bounds");
@@ -40,9 +41,8 @@
 
             // No underflow is possible because the max vertex format size is smaller than
             // kMaxVertexBufferArrayStride.
-            ASSERT(kMaxVertexBufferArrayStride >= dawn::VertexFormatSize(attribute->format));
-            if (attribute->offset >
-                kMaxVertexBufferArrayStride - dawn::VertexFormatSize(attribute->format)) {
+            ASSERT(kMaxVertexBufferArrayStride >= formatInfo.byteSize);
+            if (attribute->offset > kMaxVertexBufferArrayStride - formatInfo.byteSize) {
                 return DAWN_VALIDATION_ERROR("Setting attribute offset out of bounds");
             }
 
@@ -50,12 +50,11 @@
             // than kMaxVertexBufferArrayStride.
             ASSERT(attribute->offset < kMaxVertexBufferArrayStride);
             if (vertexBufferStride > 0 &&
-                attribute->offset + dawn::VertexFormatSize(attribute->format) >
-                    vertexBufferStride) {
+                attribute->offset + formatInfo.byteSize > vertexBufferStride) {
                 return DAWN_VALIDATION_ERROR("Setting attribute offset out of bounds");
             }
 
-            if (attribute->offset % dawn::VertexFormatComponentSize(attribute->format) != 0) {
+            if (attribute->offset % formatInfo.componentByteSize != 0) {
                 return DAWN_VALIDATION_ERROR(
                     "Attribute offset needs to be a multiple of the size format's components");
             }
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index 36d1c27..9bd3b7e 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -16,7 +16,6 @@
 
 #include "common/Constants.h"
 #include "common/HashUtils.h"
-#include "common/VertexFormatUtils.h"
 #include "dawn_native/BindGroupLayout.h"
 #include "dawn_native/ChainUtils_autogen.h"
 #include "dawn_native/CompilationMessages.h"
diff --git a/src/dawn_native/VertexFormat.cpp b/src/dawn_native/VertexFormat.cpp
new file mode 100644
index 0000000..b4bdfb7
--- /dev/null
+++ b/src/dawn_native/VertexFormat.cpp
@@ -0,0 +1,69 @@
+// Copyright 2021 The Dawn 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 "dawn_native/VertexFormat.h"
+
+#include "common/Assert.h"
+
+#include <array>
+
+namespace dawn_native {
+
+    static constexpr std::array<VertexFormatInfo, 31> sVertexFormatTable = {{
+        //
+        {wgpu::VertexFormat::Undefined, 0, 0, 0, VertexFormatBaseType::Float},
+
+        {wgpu::VertexFormat::Uint8x2, 2, 2, 1, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Uint8x4, 4, 4, 1, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Sint8x2, 2, 2, 1, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Sint8x4, 4, 4, 1, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Unorm8x2, 2, 2, 1, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Unorm8x4, 4, 4, 1, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Snorm8x2, 2, 2, 1, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Snorm8x4, 4, 4, 1, VertexFormatBaseType::Float},
+
+        {wgpu::VertexFormat::Uint16x2, 4, 2, 2, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Uint16x4, 8, 4, 2, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Sint16x2, 4, 2, 2, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Sint16x4, 8, 4, 2, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Unorm16x2, 4, 2, 2, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Unorm16x4, 8, 4, 2, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Snorm16x2, 4, 2, 2, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Snorm16x4, 8, 4, 2, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Float16x2, 4, 2, 2, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Float16x4, 8, 4, 2, VertexFormatBaseType::Float},
+
+        {wgpu::VertexFormat::Float32, 4, 1, 4, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Float32x2, 8, 2, 4, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Float32x3, 12, 3, 4, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Float32x4, 16, 4, 4, VertexFormatBaseType::Float},
+        {wgpu::VertexFormat::Uint32, 4, 1, 4, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Uint32x2, 8, 2, 4, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Uint32x3, 12, 3, 4, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Uint32x4, 16, 4, 4, VertexFormatBaseType::Uint},
+        {wgpu::VertexFormat::Sint32, 4, 1, 4, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Sint32x2, 8, 2, 4, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Sint32x3, 12, 3, 4, VertexFormatBaseType::Sint},
+        {wgpu::VertexFormat::Sint32x4, 16, 4, 4, VertexFormatBaseType::Sint},
+        //
+    }};
+
+    const VertexFormatInfo& GetVertexFormatInfo(wgpu::VertexFormat format) {
+        ASSERT(format != wgpu::VertexFormat::Undefined);
+        ASSERT(static_cast<uint32_t>(format) < sVertexFormatTable.size());
+        ASSERT(sVertexFormatTable[static_cast<uint32_t>(format)].format == format);
+        return sVertexFormatTable[static_cast<uint32_t>(format)];
+    }
+
+}  // namespace dawn_native
diff --git a/src/dawn_native/VertexFormat.h b/src/dawn_native/VertexFormat.h
new file mode 100644
index 0000000..582c95d
--- /dev/null
+++ b/src/dawn_native/VertexFormat.h
@@ -0,0 +1,40 @@
+// Copyright 2021 The Dawn 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.
+
+#ifndef DAWNNATIVE_VERTEXFORMAT_H_
+#define DAWNNATIVE_VERTEXFORMAT_H_
+
+#include "dawn_native/dawn_platform.h"
+
+namespace dawn_native {
+
+    enum class VertexFormatBaseType {
+        Float,
+        Uint,
+        Sint,
+    };
+
+    struct VertexFormatInfo {
+        wgpu::VertexFormat format;
+        uint32_t byteSize;
+        uint32_t componentCount;
+        uint32_t componentByteSize;
+        VertexFormatBaseType baseType;
+    };
+
+    const VertexFormatInfo& GetVertexFormatInfo(wgpu::VertexFormat format);
+
+}  // namespace dawn_native
+
+#endif  // DAWNNATIVE_VERTEXFORMAT_H_
diff --git a/src/dawn_native/metal/RenderPipelineMTL.mm b/src/dawn_native/metal/RenderPipelineMTL.mm
index 9ddcb56..4ddaa59 100644
--- a/src/dawn_native/metal/RenderPipelineMTL.mm
+++ b/src/dawn_native/metal/RenderPipelineMTL.mm
@@ -14,7 +14,7 @@
 
 #include "dawn_native/metal/RenderPipelineMTL.h"
 
-#include "common/VertexFormatUtils.h"
+#include "dawn_native/VertexFormat.h"
 #include "dawn_native/metal/DeviceMTL.h"
 #include "dawn_native/metal/PipelineLayoutMTL.h"
 #include "dawn_native/metal/ShaderModuleMTL.h"
@@ -479,8 +479,8 @@
                         continue;
                     }
                     maxArrayStride =
-                        std::max(maxArrayStride,
-                                 dawn::VertexFormatSize(attrib.format) + size_t(attrib.offset));
+                        std::max(maxArrayStride, GetVertexFormatInfo(attrib.format).byteSize +
+                                                     size_t(attrib.offset));
                 }
                 layoutDesc.stepFunction = MTLVertexStepFunctionConstant;
                 layoutDesc.stepRate = 0;
diff --git a/src/dawn_native/opengl/CommandBufferGL.cpp b/src/dawn_native/opengl/CommandBufferGL.cpp
index ee8504b..39bb465 100644
--- a/src/dawn_native/opengl/CommandBufferGL.cpp
+++ b/src/dawn_native/opengl/CommandBufferGL.cpp
@@ -14,13 +14,13 @@
 
 #include "dawn_native/opengl/CommandBufferGL.h"
 
-#include "common/VertexFormatUtils.h"
 #include "dawn_native/BindGroup.h"
 #include "dawn_native/BindGroupTracker.h"
 #include "dawn_native/CommandEncoder.h"
 #include "dawn_native/Commands.h"
 #include "dawn_native/ExternalTexture.h"
 #include "dawn_native/RenderBundle.h"
+#include "dawn_native/VertexFormat.h"
 #include "dawn_native/opengl/BufferGL.h"
 #include "dawn_native/opengl/ComputePipelineGL.h"
 #include "dawn_native/opengl/DeviceGL.h"
@@ -179,7 +179,7 @@
                         uint64_t offset = mVertexBufferOffsets[slot];
 
                         const VertexBufferInfo& vertexBuffer = mLastPipeline->GetVertexBuffer(slot);
-                        uint32_t components = dawn::VertexFormatNumComponents(attribute.format);
+                        uint32_t components = GetVertexFormatInfo(attribute.format).componentCount;
                         GLenum formatType = VertexFormatType(attribute.format);
 
                         GLboolean normalized = VertexFormatIsNormalized(attribute.format);
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index 4ab9ec1..fba4a29 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -20,7 +20,6 @@
 #include "tests/DawnTest.h"
 
 #include "common/Constants.h"
-#include "common/VertexFormatUtils.h"
 #include "utils/ComboRenderPipelineDescriptor.h"
 #include "utils/WGPUHelpers.h"
 
diff --git a/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp b/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp
index 8090a1c..c1a4277 100644
--- a/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp
+++ b/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp
@@ -15,8 +15,6 @@
 #include "tests/unittests/validation/ValidationTest.h"
 
 #include "common/Constants.h"
-
-#include "common/VertexFormatUtils.h"
 #include "utils/ComboRenderPipelineDescriptor.h"
 #include "utils/WGPUHelpers.h"
 
@@ -111,8 +109,7 @@
                 for (auto attr : buffer.attributes) {
                     // [[location({shaderLocation})]] var_{id} : {typeString},
                     inputStringStream << "[[location(" << attr.shaderLocation << ")]] var_"
-                                      << attributeCount << " : "
-                                      << dawn::GetWGSLVertexFormatType(attr.format) << ", ";
+                                      << attributeCount << " : vec4<f32>,";
                     attributeCount++;
                 }
             }
@@ -171,9 +168,7 @@
 
         // Create a render pipeline using only one vertex-step-mode Float32x4 buffer
         wgpu::RenderPipeline CreateBasicRenderPipeline(uint32_t bufferStride = kFloat32x4Stride) {
-            DAWN_ASSERT(bufferStride >=
-                        dawn::VertexFormatNumComponents(wgpu::VertexFormat::Float32x4) *
-                            dawn::VertexFormatComponentSize(wgpu::VertexFormat::Float32x4));
+            DAWN_ASSERT(bufferStride >= kFloat32x4Stride);
 
             std::vector<PipelineVertexBufferDesc> bufferDescList = {
                 {bufferStride, wgpu::InputStepMode::Vertex, {{0, wgpu::VertexFormat::Float32x4}}},
