Replace VertexFormatUtils with a dawn_native table of formats

This replaces multiple switches with a single indexing into a data
table, and also adds information about the VertexFormatBaseType for
later validation.

Bug: dawn:1008
Change-Id: Ic3f564b0dc571cc0008a54785613f962ce223452
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/59030
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
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}}},