Triage Dawn TODOs

Change-Id: Ia010e534df1ac8a82008b38c44cfd9dc3f0b1aa6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53340
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/common/BitSetIterator.h b/src/common/BitSetIterator.h
index 14ba485..5a1c10f 100644
--- a/src/common/BitSetIterator.h
+++ b/src/common/BitSetIterator.h
@@ -23,7 +23,7 @@
 #include <limits>
 
 // This is ANGLE's BitSetIterator class with a customizable return type
-// TODO(cwallez@chromium.org): it could be optimized, in particular when N <= 64
+// TODO(crbug.com/dawn/306): it could be optimized, in particular when N <= 64
 
 template <typename T>
 T roundUp(const T value, const T alignment) {
diff --git a/src/common/GPUInfo.cpp b/src/common/GPUInfo.cpp
index 5aa44ee..1c2e80e 100644
--- a/src/common/GPUInfo.cpp
+++ b/src/common/GPUInfo.cpp
@@ -95,7 +95,7 @@
             }
         }
 
-        // TODO(jiawei.shao@intel.com): support other GPU vendors
+        // TODO(crbug.com/dawn/823): support other GPU vendors
         UNREACHABLE();
         return 0;
     }
diff --git a/src/common/SlabAllocator.cpp b/src/common/SlabAllocator.cpp
index e58a235..0ffb073 100644
--- a/src/common/SlabAllocator.cpp
+++ b/src/common/SlabAllocator.cpp
@@ -209,7 +209,7 @@
         mRecycledSlabs.Prepend(slab);
     }
 
-    // TODO(enga): Occasionally prune slabs if |blocksInUse == 0|.
+    // TODO(crbug.com/dawn/825): Occasionally prune slabs if |blocksInUse == 0|.
     // Doing so eagerly hurts performance.
 }
 
@@ -228,7 +228,7 @@
         return;
     }
 
-    // TODO(enga): Use aligned_alloc with C++17.
+    // TODO(crbug.com/dawn/824): Use aligned_alloc with C++17.
     char* allocation = new char[mTotalAllocationSize];
     char* alignedPtr = AlignPtr(allocation, mAllocationAlignment);
 
diff --git a/src/common/SlabAllocator.h b/src/common/SlabAllocator.h
index 8a78dde..b02ed52 100644
--- a/src/common/SlabAllocator.h
+++ b/src/common/SlabAllocator.h
@@ -57,7 +57,7 @@
   public:
     // Allocations host their current index and the index of the next free block.
     // Because this is an index, and not a byte offset, it can be much smaller than a size_t.
-    // TODO(enga): Is uint8_t sufficient?
+    // TODO(crbug.com/dawn/825): Is uint8_t sufficient?
     using Index = uint16_t;
 
     SlabAllocatorImpl(SlabAllocatorImpl&& rhs);
diff --git a/src/dawn_native/Adapter.cpp b/src/dawn_native/Adapter.cpp
index 3e70831..ff95534 100644
--- a/src/dawn_native/Adapter.cpp
+++ b/src/dawn_native/Adapter.cpp
@@ -85,8 +85,6 @@
             }
         }
 
-        // TODO(cwallez@chromium.org): This will eventually have validation that the device
-        // descriptor is valid and is a subset what's allowed on this adapter.
         DAWN_TRY_ASSIGN(*result, CreateDeviceImpl(descriptor));
         return {};
     }
diff --git a/src/dawn_native/AsyncTask.h b/src/dawn_native/AsyncTask.h
index 5a702a3..1ae9344 100644
--- a/src/dawn_native/AsyncTask.h
+++ b/src/dawn_native/AsyncTask.h
@@ -29,7 +29,7 @@
 
 namespace dawn_native {
 
-    // TODO(jiawei.shao@intel.com): we'll add additional things to AsyncTask in the future, like
+    // TODO(crbug.com/dawn/826): we'll add additional things to AsyncTask in the future, like
     // Cancel() and RunNow(). Cancelling helps avoid running the task's body when we are just
     // shutting down the device. RunNow() could be used for more advanced scenarios, for example
     // always doing ShaderModule initial compilation asynchronously, but being able to steal the
diff --git a/src/dawn_native/BuddyAllocator.cpp b/src/dawn_native/BuddyAllocator.cpp
index 60a8b9b..b19cc19 100644
--- a/src/dawn_native/BuddyAllocator.cpp
+++ b/src/dawn_native/BuddyAllocator.cpp
@@ -202,7 +202,7 @@
     void BuddyAllocator::Deallocate(uint64_t offset) {
         BuddyBlock* curr = mRoot;
 
-        // TODO(bryan.bernhart@intel.com): Optimize de-allocation.
+        // TODO(crbug.com/dawn/827): Optimize de-allocation.
         // Passing allocationSize directly will avoid the following level-by-level search;
         // however, it requires the size information to be stored outside the allocator.
 
diff --git a/src/dawn_native/BuddyAllocator.h b/src/dawn_native/BuddyAllocator.h
index 8404158..af959fc 100644
--- a/src/dawn_native/BuddyAllocator.h
+++ b/src/dawn_native/BuddyAllocator.h
@@ -100,7 +100,7 @@
         // Keep track the head and tail (for faster insertion/removal).
         struct BlockList {
             BuddyBlock* head = nullptr;  // First free block in level.
-            // TODO(bryan.bernhart@intel.com): Track the tail.
+            // TODO(crbug.com/dawn/827): Track the tail.
         };
 
         BuddyBlock* mRoot = nullptr;  // Used to deallocate non-free blocks.
diff --git a/src/dawn_native/Buffer.cpp b/src/dawn_native/Buffer.cpp
index 3ddb72b..cdd9f05 100644
--- a/src/dawn_native/Buffer.cpp
+++ b/src/dawn_native/Buffer.cpp
@@ -138,7 +138,7 @@
             mUsage |= kReadOnlyStorageBuffer;
         }
 
-        // TODO(hao.x.li@intel.com): This is just a workaround to make QueryResolve buffer pass the
+        // TODO(crbug.com/dawn/434): This is just a workaround to make QueryResolve buffer pass the
         // binding group validation when used as an internal resource. Instead the buffer made with
         // QueryResolve usage would implicitly get StorageInternal usage which is only compatible
         // with StorageBufferInternal binding type in BGL, not StorageBuffer binding type.
@@ -213,8 +213,8 @@
         } else {
             // If any of these fail, the buffer will be deleted and replaced with an
             // error buffer.
-            // TODO(enga): Suballocate and reuse memory from a larger staging buffer so we don't
-            // create many small buffers.
+            // TODO(crbug.com/dawn/828): Suballocate and reuse memory from a larger staging buffer
+            // so we don't create many small buffers.
             DAWN_TRY_ASSIGN(mStagingBuffer, GetDevice()->CreateStagingBuffer(GetSize()));
         }
 
diff --git a/src/dawn_native/CommandAllocator.cpp b/src/dawn_native/CommandAllocator.cpp
index 7c94520..5ae5cfc 100644
--- a/src/dawn_native/CommandAllocator.cpp
+++ b/src/dawn_native/CommandAllocator.cpp
@@ -104,7 +104,7 @@
         return mBlocks[0].block == reinterpret_cast<const uint8_t*>(&mEndOfBlock);
     }
 
-    // Potential TODO(cwallez@chromium.org):
+    // Potential TODO(crbug.com/dawn/835):
     //  - Host the size and pointer to next block in the block itself to avoid having an allocation
     //    in the vector
     //  - Assume T's alignof is, say 64bits, static assert it, and make commandAlignment a constant
diff --git a/src/dawn_native/CommandAllocator.h b/src/dawn_native/CommandAllocator.h
index 0383dc1..2713545 100644
--- a/src/dawn_native/CommandAllocator.h
+++ b/src/dawn_native/CommandAllocator.h
@@ -17,6 +17,7 @@
 
 #include "common/Assert.h"
 #include "common/Math.h"
+#include "common/NonCopyable.h"
 
 #include <cstddef>
 #include <cstdint>
@@ -66,8 +67,7 @@
 
     class CommandAllocator;
 
-    // TODO(cwallez@chromium.org): prevent copy for both iterator and allocator
-    class CommandIterator {
+    class CommandIterator : public NonCopyable {
       public:
         CommandIterator();
         ~CommandIterator();
@@ -144,7 +144,7 @@
         uint32_t mEndOfBlock = detail::kEndOfBlock;
     };
 
-    class CommandAllocator {
+    class CommandAllocator : public NonCopyable {
       public:
         CommandAllocator();
         ~CommandAllocator();
diff --git a/src/dawn_native/CommandEncoder.cpp b/src/dawn_native/CommandEncoder.cpp
index 05d0656..30472ca 100644
--- a/src/dawn_native/CommandEncoder.cpp
+++ b/src/dawn_native/CommandEncoder.cpp
@@ -399,7 +399,7 @@
                     "set");
             }
 
-            // TODO(hao.x.li@intel.com): Validate that the queries between [firstQuery, firstQuery +
+            // TODO(crbug.com/dawn/434): Validate that the queries between [firstQuery, firstQuery +
             // queryCount - 1] must be available(written by query operations).
 
             // The destinationOffset must be a multiple of 8 bytes on D3D12 and Vulkan
diff --git a/src/dawn_native/CommandValidation.cpp b/src/dawn_native/CommandValidation.cpp
index ba70ce7..65c8743 100644
--- a/src/dawn_native/CommandValidation.cpp
+++ b/src/dawn_native/CommandValidation.cpp
@@ -303,8 +303,6 @@
     MaybeError ValidateTextureCopyRange(DeviceBase const* device,
                                         const ImageCopyTexture& textureCopy,
                                         const Extent3D& copySize) {
-        // TODO(jiawei.shao@intel.com): add validations on the texture-to-texture copies within the
-        // same texture.
         const TextureBase* texture = textureCopy.texture;
 
         ASSERT(texture->GetDimension() != wgpu::TextureDimension::e1D);
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index 1efe91d..b70e844 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -264,7 +264,7 @@
 
             // Move away from the Alive state so that the application cannot use this device
             // anymore.
-            // TODO(cwallez@chromium.org): Do we need atomics for this to become visible to other
+            // TODO(crbug.com/dawn/831): Do we need atomics for this to become visible to other
             // threads in a multithreaded scenario?
             mState = State::BeingDisconnected;
 
@@ -896,7 +896,7 @@
                 AssumeCommandsComplete();
             }
 
-            // TODO(cwallez@chromium.org): decouple TickImpl from updating the serial so that we can
+            // TODO(crbug.com/dawn/833): decouple TickImpl from updating the serial so that we can
             // tick the dynamic uploader before the backend resource allocators. This would allow
             // reclaiming resources one tick earlier.
             mDynamicUploader->Deallocate(mCompletedSerial);
@@ -1126,7 +1126,7 @@
         return layoutRef;
     }
 
-    // TODO(jiawei.shao@intel.com): override this function with the async version on the backends
+    // This function is overwritten with the async version on the backends
     // that supports creating compute pipeline asynchronously
     void DeviceBase::CreateComputePipelineAsyncImpl(const ComputePipelineDescriptor* descriptor,
                                                     size_t blueprintHash,
diff --git a/src/dawn_native/Format.cpp b/src/dawn_native/Format.cpp
index b5d8c84..0bebc18 100644
--- a/src/dawn_native/Format.cpp
+++ b/src/dawn_native/Format.cpp
@@ -297,14 +297,15 @@
 
         // Depth-stencil formats
         AddDepthFormat(wgpu::TextureFormat::Depth32Float, 4);
+        // TODO(crbug.com/dawn/843): This is 4 because we read this to perform zero initialization,
+        // and textures are always use depth32float. We should improve this to be more robust. Perhaps,
+        // using 0 here to mean "unsized" and adding a backend-specific query for the block size.
         AddDepthFormat(wgpu::TextureFormat::Depth24Plus, 4);
         // TODO(dawn:666): Implement the stencil8 format
         AddStencilFormat(wgpu::TextureFormat::Stencil8);
-        // TODO(cwallez@chromium.org): It isn't clear if this format should be copyable
-        // because its size isn't well defined, is it 4, 5 or 8?
         AddMultiAspectFormat(wgpu::TextureFormat::Depth24PlusStencil8,
                               Aspect::Depth | Aspect::Stencil, wgpu::TextureFormat::Depth24Plus, wgpu::TextureFormat::Stencil8, true, true);
-	// TODO(dawn:690): Implement Depth16Unorm, Depth24UnormStencil8, Depth32FloatStencil8.
+        // TODO(dawn:690): Implement Depth16Unorm, Depth24UnormStencil8, Depth32FloatStencil8.
 
         // BC compressed formats
         bool isBCFormatSupported = device->IsExtensionEnabled(Extension::TextureCompressionBC);
diff --git a/src/dawn_native/RenderPipeline.cpp b/src/dawn_native/RenderPipeline.cpp
index 5231119..1a8f37c 100644
--- a/src/dawn_native/RenderPipeline.cpp
+++ b/src/dawn_native/RenderPipeline.cpp
@@ -458,9 +458,6 @@
                     NormalizeBlendFactor(mTargetBlend[i].color.dstFactor);
             }
         }
-
-        // TODO(cwallez@chromium.org): Check against the shader module that the correct color
-        // attachment are set?
     }
 
     RenderPipelineBase::RenderPipelineBase(DeviceBase* device, ObjectBase::ErrorTag tag)
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index b2a2a1f..96fe955 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -635,8 +635,6 @@
             std::unique_ptr<EntryPointMetadata> metadata = std::make_unique<EntryPointMetadata>();
             metadata->stage = stage;
 
-            // TODO(cwallez@chromium.org): make errors here creation errors
-            // currently errors here do not prevent the shadermodule from being used
             const auto& resources = compiler.get_shader_resources();
 
             if (resources.push_constant_buffers.size() > 0) {
diff --git a/src/dawn_native/Subresource.cpp b/src/dawn_native/Subresource.cpp
index 1114bae..99b42cb 100644
--- a/src/dawn_native/Subresource.cpp
+++ b/src/dawn_native/Subresource.cpp
@@ -78,7 +78,7 @@
     }
 
     uint8_t GetAspectCount(Aspect aspects) {
-        // TODO(cwallez@chromium.org): This should use popcount once Dawn has such a function.
+        // TODO(crbug.com/dawn/829): This should use popcount once Dawn has such a function.
         // Note that we can't do a switch because compilers complain that Depth | Stencil is not
         // a valid enum value.
         if (aspects == Aspect::Color || aspects == Aspect::Depth ||
diff --git a/src/dawn_native/SubresourceStorage.h b/src/dawn_native/SubresourceStorage.h
index 2a7e91a..01bd686 100644
--- a/src/dawn_native/SubresourceStorage.h
+++ b/src/dawn_native/SubresourceStorage.h
@@ -101,7 +101,7 @@
            third_party/dawn/src/dawn_native
     */
     //
-    // TODO(cwallez@chromium.org): Make the recompression optional, the calling code should know
+    // TODO(crbug.com/dawn/836): Make the recompression optional, the calling code should know
     // if recompression can happen or not in Update() and Merge()
     template <typename T>
     class SubresourceStorage {
diff --git a/src/dawn_native/SwapChain.cpp b/src/dawn_native/SwapChain.cpp
index aa5f894..b81d906 100644
--- a/src/dawn_native/SwapChain.cpp
+++ b/src/dawn_native/SwapChain.cpp
@@ -75,7 +75,7 @@
 
             DAWN_TRY(ValidatePresentMode(descriptor->presentMode));
 
-            // TODO(cwallez@chromium.org): Lift this restriction once
+            // TODO(crbug.com/dawn/160): Lift this restriction once
             // wgpu::Instance::GetPreferredSurfaceFormat is implemented.
             if (descriptor->format != wgpu::TextureFormat::BGRA8Unorm) {
                 return DAWN_VALIDATION_ERROR("Format must (currently) be BGRA8Unorm");
diff --git a/src/dawn_native/Texture.cpp b/src/dawn_native/Texture.cpp
index 0903e62..0bec001 100644
--- a/src/dawn_native/Texture.cpp
+++ b/src/dawn_native/Texture.cpp
@@ -26,7 +26,8 @@
 
 namespace dawn_native {
     namespace {
-        // TODO(jiawei.shao@intel.com): implement texture view format compatibility rule
+        // WebGPU currently does not have texture format reinterpretation. If it does, the
+        // code to check for it might go here.
         MaybeError ValidateTextureViewFormatCompatibility(const TextureBase* texture,
                                                           const TextureViewDescriptor* descriptor) {
             if (texture->GetFormat().format != descriptor->format) {
@@ -43,7 +44,7 @@
             return {};
         }
 
-        // TODO(jiawei.shao@intel.com): support validation on all texture view dimensions
+        // TODO(crbug.com/dawn/814): Implement for 1D texture.
         bool IsTextureViewDimensionCompatibleWithTextureDimension(
             wgpu::TextureViewDimension textureViewDimension,
             wgpu::TextureDimension textureDimension) {
@@ -63,7 +64,7 @@
             }
         }
 
-        // TODO(jiawei.shao@intel.com): support validation on all texture view dimensions
+        // TODO(crbug.com/dawn/814): Implement for 1D texture.
         bool IsArrayLayerValidForTextureViewDimension(
             wgpu::TextureViewDimension textureViewDimension,
             uint32_t textureViewArrayLayer) {
@@ -102,7 +103,6 @@
             }
         }
 
-        // TODO(jiawei.shao@intel.com): support more sample count.
         MaybeError ValidateSampleCount(const TextureDescriptor* descriptor, const Format* format) {
             if (!IsValidSampleCount(descriptor->sampleCount)) {
                 return DAWN_VALIDATION_ERROR("The sample count of the texture is not supported.");
@@ -264,7 +264,6 @@
         DAWN_TRY(ValidateTextureDimension(descriptor->dimension));
         DAWN_TRY(ValidateSampleCount(descriptor, format));
 
-        // TODO(jiawei.shao@intel.com): check stuff based on the dimension
         if (descriptor->size.width == 0 || descriptor->size.height == 0 ||
             descriptor->size.depthOrArrayLayers == 0 || descriptor->mipLevelCount == 0) {
             return DAWN_VALIDATION_ERROR("Cannot create an empty texture");
@@ -326,7 +325,6 @@
             return DAWN_VALIDATION_ERROR("Texture does not have selected aspect for texture view.");
         }
 
-        // TODO(jiawei.shao@intel.com): check stuff based on resource limits
         if (descriptor->arrayLayerCount == 0 || descriptor->mipLevelCount == 0) {
             return DAWN_VALIDATION_ERROR("Cannot create an empty texture view");
         }
@@ -392,6 +390,8 @@
         return desc;
     }
 
+    // WebGPU only supports sample counts of 1 and 4. We could expand to more based on
+    // platform support, but it would probably be an extension.
     bool IsValidSampleCount(uint32_t sampleCount) {
         switch (sampleCount) {
             case 1:
@@ -443,7 +443,6 @@
         return mDimension;
     }
 
-    // TODO(jiawei.shao@intel.com): return more information about texture format
     const Format& TextureBase::GetFormat() const {
         ASSERT(!IsError());
         return mFormat;
@@ -468,7 +467,7 @@
     }
     uint32_t TextureBase::GetArrayLayers() const {
         ASSERT(!IsError());
-        // TODO(cwallez@chromium.org): Update for 1D textures when they are supported.
+        // TODO(crbug.com/dawn/814): Update for 1D textures when they are supported.
         ASSERT(mDimension != wgpu::TextureDimension::e1D);
         if (mDimension == wgpu::TextureDimension::e3D) {
             return 1;
@@ -582,7 +581,7 @@
         // Compressed Textures will have paddings if their width or height is not a multiple of
         // 4 at non-zero mipmap levels.
         if (mFormat.isCompressed) {
-            // TODO(jiawei.shao@intel.com): check if there are any overflows.
+            // TODO(crbug.com/dawn/830): check if there are any overflows.
             const TexelBlockInfo& blockInfo = mFormat.GetAspectInfo(wgpu::TextureAspect::All).block;
             extent.width = (extent.width + blockInfo.width - 1) / blockInfo.width * blockInfo.width;
             extent.height =
diff --git a/src/dawn_native/Texture.h b/src/dawn_native/Texture.h
index a803dda..43076ef 100644
--- a/src/dawn_native/Texture.h
+++ b/src/dawn_native/Texture.h
@@ -99,7 +99,6 @@
 
         MaybeError ValidateDestroy() const;
         wgpu::TextureDimension mDimension;
-        // TODO(cwallez@chromium.org): This should be deduplicated in the Device
         const Format& mFormat;
         Extent3D mSize;
         uint32_t mMipLevelCount;
@@ -134,7 +133,6 @@
 
         Ref<TextureBase> mTexture;
 
-        // TODO(cwallez@chromium.org): This should be deduplicated in the Device
         const Format& mFormat;
         wgpu::TextureViewDimension mDimension;
         SubresourceRange mRange;
diff --git a/src/dawn_native/d3d12/BindGroupD3D12.cpp b/src/dawn_native/d3d12/BindGroupD3D12.cpp
index a1b095b..2857d2d 100644
--- a/src/dawn_native/d3d12/BindGroupD3D12.cpp
+++ b/src/dawn_native/d3d12/BindGroupD3D12.cpp
@@ -69,8 +69,6 @@
                     switch (bindingInfo.buffer.type) {
                         case wgpu::BufferBindingType::Uniform: {
                             D3D12_CONSTANT_BUFFER_VIEW_DESC desc;
-                            // TODO(enga@google.com): investigate if this needs to be a constraint
-                            // at the API level
                             desc.SizeInBytes = Align(binding.size, 256);
                             desc.BufferLocation =
                                 ToBackend(binding.buffer)->GetVA() + binding.offset;
diff --git a/src/dawn_native/d3d12/BufferD3D12.cpp b/src/dawn_native/d3d12/BufferD3D12.cpp
index a73eb9b..b5e17f7 100644
--- a/src/dawn_native/d3d12/BufferD3D12.cpp
+++ b/src/dawn_native/d3d12/BufferD3D12.cpp
@@ -109,8 +109,6 @@
         D3D12_RESOURCE_DESC resourceDescriptor;
         resourceDescriptor.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
         resourceDescriptor.Alignment = 0;
-        // TODO(cwallez@chromium.org): Have a global "zero" buffer that can do everything instead
-        // of creating a new 4-byte buffer?
         // D3D buffers are always resource size aligned to 64KB. However, D3D12's validation forbids
         // binding a CBV to an unaligned size. To prevent, one can always safely align the buffer
         // desc size to the CBV data alignment as other buffer usages ignore it (no size check).
diff --git a/src/dawn_native/d3d12/CommandBufferD3D12.cpp b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
index b0b8e46..107e70e 100644
--- a/src/dawn_native/d3d12/CommandBufferD3D12.cpp
+++ b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
@@ -744,7 +744,7 @@
                         commandList->CopyResource(destination->GetD3D12Resource(),
                                                   source->GetD3D12Resource());
                     } else {
-                        // TODO(jiawei.shao@intel.com): support copying with 1D and 3D textures.
+                        // TODO(crbug.com/dawn/814): support copying with 1D.
                         ASSERT(source->GetDimension() == wgpu::TextureDimension::e2D &&
                                destination->GetDimension() == wgpu::TextureDimension::e2D);
                         const dawn_native::Extent3D copyExtentOneSlice = {
diff --git a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp
index c29ae72..db11862 100644
--- a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp
+++ b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp
@@ -95,7 +95,7 @@
         mCurrentBuffer = mSwapChain->GetCurrentBackBufferIndex();
         nextTexture->texture.ptr = mBuffers[mCurrentBuffer].Get();
 
-        // TODO(cwallez@chromium.org) Currently we force the CPU to wait for the GPU to be finished
+        // TODO(crbug.com/dawn/269) Currently we force the CPU to wait for the GPU to be finished
         // with the buffer. Ideally the synchronization should be all done on the GPU.
         ASSERT(mDevice->WaitForSerial(mBufferSerials[mCurrentBuffer]).IsSuccess());
 
@@ -106,7 +106,7 @@
         // This assumes the texture has already been transition to the PRESENT state.
 
         ASSERT_SUCCESS(mSwapChain->Present(mInterval, 0));
-        // TODO(cwallez@chromium.org): Make the serial ticking implicit.
+        // TODO(crbug.com/dawn/833): Make the serial ticking implicit.
         ASSERT(mDevice->NextSerial().IsSuccess());
 
         mBufferSerials[mCurrentBuffer] = mDevice->GetPendingCommandSerial();
diff --git a/src/dawn_native/d3d12/SwapChainD3D12.cpp b/src/dawn_native/d3d12/SwapChainD3D12.cpp
index 9002cc4..98388da 100644
--- a/src/dawn_native/d3d12/SwapChainD3D12.cpp
+++ b/src/dawn_native/d3d12/SwapChainD3D12.cpp
@@ -161,17 +161,17 @@
             return InitializeSwapChainFromScratch();
         }
 
-        // TODO(cwallez@chromium.org): figure out what should happen when surfaces are used by
+        // TODO(crbug.com/dawn/269): figure out what should happen when surfaces are used by
         // multiple backends one after the other. It probably needs to block until the backend
         // and GPU are completely finished with the previous swapchain.
         if (previousSwapChain->GetBackendType() != wgpu::BackendType::D3D12) {
             return DAWN_VALIDATION_ERROR("d3d12::SwapChain cannot switch between APIs");
         }
 
-        // TODO(cwallez@chromium.org): use ToBackend once OldSwapChainBase is removed.
+        // TODO(crbug.com/dawn/269): use ToBackend once OldSwapChainBase is removed.
         SwapChain* previousD3D12SwapChain = static_cast<SwapChain*>(previousSwapChain);
 
-        // TODO(cwallez@chromium.org): Figure out switching an HWND between devices, it might
+        // TODO(crbug.com/dawn/269): Figure out switching an HWND between devices, it might
         // require just losing the reference to the swapchain, but might also need to wait for
         // all previous operations to complete.
         if (GetDevice() != previousSwapChain->GetDevice()) {
diff --git a/src/dawn_native/dawn_platform.h b/src/dawn_native/dawn_platform.h
index 4591c0f..4a0ba09 100644
--- a/src/dawn_native/dawn_platform.h
+++ b/src/dawn_native/dawn_platform.h
@@ -32,7 +32,7 @@
 
     // Add an extra texture usage for textures that will be presented, for use in backends
     // that needs to transition to present usage.
-    // TODO(cwallez@chromium.org): It currently aliases wgpu::TextureUsage::Present, assign it
+    // This currently aliases wgpu::TextureUsage::Present, we would assign it
     // some bit when wgpu::TextureUsage::Present is removed.
     static constexpr wgpu::TextureUsage kPresentTextureUsage = wgpu::TextureUsage::Present;
 }  // namespace dawn_native
diff --git a/src/dawn_native/metal/BackendMTL.mm b/src/dawn_native/metal/BackendMTL.mm
index dcf01f9..6155fe3 100644
--- a/src/dawn_native/metal/BackendMTL.mm
+++ b/src/dawn_native/metal/BackendMTL.mm
@@ -222,7 +222,7 @@
                     [*mDevice supportsFamily:MTLGPUFamilyApple5]) {
                     mSupportedExtensions.EnableExtension(Extension::PipelineStatisticsQuery);
 
-                    // TODO(hao.x.li@intel.com): Not enable timestamp query here becuase it's not
+                    // TODO(crbug.com/dawn/434): Not enable timestamp query here becuase it's not
                     // clear how to convert timestamps to nanoseconds on Metal.
                     // See https://github.com/gpuweb/gpuweb/issues/1325
                 }
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 7496d6a..7414e92 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -1054,8 +1054,6 @@
     uint32_t size = utils::RequiredBytesInCopy(bytesPerRow, rowsPerImage, extent.width,
                                                extent.height, extent.depthOrArrayLayers, dataSize);
 
-    // TODO(enga): We should have the map async alignment in Contants.h. Also, it should change to 8
-    // for Float64Array.
     auto readback = ReserveReadback(Align(size, 4));
 
     // We need to enqueue the copy immediately because by the time we resolve the expectation,
@@ -1176,8 +1174,6 @@
 }
 
 DawnTestBase::ReadbackReservation DawnTestBase::ReserveReadback(uint64_t readbackSize) {
-    // For now create a new MapRead buffer for each readback
-    // TODO(cwallez@chromium.org): eventually make bigger buffers and allocate linearly?
     ReadbackSlot slot;
     slot.bufferSize = readbackSize;
 
diff --git a/src/tests/DawnTest.h b/src/tests/DawnTest.h
index 7b837a5..adb6ebe 100644
--- a/src/tests/DawnTest.h
+++ b/src/tests/DawnTest.h
@@ -84,7 +84,6 @@
 #define EXPECT_PIXEL_RGBA8_BETWEEN(color0, color1, texture, x, y) \
     AddTextureBetweenColorsExpectation(__FILE__, __LINE__, color0, color1, texture, x, y)
 
-// TODO(enga): Migrate other texure expectation helpers to this common one.
 #define EXPECT_TEXTURE_EQ(...) AddTextureExpectation(__FILE__, __LINE__, __VA_ARGS__)
 
 // Should only be used to test validation of function that can't be tested by regular validation
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index 7d78ec4..55bdf90 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -1198,8 +1198,8 @@
     // Timestamp query is not supported on OpenGL
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGL());
 
-    // TODO(hao.x.li@intel.com): Crash occurs if we only call WriteTimestamp in a command encoder
-    // without any copy commands on Metal on AMD GPU. See https://crbug.com/dawn/545.
+    // TODO(crbug.com/dawn/545): Crash occurs if we only call WriteTimestamp in a command encoder
+    // without any copy commands on Metal on AMD GPU.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsAMD());
 
     // Skip if timestamp extension is not supported on device
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 96b704c..99fde59 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -402,8 +402,7 @@
         return expectedData;
     }
 
-    // Right now we only test 2D array textures with BC formats.
-    // TODO(jiawei.shao@intel.com): support 1D/3D textures
+    // Note: BC formats are only valid with 2D (array) textures.
     static wgpu::Extent3D GetVirtualSizeAtLevel(const CopyConfig& config) {
         return {config.textureDescriptor.size.width >> config.viewMipmapLevel,
                 config.textureDescriptor.size.height >> config.viewMipmapLevel,
@@ -431,7 +430,7 @@
 
 // Test copying into the whole BC texture with 2x2 blocks and sampling from it.
 TEST_P(CompressedTextureBCFormatTest, Basic) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -468,7 +467,7 @@
 
 // Test copying into the non-zero layer of a 2D array texture with BC formats works correctly.
 TEST_P(CompressedTextureBCFormatTest, CopyIntoNonZeroArrayLayer) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -493,7 +492,7 @@
 
 // Test copying into a non-zero mipmap level of a texture with BC texture formats.
 TEST_P(CompressedTextureBCFormatTest, CopyBufferIntoNonZeroMipmapLevel) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -532,7 +531,7 @@
 
 // Test texture-to-texture whole-size copies with BC formats.
 TEST_P(CompressedTextureBCFormatTest, CopyWholeTextureSubResourceIntoNonZeroMipmapLevel) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -540,9 +539,8 @@
     // This test uses glTextureView() which is not supported in OpenGL ES.
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGLES());
 
-    // TODO(cwallez@chromium.org): This consistently fails on with the 12th pixel being opaque black
-    // instead of opaque red on Win10 FYI Release (NVIDIA GeForce GTX 1660). See
-    // https://bugs.chromium.org/p/chromium/issues/detail?id=981393
+    // TODO(crbug.com/dawn/816): This consistently fails on with the 12th pixel being opaque black
+    // instead of opaque red on Win10 FYI Release (NVIDIA GeForce GTX 1660).
     DAWN_SUPPRESS_TEST_IF(IsWindows() && IsVulkan() && IsNvidia());
 
     CopyConfig config;
@@ -591,7 +589,7 @@
 TEST_P(CompressedTextureBCFormatTest, CopyIntoSubresourceWithPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -651,7 +649,7 @@
 TEST_P(CompressedTextureBCFormatTest, CopyFromSubresourceWithPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -707,7 +705,7 @@
 TEST_P(CompressedTextureBCFormatTest, MultipleCopiesWithPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -787,7 +785,7 @@
 TEST_P(CompressedTextureBCFormatTest, CopyWithMultipleLayerAndPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -857,7 +855,7 @@
 // Test the special case of the B2T copies on the D3D12 backend that the buffer offset and texture
 // extent exactly fit the RowPitch.
 TEST_P(CompressedTextureBCFormatTest, BufferOffsetAndExtentFitRowPitch) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -886,7 +884,7 @@
 // backend the texelOffset.y will be greater than 0 after calcuting the texelOffset in the function
 // ComputeTexelOffsets().
 TEST_P(CompressedTextureBCFormatTest, BufferOffsetExceedsSlicePitch) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -917,7 +915,7 @@
 // Test the special case of the B2T copies on the D3D12 backend that the buffer offset and texture
 // extent exceed the RowPitch. On D3D12 backend two copies are required for this case.
 TEST_P(CompressedTextureBCFormatTest, CopyWithBufferOffsetAndExtentExceedRowPitch) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -974,7 +972,7 @@
 // copyExtent.depthOrArrayLayers) on Metal backends. As copyExtent.depthOrArrayLayers can only be 1
 // for BC formats, on Metal backend we will use two copies to implement such copy.
 TEST_P(CompressedTextureBCFormatTest, LargeImageHeight) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -995,7 +993,7 @@
 // Test the workaround in the B2T copies when (bufferSize - bufferOffset < bytesPerImage *
 // copyExtent.depthOrArrayLayers) and copyExtent needs to be clamped.
 TEST_P(CompressedTextureBCFormatTest, LargeImageHeightAndClampedCopyExtent) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -1037,7 +1035,7 @@
 // Test copying a whole 2D array texture with array layer count > 1 in one copy command works with
 // BC formats.
 TEST_P(CompressedTextureBCFormatTest, CopyWhole2DArrayTexture) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -1063,7 +1061,7 @@
 
 // Test copying a multiple 2D texture array layers in one copy command works with BC formats.
 TEST_P(CompressedTextureBCFormatTest, CopyMultiple2DArrayLayers) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -1120,7 +1118,6 @@
     queue.Submit(1, &commands);
 }
 
-// TODO(jiawei.shao@intel.com): support BC formats on OpenGL backend
 DAWN_INSTANTIATE_TEST(CompressedTextureBCFormatTest,
                       D3D12Backend(),
                       MetalBackend(),
diff --git a/src/tests/end2end/CopyTests.cpp b/src/tests/end2end/CopyTests.cpp
index d4d8e01..9befdc7 100644
--- a/src/tests/end2end/CopyTests.cpp
+++ b/src/tests/end2end/CopyTests.cpp
@@ -59,7 +59,7 @@
         return textureData;
     }
 
-    // TODO(jiawei.shao@intel.com): remove this function when all the tests in this file support
+    // TODO(crbug.com/dawn/818): remove this function when all the tests in this file support
     // testing arbitrary formats.
     static std::vector<RGBA8> GetExpectedTextureDataRGBA8(
         const utils::TextureDataCopyLayout& layout) {
@@ -132,7 +132,7 @@
                 const BufferSpec& bufferSpec,
                 const wgpu::Extent3D& copySize,
                 wgpu::TextureDimension dimension = wgpu::TextureDimension::e2D) {
-        // TODO(jiawei.shao@intel.com): support testing arbitrary formats
+        // TODO(crbug.com/dawn/818): support testing arbitrary formats
         ASSERT_EQ(kDefaultFormat, textureSpec.format);
 
         const uint32_t bytesPerTexel = utils::GetTexelBlockSizeInBytes(textureSpec.format);
@@ -244,7 +244,7 @@
                 const BufferSpec& bufferSpec,
                 const wgpu::Extent3D& copySize,
                 wgpu::TextureDimension dimension = wgpu::TextureDimension::e2D) {
-        // TODO(jiawei.shao@intel.com): support testing arbitrary formats
+        // TODO(crbug.com/dawn/818): support testing arbitrary formats
         ASSERT_EQ(kDefaultFormat, textureSpec.format);
         // Create a buffer of size `size` and populate it with data
         const uint32_t bytesPerTexel = utils::GetTexelBlockSizeInBytes(textureSpec.format);
@@ -2008,7 +2008,7 @@
 // texture formats. See http://crbug.com/1161355 for more details.
 TEST_P(CopyTests_T2T, CopyFromNonZeroMipLevelWithTexelBlockSizeLessThan4Bytes) {
     // This test can pass on the Windows Intel Vulkan driver version 27.20.100.9168.
-    // TODO(jiawei.shao@intel.com): enable this test on Intel Vulkan drivers after the upgrade of
+    // TODO(crbug.com/dawn/819): enable this test on Intel Vulkan drivers after the upgrade of
     // try bots.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsWindows() && IsIntel());
 
diff --git a/src/tests/end2end/DepthBiasTests.cpp b/src/tests/end2end/DepthBiasTests.cpp
index 2c07dc9..b18f181 100644
--- a/src/tests/end2end/DepthBiasTests.cpp
+++ b/src/tests/end2end/DepthBiasTests.cpp
@@ -312,7 +312,7 @@
                      0.25f * (1 << 25), 0, 0);
 
     // Only the bottom left quad has colors. 0.5 quad > 0.4 clear.
-    // TODO(enrico.galli@intel.com): Switch to depth sampling once feature has been enabled.
+    // TODO(crbug.com/dawn/820): Switch to depth sampling once feature has been enabled.
     std::vector<RGBA8> expected = {
         RGBA8::kRed, RGBA8::kRed,  //
         RGBA8::kRed, RGBA8::kRed,  //
@@ -333,7 +333,7 @@
 
     // Since we cleared with a depth of 0.4 and clamped bias at 0.4, the depth test will fail. 0.25
     // + 0.125 < 0.4 clear.
-    // TODO(enrico.galli@intel.com): Switch to depth sampling once feature has been enabled.
+    // TODO(crbug.com/dawn/820): Switch to depth sampling once feature has been enabled.
     std::vector<RGBA8> zero = {
         RGBA8::kZero, RGBA8::kZero,  //
         RGBA8::kZero, RGBA8::kZero,  //
@@ -348,7 +348,7 @@
     RunDepthBiasTest(wgpu::TextureFormat::Depth24PlusStencil8, 0.4f, QuadAngle::TiltedX, 0, 1, 0);
 
     // Only the top half of the quad has a depth > 0.4 clear
-    // TODO(enrico.galli@intel.com): Switch to depth sampling once feature has been enabled.
+    // TODO(crbug.com/dawn/820): Switch to depth sampling once feature has been enabled.
     std::vector<RGBA8> expected = {
         RGBA8::kRed, RGBA8::kRed,    //
         RGBA8::kZero, RGBA8::kZero,  //
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index a6cd449..bd19ac9 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -215,7 +215,7 @@
         uploadBufferDesc.usage = wgpu::BufferUsage::CopySrc;
         uploadBufferDesc.mappedAtCreation = true;
 
-        // TODO(enga): Use WriteTexture when implemented on OpenGL.
+        // TODO(crbug.com/dawn/822): Use WriteTexture when implemented on OpenGL.
         wgpu::Buffer uploadBuffer = device.CreateBuffer(&uploadBufferDesc);
         uint8_t* dst = static_cast<uint8_t*>(uploadBuffer.GetMappedRange());
         float* src = expected.data();
@@ -269,7 +269,7 @@
         depthStencil->depthCompare = wgpu::CompareFunction::Equal;
         pipelineDescriptor.cTargets[0].format = colorTexDesc.format;
 
-        // TODO(jiawei.shao@intel.com): The Intel Mesa Vulkan driver can't set gl_FragDepth unless
+        // TODO(crbug.com/dawn/821): The Intel Mesa Vulkan driver can't set gl_FragDepth unless
         // depthWriteEnabled == true. This either needs to be fixed in the driver or restricted by
         // the WebGPU API.
         depthStencil->depthWriteEnabled = true;
@@ -353,8 +353,8 @@
 
 // Test copying the non-zero mip, stencil-only aspect into a buffer.
 TEST_P(DepthStencilCopyTests, FromNonZeroMipStencilAspect) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
 
     // TODO(crbug.com/dawn/667): Work around some platforms' inability to read back stencil.
@@ -396,8 +396,8 @@
 
 // Test copying both aspects in a T2T copy, then copying only stencil.
 TEST_P(DepthStencilCopyTests, T2TBothAspectsThenCopyStencil) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     // Maybe has to do with the RenderAttachment usage. Notably, a later test
     // T2TBothAspectsThenCopyNonRenderableStencil does not use RenderAttachment and works correctly.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
@@ -449,8 +449,8 @@
 // Test that part of a non-renderable, non-zero mip stencil aspect can be copied. Notably,
 // this test has different behavior on some platforms than T2TBothAspectsThenCopyStencil.
 TEST_P(DepthStencilCopyTests, T2TBothAspectsThenCopyNonRenderableNonZeroMipStencil) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    /// TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     // Maybe has to do with the non-zero mip. Notably, a previous test
     // T2TBothAspectsThenCopyNonRenderableStencil works correctly.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
@@ -539,8 +539,8 @@
 
 // Test copying both aspects in a T2T copy, then copying depth, then copying stencil
 TEST_P(DepthStencilCopyTests, T2TBothAspectsThenCopyDepthThenStencil) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     // It seems like the depth readback copy mutates the stencil because the previous
     // test T2TBothAspectsThenCopyStencil passes.
     // T2TBothAspectsThenCopyStencilThenDepth which checks stencil first also passes.
@@ -583,8 +583,8 @@
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGL());
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGLES());
 
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
 
     // Create a stencil texture
diff --git a/src/tests/end2end/DepthStencilSamplingTests.cpp b/src/tests/end2end/DepthStencilSamplingTests.cpp
index f877cee..1b7e584 100644
--- a/src/tests/end2end/DepthStencilSamplingTests.cpp
+++ b/src/tests/end2end/DepthStencilSamplingTests.cpp
@@ -192,8 +192,8 @@
                 return textureSampleCompare(tex, samp, vec2<f32>(0.5, 0.5), uniforms.compareRef);
             })");
 
-        // TODO(dawn:367): Cannot use GetBindGroupLayout for comparison samplers without shader
-        // reflection data.
+        // TODO(crbug.com/dawn/367): Cannot use GetBindGroupLayout for comparison samplers without
+        // shader reflection data.
         wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
             device, {{0, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Comparison},
                      {1, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Depth},
@@ -227,7 +227,7 @@
                 samplerResult.value = textureSampleCompare(tex, samp, vec2<f32>(0.5, 0.5), uniforms.compareRef);
             })");
 
-        // TODO(dawn:367): Cannot use GetBindGroupLayout without shader reflection data.
+        // TODO(crbug.com/dawn/367): Cannot use GetBindGroupLayout without shader reflection data.
         wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
             device, {{0, wgpu::ShaderStage::Compute, wgpu::SamplerBindingType::Comparison},
                      {1, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Depth},
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 23507f3..7145da7 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -159,10 +159,10 @@
 }
 
 // Test an error occurs if the descriptor dimension isn't 2D
-// TODO(cwallez@chromium.org): Reenable when 1D or 3D textures are implemented
-TEST_P(IOSurfaceValidationTests, DISABLED_InvalidTextureDimension) {
+// TODO(crbug.com/dawn/814): Test 1D textures when implemented
+TEST_P(IOSurfaceValidationTests, InvalidTextureDimension) {
     DAWN_TEST_UNSUPPORTED_IF(UsesWire());
-    descriptor.dimension = wgpu::TextureDimension::e2D;
+    descriptor.dimension = wgpu::TextureDimension::e3D;
 
     ASSERT_DEVICE_ERROR(wgpu::Texture texture =
                             WrapIOSurface(&descriptor, defaultIOSurface.get(), 0));
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index 8c6a2e6..963e370 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -418,7 +418,7 @@
 
 // Test doing MSAA resolve into multiple resolve targets works correctly.
 TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargets) {
-    // TODO(dawn:462): Investigate backend validation failure.
+    // TODO(dawn:462): Issue in the D3D12 validation layers.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() && IsNvidia() && IsBackendValidationEnabled());
 
     wgpu::TextureView multisampledColorView2 =
@@ -496,7 +496,7 @@
 
 // Test using a layer of a 2D texture as resolve target works correctly.
 TEST_P(MultisampledRenderingTest, ResolveIntoOneMipmapLevelOf2DTexture) {
-    // TODO(dawn:462): Investigate backend validation failure.
+    // TODO(dawn:462): Issue in the D3D12 validation layers.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() && IsBackendValidationEnabled());
 
     constexpr uint32_t kBaseMipLevel = 2;
@@ -534,7 +534,7 @@
 
 // Test using a level or a layer of a 2D array texture as resolve target works correctly.
 TEST_P(MultisampledRenderingTest, ResolveInto2DArrayTexture) {
-    // TODO(dawn:462): Investigate backend validation failure.
+    // TODO(dawn:462): Issue in the D3D12 validation layers.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() && IsBackendValidationEnabled());
 
     wgpu::TextureView multisampledColorView2 =
@@ -762,7 +762,7 @@
     // supported on some platforms.
     DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_sample_variables"));
 
-    // TODO(cwallez@chromium.org): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
+    // TODO(crbug.com/dawn/571): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
     // for the SPIR-V outputted by Tint. Reenable once we use Tint's MSL / HLSL generators.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() || IsMetal());
 
@@ -824,7 +824,7 @@
     // supported on some platforms.
     DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_sample_variables"));
 
-    // TODO(cwallez@chromium.org): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
+    // TODO(crbug.com/dawn/571): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
     // for the SPIR-V outputted by Tint. Reenable once we use Tint's MSL / HLSL generators.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() || IsMetal());
 
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 38bc6fb..c9d42f7 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -98,8 +98,8 @@
 
 // Test OpArrayLength in the compute stage
 TEST_P(OpArrayLengthTest, Compute) {
-    // TODO(cwallez@chromium.org): The computations for length() of unsized buffer is broken on
-    // Nvidia OpenGL. See https://bugs.chromium.org/p/dawn/issues/detail?id=197
+    // TODO(crbug.com/dawn/197): The computations for length() of unsized buffer is broken on
+    // Nvidia OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsNvidia() && (IsOpenGL() || IsOpenGLES()));
 
     // Create a buffer to hold the result sizes and create a bindgroup for it.
@@ -155,8 +155,8 @@
 
 // Test OpArrayLength in the fragment stage
 TEST_P(OpArrayLengthTest, Fragment) {
-    // TODO(cwallez@chromium.org): The computations for length() of unsized buffer is broken on
-    // Nvidia OpenGL. See https://bugs.chromium.org/p/dawn/issues/detail?id=197
+    // TODO(crbug.com/dawn/197): The computations for length() of unsized buffer is broken on
+    // Nvidia OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsNvidia() && (IsOpenGL() || IsOpenGLES()));
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
@@ -206,9 +206,8 @@
 
 // Test OpArrayLength in the vertex stage
 TEST_P(OpArrayLengthTest, Vertex) {
-    // TODO(cwallez@chromium.org): The computations for length() of unsized buffer is broken on
-    // Nvidia OpenGL. Also failing on all GLES (NV, Intel, SwANGLE). See
-    // https://bugs.chromium.org/p/dawn/issues/detail?id=197
+    // TODO(crbug.com/dawn/197): The computations for length() of unsized buffer is broken on
+    // Nvidia OpenGL. Also failing on all GLES (NV, Intel, SwANGLE).
     DAWN_SUPPRESS_TEST_IF(IsNvidia() && IsOpenGL());
     DAWN_SUPPRESS_TEST_IF(IsOpenGLES());
 
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index bd3a6ec..d6c5a75 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -760,8 +760,8 @@
     // the issue is fixed.
     DAWN_SUPPRESS_TEST_IF(IsWindows() && IsVulkan() && IsIntel());
 
-    // TODO(hao.x.li@intel.com): Crash occurs if we only call WriteTimestamp in a command encoder
-    // without any copy commands on Metal on AMD GPU. See https://crbug.com/dawn/545.
+    // TODO(crbug.com/dawn/545): Crash occurs if we only call WriteTimestamp in a command encoder
+    // without any copy commands on Metal on AMD GPU.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsAMD());
 
     constexpr uint32_t kQueryCount = 2;
diff --git a/src/tests/end2end/QueueTests.cpp b/src/tests/end2end/QueueTests.cpp
index b21c397..e151611 100644
--- a/src/tests/end2end/QueueTests.cpp
+++ b/src/tests/end2end/QueueTests.cpp
@@ -112,8 +112,7 @@
     // fails the test. Since GPUs may or may not complete by then, this test must be disabled OR
     // modified to be well-below the timeout limit.
 
-    // TODO(https://bugs.chromium.org/p/dawn/issues/detail?id=228): Re-enable
-    // once the issue with Metal on 10.14.6 is fixed.
+    // TODO(crbug.com/dawn/228): Re-enable once the issue with Metal on 10.14.6 is fixed.
     DAWN_SUPPRESS_TEST_IF(IsMacOS() && IsIntel() && IsMetal());
 
     // The Vulkan Validation Layers' memory barrier validation keeps track of every range written
diff --git a/src/tests/end2end/ShaderFloat16Tests.cpp b/src/tests/end2end/ShaderFloat16Tests.cpp
index d728334..73427bd 100644
--- a/src/tests/end2end/ShaderFloat16Tests.cpp
+++ b/src/tests/end2end/ShaderFloat16Tests.cpp
@@ -50,12 +50,10 @@
     wgpu::Buffer bufferIn = utils::CreateBufferFromData(device, &bufferInData, sizeof(bufferInData),
                                                         wgpu::BufferUsage::Storage);
 
-    // TODO(xinghua.cao@intel.com): the zero for padding is required now. No need to
-    // createBufferFromData once buffer lazy-zero-init is done.
-    uint16_t bufferOutData[] = {Float32ToFloat16(0.0), Float32ToFloat16(0.0)};
-    wgpu::Buffer bufferOut =
-        utils::CreateBufferFromData(device, &bufferOutData, sizeof(bufferOutData),
-                                    wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
+    wgpu::BufferDescriptor bufferDesc;
+    bufferDesc.size = 2 * sizeof(uint16_t);
+    bufferDesc.usage = wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc;
+    wgpu::Buffer bufferOut = device.CreateBuffer(&bufferDesc);
 
     // SPIR-V ASM produced by glslang for the following fragment shader:
     //
@@ -157,7 +155,7 @@
                                                      {
                                                          {0, uniformBuffer, 0, sizeof(uniformData)},
                                                          {1, bufferIn, 0, sizeof(bufferInData)},
-                                                         {2, bufferOut, 0, sizeof(bufferOutData)},
+                                                         {2, bufferOut},
                                                      });
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
diff --git a/src/tests/end2end/StorageTextureTests.cpp b/src/tests/end2end/StorageTextureTests.cpp
index bdc0fbf..0ab4a0a 100644
--- a/src/tests/end2end/StorageTextureTests.cpp
+++ b/src/tests/end2end/StorageTextureTests.cpp
@@ -552,8 +552,6 @@
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
 
-        // TODO(jiawei.shao@intel.com): remove the render attachment when Dawn supports beginning a
-        // render pass with no attachments.
         wgpu::Texture dummyOutputTexture =
             CreateTexture(kRenderAttachmentFormat,
                           wgpu::TextureUsage::RenderAttachment | wgpu::TextureUsage::CopySrc, 1, 1);
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index dd0d5f6..57d125c 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -786,9 +786,6 @@
     // This format is not renderable.
 }
 
-// TODO(cwallez@chromium.org): Add tests for depth-stencil formats when we know if they are copyable
-// in WebGPU.
-
 DAWN_INSTANTIATE_TEST(TextureFormatTest,
                       D3D12Backend(),
                       MetalBackend(),
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index f8ca3cb..3f2e8ee 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -586,7 +586,8 @@
 
 // Test that clear state is tracked independently for depth/stencil textures.
 TEST_P(TextureZeroInitTest, IndependentDepthStencilLoadAfterDiscard) {
-    // TODO(enga): Figure out why this fails on Metal Intel.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
 
     wgpu::TextureDescriptor depthStencilDescriptor = CreateTextureDescriptor(
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index 18fe997..68f39ec 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -49,6 +49,9 @@
     void SetUp() override {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/dawn/259): Failing because of a SPIRV-Cross issue.
+        DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
+
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
     }
 
@@ -398,10 +401,6 @@
 };
 
 TEST_P(VertexFormatTest, Uint8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {
         std::numeric_limits<uint8_t>::max(),
         0,
@@ -425,10 +424,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {
         std::numeric_limits<uint8_t>::max(),
         0,
@@ -448,10 +443,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {
         std::numeric_limits<int8_t>::max(),
         0,
@@ -475,10 +466,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {
         std::numeric_limits<int8_t>::max(),
         0,
@@ -498,10 +485,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {
         std::numeric_limits<uint8_t>::max(),
         std::numeric_limits<uint8_t>::min(),
@@ -528,10 +511,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {std::numeric_limits<uint8_t>::max(),
                                        std::numeric_limits<uint8_t>::min(),
                                        0,
@@ -549,10 +528,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {
         std::numeric_limits<int8_t>::max(),
         std::numeric_limits<int8_t>::min(),
@@ -581,10 +556,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {std::numeric_limits<int8_t>::max(),
                                       std::numeric_limits<int8_t>::min(),
                                       0,
@@ -602,10 +573,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {std::numeric_limits<uint16_t>::max(),
                                         0,
                                         std::numeric_limits<uint16_t>::min(),
@@ -617,10 +584,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {
         std::numeric_limits<uint16_t>::max(),
         std::numeric_limits<uint8_t>::max(),
@@ -640,10 +603,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {std::numeric_limits<int16_t>::max(),
                                        0,
                                        std::numeric_limits<int16_t>::min(),
@@ -655,10 +614,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {
         std::numeric_limits<int16_t>::max(),
         0,
@@ -678,10 +633,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {std::numeric_limits<uint16_t>::max(),
                                         std::numeric_limits<uint16_t>::min(),
                                         std::numeric_limits<uint16_t>::max() / 2u,
@@ -693,10 +644,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {std::numeric_limits<uint16_t>::max(),
                                         std::numeric_limits<uint16_t>::min(),
                                         0,
@@ -714,10 +661,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {std::numeric_limits<int16_t>::max(),
                                        std::numeric_limits<int16_t>::min(),
                                        std::numeric_limits<int16_t>::max() / 2,
@@ -729,10 +672,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {std::numeric_limits<int16_t>::max(),
                                        std::numeric_limits<int16_t>::min(),
                                        0,
@@ -750,10 +689,6 @@
 }
 
 TEST_P(VertexFormatTest, Float16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -764,10 +699,6 @@
 }
 
 TEST_P(VertexFormatTest, Float16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -778,10 +709,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<float> vertexData = {1.3f, +0.0f, -0.0f};
 
     DoVertexFormatTest(wgpu::VertexFormat::Float32, vertexData, vertexData);
@@ -792,10 +719,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -805,10 +728,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32x3) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -820,10 +739,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<float> vertexData = {
         19.2f, -19.3f, +0.0f, 1.0f, -0.0f, 1.0f, 1.3f, -1.0f, 13.078f, 21.1965f, -1.1f, -1.2f,
     };
@@ -832,10 +747,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(),
                                         std::numeric_limits<uint16_t>::max(),
                                         std::numeric_limits<uint8_t>::max()};
@@ -844,10 +755,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(), 32,
                                         std::numeric_limits<uint16_t>::max(), 64,
                                         std::numeric_limits<uint8_t>::max(),  128};
@@ -856,10 +763,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32x3) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(), 32,   64,
                                         std::numeric_limits<uint16_t>::max(), 164,  128,
                                         std::numeric_limits<uint8_t>::max(),  1283, 256};
@@ -868,10 +771,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(), 32,   64,  5460,
                                         std::numeric_limits<uint16_t>::max(), 164,  128, 0,
                                         std::numeric_limits<uint8_t>::max(),  1283, 256, 4567};
@@ -880,10 +779,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {std::numeric_limits<int32_t>::max(),
                                        std::numeric_limits<int32_t>::min(),
                                        std::numeric_limits<int8_t>::max()};
@@ -892,10 +787,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {
         std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::min(),
         std::numeric_limits<int16_t>::max(), std::numeric_limits<int16_t>::min(),
@@ -905,10 +796,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32x3) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {
         std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::min(), 64,
         std::numeric_limits<int16_t>::max(), std::numeric_limits<int16_t>::min(), 128,
@@ -918,10 +805,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {
         std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::min(), 64,   -5460,
         std::numeric_limits<int16_t>::max(), std::numeric_limits<int16_t>::min(), -128, 0,