[d3d11] Spanify Texture Write methods

- Spanify Texture::Write, WriteInternal, and WriteDepthStencilInternal
  to accept Span<const std::byte>.
- Remove DAWN_UNSAFE_TODO macros across QueueD3D11 and TextureD3D11.

Bug: chromium:549088024
Change-Id: I7acbffffddedd9adaf0afa72952259bd1b056c1b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/337995
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/dawn/native/d3d11/CommandBufferD3D11.cpp b/src/dawn/native/d3d11/CommandBufferD3D11.cpp
index 6139e99..c8dd9c4 100644
--- a/src/dawn/native/d3d11/CommandBufferD3D11.cpp
+++ b/src/dawn/native/d3d11/CommandBufferD3D11.cpp
@@ -442,8 +442,7 @@
                     scopedMap.GetMappedData().subspan(checked_cast<size_t>(bufferOffset));
                 uint64_t bytesPerRow = blockInfo.ToBytes(src.blocksPerRow);
                 DAWN_TRY(texture->Write(commandContext, subresources, dst.origin.ToOrigin3D(),
-                                        copy->copySize.ToExtent3D(),
-                                        reinterpret_cast<uint8_t*>(data.data()),
+                                        copy->copySize.ToExtent3D(), data,
                                         dchecked_cast<uint32_t>(bytesPerRow),
                                         dchecked_cast<uint32_t>(src.rowsPerImage)));
                 break;
diff --git a/src/dawn/native/d3d11/QueueD3D11.cpp b/src/dawn/native/d3d11/QueueD3D11.cpp
index 583bc1b..59fe785 100644
--- a/src/dawn/native/d3d11/QueueD3D11.cpp
+++ b/src/dawn/native/d3d11/QueueD3D11.cpp
@@ -449,10 +449,9 @@
 
     Texture* texture = ToBackend(destination.texture);
     DAWN_TRY(texture->SynchronizeTextureBeforeUse(&commandContext));
-    return texture->Write(
-        &commandContext, subresources, destination.origin, writeSizePixel,
-        DAWN_UNSAFE_TODO(reinterpret_cast<const uint8_t*>(data.data()) + dataLayout.offset),
-        dataLayout.bytesPerRow, dataLayout.rowsPerImage);
+    return texture->Write(&commandContext, subresources, destination.origin, writeSizePixel,
+                          data.subspan(static_cast<size_t>(dataLayout.offset)),
+                          dataLayout.bytesPerRow, dataLayout.rowsPerImage);
 }
 
 bool Queue::HasPendingCommands() const {
diff --git a/src/dawn/native/d3d11/TextureD3D11.cpp b/src/dawn/native/d3d11/TextureD3D11.cpp
index e815d2a..ce36c42 100644
--- a/src/dawn/native/d3d11/TextureD3D11.cpp
+++ b/src/dawn/native/d3d11/TextureD3D11.cpp
@@ -584,7 +584,8 @@
                 bytesPerRow = blockInfo.byteSize * writeSize.width;
                 rowsPerImage = writeSize.height;
                 DAWN_TRY(WriteInternal(commandContext, writeRange, {0, 0, 0}, writeSize,
-                                       clearData.data(), bytesPerRow, rowsPerImage));
+                                       SpanAsBytes(Span<const uint8_t>(clearData)), bytesPerRow,
+                                       rowsPerImage));
             }
         }
     }
@@ -702,7 +703,7 @@
                           const SubresourceRange& subresources,
                           const Origin3D& origin,
                           const Extent3D& size,
-                          const uint8_t* data,
+                          Span<const std::byte> data,
                           uint32_t bytesPerRow,
                           uint32_t rowsPerImage) {
     if (IsCompleteSubresourceCopiedTo(this, size, subresources.baseMipLevel,
@@ -724,7 +725,7 @@
                                   const SubresourceRange& subresources,
                                   const Origin3D& origin,
                                   const Extent3D& size,
-                                  const uint8_t* data,
+                                  Span<const std::byte> data,
                                   uint32_t bytesPerRow,
                                   uint32_t rowsPerImage) {
     DAWN_ASSERT(size.width != 0 && size.height != 0 && size.depthOrArrayLayers != 0);
@@ -756,7 +757,7 @@
         uint32_t subresource =
             GetSubresourceIndex(subresources.baseMipLevel, 0, D3D11Aspect(subresources.aspects));
         UINT copyFlag = writeCompleteTexture ? D3D11_COPY_DISCARD : 0;
-        commandContext->UpdateSubresource1(GetD3D11Resource(), subresource, &dstBox, data,
+        commandContext->UpdateSubresource1(GetD3D11Resource(), subresource, &dstBox, data.data(),
                                            bytesPerRow, bytesPerImage, copyFlag);
     } else {
         dstBox.front = 0;
@@ -767,9 +768,9 @@
                                     D3D11Aspect(subresources.aspects));
             D3D11_BOX* pDstBox = GetFormat().HasDepthOrStencil() ? nullptr : &dstBox;
             UINT copyFlag = (writeCompleteTexture && layer == 0) ? D3D11_COPY_DISCARD : 0;
-            commandContext->UpdateSubresource1(GetD3D11Resource(), subresource, pDstBox, data,
-                                               bytesPerRow, 0, copyFlag);
-            DAWN_UNSAFE_TODO(data += bytesPerImage);
+            Span<const std::byte> layerData = data.subspan(layer * bytesPerImage);
+            commandContext->UpdateSubresource1(GetD3D11Resource(), subresource, pDstBox,
+                                               layerData.data(), bytesPerRow, 0, copyFlag);
         }
     }
 
@@ -780,7 +781,7 @@
                                               const SubresourceRange& subresources,
                                               const Origin3D& origin,
                                               const Extent3D& size,
-                                              const uint8_t* data,
+                                              Span<const std::byte> data,
                                               uint32_t bytesPerRow,
                                               uint32_t rowsPerImage) {
     TextureDescriptor desc = {};
@@ -828,15 +829,17 @@
 
     // Map and write to the staging texture.
     D3D11_MAPPED_SUBRESOURCE mappedResource;
-    const uint8_t* pSrcData = data;
+    const std::byte* pSrcData = data.data();
     for (uint32_t layer = 0; layer < size.depthOrArrayLayers; ++layer) {
         DAWN_TRY(CheckHRESULT(commandContext->Map(stagingTexture->GetD3D11Resource(), layer,
                                                   D3D11_MAP_READ, 0, &mappedResource),
                               "D3D11 map staging texture"));
-        uint8_t* pDstData = static_cast<uint8_t*>(mappedResource.pData);
+        // TODO(crbug.com/549088024): To spanify, write a helper that computes the correct span size
+        // from the resource size and the map's RowPitch/DepthPitch.
+        std::byte* pDstData = static_cast<std::byte*>(mappedResource.pData);
         for (uint32_t y = 0; y < size.height; ++y) {
-            const uint8_t* pSrcRow = pSrcData;
-            uint8_t* pDstRow = pDstData;
+            const std::byte* pSrcRow = pSrcData;
+            std::byte* pDstRow = pDstData;
             DAWN_UNSAFE_TODO(pDstRow += aspectLayout.componentOffset);
             for (uint32_t x = 0; x < size.width; ++x) {
                 DAWN_UNSAFE_TODO(std::memcpy(pDstRow, pSrcRow, aspectLayout.componentSize));
@@ -1152,9 +1155,9 @@
         DAWN_TRY(Read(commandContext, singleRange, {0, 0, 0}, size, bytesPerRow, rowsPerImage,
                       callback));
 
-        DAWN_TRY(mTextureForStencilSampling->WriteInternal(commandContext, singleRange, {0, 0, 0},
-                                                           size, stagingData.data(), bytesPerRow,
-                                                           rowsPerImage));
+        DAWN_TRY(mTextureForStencilSampling->WriteInternal(
+            commandContext, singleRange, {0, 0, 0}, size,
+            SpanAsBytes(Span<const uint8_t>(stagingData)), bytesPerRow, rowsPerImage));
     }
 
     return {};
diff --git a/src/dawn/native/d3d11/TextureD3D11.h b/src/dawn/native/d3d11/TextureD3D11.h
index d43964e..4c8e0f3 100644
--- a/src/dawn/native/d3d11/TextureD3D11.h
+++ b/src/dawn/native/d3d11/TextureD3D11.h
@@ -87,7 +87,7 @@
                      const SubresourceRange& subresources,
                      const Origin3D& origin,
                      const Extent3D& size,
-                     const uint8_t* data,
+                     Span<const std::byte> data,
                      uint32_t bytesPerRow,
                      uint32_t rowsPerImage);
     using ReadCallback = std::function<MaybeError(const uint8_t* data, size_t offset, size_t size)>;
@@ -179,7 +179,7 @@
                              const SubresourceRange& subresources,
                              const Origin3D& origin,
                              const Extent3D& size,
-                             const uint8_t* data,
+                             Span<const std::byte> data,
                              uint32_t bytesPerRow,
                              uint32_t rowsPerImage);
 
@@ -188,7 +188,7 @@
                                          const SubresourceRange& subresources,
                                          const Origin3D& origin,
                                          const Extent3D& size,
-                                         const uint8_t* data,
+                                         Span<const std::byte> data,
                                          uint32_t bytesPerRow,
                                          uint32_t rowsPerImage);