diff --git a/spec/index.bs b/spec/index.bs
index 29ae02937c..02c82061de 100644
--- a/spec/index.bs
+++ b/spec/index.bs
@@ -5718,10 +5718,17 @@ write into a [=texture=] from the {{GPUQueue}}.
- For {{GPUTextureDimension/2d}} textures, data is copied between one or multiple contiguous [=images=] and [=array layers=].
- For {{GPUTextureDimension/3d}} textures, data is copied between one or multiple contiguous [=images=] and depth [=slices=].
+Issue: Define images more precisely. In particular, define them as being comprised of [=texel blocks=].
+
Operations that copy between byte arrays and textures always work with rows of [=texel blocks=],
which we'll call block rows. It's not possible to update only a part of a [=texel block=].
-Issue: Define images more precisely. In particular, define them as being comprised of [=texel blocks=].
+[=Texel blocks=] are tightly packed within each [=block row=] in the linear memory layout of an
+image copy, with each subsequent texel block immediately following the previous texel block,
+with no padding.
+This includes [[#depth-formats|copies to/from specific aspects of depth/stencil textures]]:
+stencil values are tightly packed in an array of bytes;
+depth values are tightly packed in an array of the appropriate type ("depth16unorm" or "depth32float").
Issue: Define the exact copy semantics, by reference to common algorithms shared by the copy methods.
@@ -5743,7 +5750,7 @@ Issue: Define the exact copy semantics, by reference to common algorithms shared
### GPUImageCopyBuffer ### {#gpu-image-copy-buffer}
-In an image copy operation, {{GPUImageCopyBuffer}} defines a {{GPUBuffer}} and, together with
+In an [=image copy=] operation, {{GPUImageCopyBuffer}} defines a {{GPUBuffer}} and, together with
the `copySize`, how image data is laid out in the buffer's memory (see {{GPUImageDataLayout}}).