> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CopyTiles

> 在缓冲区和平铺资源之间双向复制平铺。(ID3D12GraphicsCommandList.CopyTiles)

在缓冲区和平铺资源之间双向复制平铺。

## 语法

```cpp theme={null}
void CopyTiles(
    ID3D12Resource  pTiledResource,
    const D3D12_TILED_RESOURCE_COORDINATE  pTileRegionStartCoordinate,
    const D3D12_TILE_REGION_SIZE  pTileRegionSize,
    ID3D12Resource  pBuffer,
    UINT64 BufferStartOffsetInBytes,
    D3D12_TILE_COPY_FLAGS Flags
)
```

### 参数

*pTiledResource \[in]*\
类型：ID3D12Resource \*

指向平铺资源的指针。

*pTileRegionStartCoordinate \[in]*\
类型：const D3D12\_TILED\_RESOURCE\_COORDINATE \*

指向
[D3D12\_TILED\_RESOURCE\_COORDINATE](/reference/graphics/d3d12/structs/d3d12_tiled_resource_coordinate_public) 结构的指针，该结构描述平铺资源的起始坐标。

*pTileRegionSize \[in]*\
类型：const D3D12\_TILE\_REGION\_SIZE \*

指向 [D3D12\_TILE\_REGION\_SIZE](/reference/graphics/d3d12/structs/d3d12_tile_region_size_public) 结构的指针，该结构描述平铺区域的大小。

*pBuffer \[in]*\
类型：ID3D12Resource \*

指向 [ID3D12Resource](/reference/graphics/d3d12_xs/interfaces/ID3D12Resource/id3d12resource_xs) 的指针，表示默认、动态或暂存缓冲区。

*BufferStartOffsetInBytes*\
类型：UINT64

<i>pBuffer</i> 处缓冲区中开始操作的字节偏移量。

*Flags*\
类型：D3D12\_TILE\_COPY\_FLAGS

通过按位或操作组合的 [D3D12\_TILE\_COPY\_FLAGS](/reference/graphics/d3d12/enums/d3d12_tile_copy_flags_public) 类型值的组合，用于标识如何复制平铺。

### 返回值

类型：void

无。

## 备注

**CopyTiles** 会舍弃对未映射区域的写入操作，并处理从未映射区域的读取操作（Tier\_1 平铺资源除外，在此级别中读取和写入未映射区域是无效的——请参阅 [D3D12\_TILED\_RESOURCES\_TIER](/reference/graphics/d3d12/enums/d3d12_tiled_resources_tier_public)）。

如果由于目标资源中的多个位置映射到相同的平铺内存而导致复制操作涉及多次写入同一内存位置，则对多映射平铺的写入操作是不确定和不可重复的；也就是说，对平铺内存的访问将按硬件恰好执行复制操作的顺序进行。

复制操作涉及的平铺不能包括包含压缩 mipmap 的平铺，否则复制操作的结果未定义。要在硬件打包成一个或多个平铺（构成压缩 mip）的 mipmap 之间传输数据，必须使用标准（即非平铺特定的）复制 API，如 [CopyTextureRegion](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copytextureregion_public)。

**CopyTiles** 复制数据的模式与标准复制方法略有不同。

在复制操作的非平铺缓冲区资源一侧，平铺的内存布局在 64 KB 平铺内是线性的，硬件和驱动程序在传输到平铺资源或从平铺资源传出时根据需要对每个平铺进行混排和解混排。对于多重采样抗锯齿 (MSAA) 表面，硬件和驱动程序在移动到下一个像素之前，按样本索引顺序遍历每个像素的样本。对于右侧部分填充的平铺（对于宽度不是像素平铺宽度倍数的表面），移动到下一行的间距和步幅是假设平铺已满时可跨越平铺的像素数的完整大小（以字节为单位）。因此，内存中每行像素之间可能存在间隙。小于平铺的 mipmap 不会在线性布局中打包在一起，这看起来可能是内存空间的浪费，但如前所述，无法使用 **CopyTiles** 复制到硬件打包的 mipmap。你可以使用通用复制 API，如 [CopyTextureRegion](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copytextureregion_public)，单独复制小 mipmap。

## 要求

**头文件：** d3d12\_xs.h 或 d3d12\_x.h\
**库：** d3d12\_xs.lib 或 d3d12\_x.lib\
**支持的平台**：XBOX Series 主机和 XBOX One 系列

## 另请参阅

[ID3D12GraphicsCommandList](/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList/id3d12graphicscommandlist_xs)

[平铺资源](https://learn.microsoft.com/en-us/windows/desktop/direct3d11/tiled-resources)
