diff --git a/examples/CHelloTriangle.cpp b/examples/CHelloTriangle.cpp
index e6b96ab..935c661 100644
--- a/examples/CHelloTriangle.cpp
+++ b/examples/CHelloTriangle.cpp
@@ -37,7 +37,7 @@
     wgpuSwapChainConfigure(swapchain, swapChainFormat, WGPUTextureUsage_RenderAttachment, 640, 480);
 
     const char* vs =
-        "[[builtin(vertex_idx)]] var<in> VertexIndex : u32;\n"
+        "[[builtin(vertex_index)]] var<in> VertexIndex : u32;\n"
         "[[builtin(position)]] var<out> Position : vec4<f32>;\n"
         "const pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(\n"
         "    vec2<f32>( 0.0,  0.5),\n"
diff --git a/examples/ManualSwapChainTest.cpp b/examples/ManualSwapChainTest.cpp
index a9ee509..83ba313 100644
--- a/examples/ManualSwapChainTest.cpp
+++ b/examples/ManualSwapChainTest.cpp
@@ -313,7 +313,7 @@
     // The hacky pipeline to render a triangle.
     utils::ComboRenderPipelineDescriptor pipelineDesc(device);
     pipelineDesc.vertexStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
         const pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
             vec2<f32>( 0.0,  0.5),
diff --git a/src/dawn_native/CopyTextureForBrowserHelper.cpp b/src/dawn_native/CopyTextureForBrowserHelper.cpp
index 51b36ed..6f65389 100644
--- a/src/dawn_native/CopyTextureForBrowserHelper.cpp
+++ b/src/dawn_native/CopyTextureForBrowserHelper.cpp
@@ -44,7 +44,7 @@
                 vec2<f32>( 0.5, 2.0));
             [[location(0)]] var<out> v_texcoord: vec2<f32>;
             [[builtin(position)]] var<out> Position : vec4<f32>;
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
             [[stage(vertex)]] fn main() -> void {
                 Position = vec4<f32>((texcoord[VertexIndex] * 2.0 - vec2<f32>(1.0, 1.0)), 0.0, 1.0);
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index 6f2c51f..78f9929 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -46,7 +46,7 @@
 
     wgpu::ShaderModule MakeSimpleVSModule() const {
         return utils::CreateShaderModuleFromWGSL(device, R"(
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
 
         [[stage(vertex)]] fn main() -> void {
@@ -164,7 +164,7 @@
 
         [[group(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
 
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
 
         [[stage(vertex)]] fn main() -> void {
@@ -251,7 +251,7 @@
         };
         [[group(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
 
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
 
         [[stage(vertex)]] fn main() -> void {
@@ -374,7 +374,7 @@
         [[group(0), binding(0)]] var <uniform> vertexUbo1 : VertexUniformBuffer1;
         [[group(1), binding(0)]] var <uniform> vertexUbo2 : VertexUniformBuffer2;
 
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
 
         [[stage(vertex)]] fn main() -> void {
@@ -961,7 +961,7 @@
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
     wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
 
         [[stage(vertex)]] fn main() -> void {
@@ -1117,7 +1117,7 @@
     utils::ComboRenderPipelineDescriptor pipelineDescriptor(device);
 
     pipelineDescriptor.vertexStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
 
         [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index b927329..8bb7041 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -293,7 +293,7 @@
             CreateRenderPipelineForTest(R"(
             [[location(0)]] var<out> o_color : vec4<f32>;
 
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/ClipSpaceTests.cpp b/src/tests/end2end/ClipSpaceTests.cpp
index fcb019e..ff3e08d 100644
--- a/src/tests/end2end/ClipSpaceTests.cpp
+++ b/src/tests/end2end/ClipSpaceTests.cpp
@@ -34,7 +34,7 @@
                 vec3<f32>(-1.0, -1.0, 0.5),
                 vec3<f32>( 1.0, -1.0, 0.0));
 
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 79747ee..2cc8b58 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -31,7 +31,7 @@
         DawnTest::SetUp();
 
         vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-                [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+                [[builtin(vertex_index)]] var<in> VertexIndex : u32;
                 [[builtin(position)]] var<out> Position : vec4<f32>;
 
                 [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index f953839..a6b6523 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -143,7 +143,7 @@
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[location(0)]] var<out> texCoord : vec2 <f32>;
 
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
 
             [[stage(vertex)]] fn main() -> void {
                 const pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
diff --git a/src/tests/end2end/CullingTests.cpp b/src/tests/end2end/CullingTests.cpp
index e7f62f7..17570e6 100644
--- a/src/tests/end2end/CullingTests.cpp
+++ b/src/tests/end2end/CullingTests.cpp
@@ -34,7 +34,7 @@
                 vec2<f32>( 1.0,  0.0),
                 vec2<f32>( 1.0, -1.0));
 
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/DepthBiasTests.cpp b/src/tests/end2end/DepthBiasTests.cpp
index 2438c54..c5b1b38 100644
--- a/src/tests/end2end/DepthBiasTests.cpp
+++ b/src/tests/end2end/DepthBiasTests.cpp
@@ -36,7 +36,7 @@
             case QuadAngle::Flat:
                 // Draw a square at z = 0.25
                 vertexSource = R"(
-    [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+    [[builtin(vertex_index)]] var<in> VertexIndex : u32;
     [[builtin(position)]] var<out> Position : vec4<f32>;
     [[stage(vertex)]] fn main() -> void {
         const pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
@@ -54,7 +54,7 @@
             case QuadAngle::TiltedX:
                 // Draw a square ranging from 0 to 0.5, bottom to top
                 vertexSource = R"(
-    [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+    [[builtin(vertex_index)]] var<in> VertexIndex : u32;
     [[builtin(position)]] var<out> Position : vec4<f32>;
     [[stage(vertex)]] fn main() -> void {
         const pos : array<vec3<f32>, 6> = array<vec3<f32>, 6>(
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index 47d7ad0..936dcaa 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -29,7 +29,7 @@
 
         // Draw a square in the bottom left quarter of the screen.
         mVertexModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
@@ -239,7 +239,7 @@
         utils::ComboRenderPipelineDescriptor pipelineDescriptor(device);
 
         pipelineDescriptor.vertexStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index 66fc3a6..a80ddb3 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -58,7 +58,7 @@
                 [[offset(12)]] depth : f32;
             };
             [[group(0), binding(0)]] var<uniform> ubo : UBO;
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index 3eb70e1..4f254f3 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -94,7 +94,7 @@
 
     wgpu::RenderPipeline CreateRenderPipeline(bool isInheritedPipeline = false) {
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[stage(vertex)]] fn main() -> void {
                 const pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
diff --git a/src/tests/end2end/FirstIndexOffsetTests.cpp b/src/tests/end2end/FirstIndexOffsetTests.cpp
index 2411655..53019bb 100644
--- a/src/tests/end2end/FirstIndexOffsetTests.cpp
+++ b/src/tests/end2end/FirstIndexOffsetTests.cpp
@@ -91,7 +91,7 @@
 
     if ((checkIndex & CheckIndex::Vertex) != 0) {
         vertexShader << R"(
-        [[builtin(vertex_idx)]] var<in> vertex_index : u32;
+        [[builtin(vertex_index)]] var<in> vertex_index : u32;
         [[location(1)]] var<out> out_vertex_index : u32;
         )";
         fragmentShader << R"(
@@ -100,7 +100,7 @@
     }
     if ((checkIndex & CheckIndex::Instance) != 0) {
         vertexShader << R"(
-            [[builtin(instance_idx)]] var<in> instance_index : u32;
+            [[builtin(instance_index)]] var<in> instance_index : u32;
             [[location(2)]] var<out> out_instance_index : u32;
             )";
         fragmentShader << R"(
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index c2c1b72..f0ebfe2 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -248,7 +248,7 @@
         wgpu::RenderPipeline pipeline;
         {
             wgpu::ShaderModule vs = utils::CreateShaderModuleFromWGSL(device, R"(
-                [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+                [[builtin(vertex_index)]] var<in> VertexIndex : u32;
                 [[location(0)]] var<out> o_texCoord : vec2<f32>;
                 [[builtin(position)]] var<out> Position : vec4<f32>;
 
diff --git a/src/tests/end2end/IndexFormatTests.cpp b/src/tests/end2end/IndexFormatTests.cpp
index 3d65039..252ad63 100644
--- a/src/tests/end2end/IndexFormatTests.cpp
+++ b/src/tests/end2end/IndexFormatTests.cpp
@@ -34,7 +34,7 @@
         wgpu::PrimitiveTopology primitiveTopology = wgpu::PrimitiveTopology::TriangleStrip) {
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
             [[location(0)]] var<in> pos : vec4<f32>;
-            [[builtin(vertex_idx)]] var<in> idx : u32;
+            [[builtin(vertex_index)]] var<in> idx : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[stage(vertex)]] fn main() -> void {
                 // 0xFFFFFFFE is a designated invalid index used by some tests.
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index ff64300..7b768fb 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -39,7 +39,7 @@
         DawnTest::SetUp();
 
         vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[stage(vertex)]] fn main() -> void {
                 const pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index 43454e7..1c7d8c1 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -77,7 +77,7 @@
 
         // draws a blue quad on the right half of the screen
         const char* vsSource = R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index 0594aa5..f3857f5 100644
--- a/src/tests/end2end/RenderPassTests.cpp
+++ b/src/tests/end2end/RenderPassTests.cpp
@@ -27,7 +27,7 @@
 
         // Shaders to draw a bottom-left triangle in blue.
         mVSModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index bb7f7e6..8b4919f 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -55,7 +55,7 @@
         mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
         auto vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/ScissorTests.cpp b/src/tests/end2end/ScissorTests.cpp
index f07a4b1..0c68ee0 100644
--- a/src/tests/end2end/ScissorTests.cpp
+++ b/src/tests/end2end/ScissorTests.cpp
@@ -21,9 +21,9 @@
   protected:
     wgpu::RenderPipeline CreateQuadPipeline(wgpu::TextureFormat format) {
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
-            
+
             const pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                 vec2<f32>(-1.0, -1.0),
                 vec2<f32>(-1.0,  1.0),
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 0675cc2..baa05bb 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -147,7 +147,7 @@
         utils::ComboRenderPipelineDescriptor desc(device);
 
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/TextureSubresourceTests.cpp b/src/tests/end2end/TextureSubresourceTests.cpp
index e58df56..fa4e7dd 100644
--- a/src/tests/end2end/TextureSubresourceTests.cpp
+++ b/src/tests/end2end/TextureSubresourceTests.cpp
@@ -50,7 +50,7 @@
 
     void DrawTriangle(const wgpu::TextureView& view) {
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
@@ -90,7 +90,7 @@
 
     void SampleAndDraw(const wgpu::TextureView& samplerView, const wgpu::TextureView& renderView) {
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             [[stage(vertex)]] fn main() -> void {
diff --git a/src/tests/end2end/ViewportTests.cpp b/src/tests/end2end/ViewportTests.cpp
index b692b1a..03e477b 100644
--- a/src/tests/end2end/ViewportTests.cpp
+++ b/src/tests/end2end/ViewportTests.cpp
@@ -23,7 +23,7 @@
         DawnTest::SetUp();
 
         mQuadVS = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             const pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
@@ -96,7 +96,7 @@
         // Create a pipeline drawing 3 points at depth 1.0, 0.5 and 0.0.
         utils::ComboRenderPipelineDescriptor pipelineDesc(device);
         pipelineDesc.vertexStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+            [[builtin(vertex_index)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
             const points : array<vec3<f32>, 3> = array<vec3<f32>, 3>(
diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
index 3637673..2aba3e0 100644
--- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -475,7 +475,7 @@
             [[offset(0)]] data : [[stride(4)]] array<u32, 100>;
         };
         [[group(0), binding(0)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
-        [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
+        [[builtin(vertex_index)]] var<in> VertexIndex : u32;
         [[stage(vertex)]] fn main() -> void {
             dst.data[VertexIndex] = 0x1234u;
         })");
