> ## 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](/zh-TW/reference/graphics/d3d12/structs/d3d12_tiled_resource_coordinate_public)
結構的指標，描述並排資源的起始座標。

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

[D3D12\_TILE\_REGION\_SIZE](/zh-TW/reference/graphics/d3d12/structs/d3d12_tile_region_size_public) 結構的指標，描述並排區域的大小。

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

[ID3D12Resource](/zh-TW/reference/graphics/d3d12_xs/interfaces/ID3D12Resource/id3d12resource_xs) 的指標，代表預設、動態或暫存緩衝區。

*BufferStartOffsetInBytes*\
類型：UINT64

<i>pBuffer</i> 處緩衝區中開始作業的位移 (以位元組為單位)。

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

[D3D12\_TILE\_COPY\_FLAGS](/zh-TW/reference/graphics/d3d12/enums/d3d12_tile_copy_flags_public) 類型值的組合，以位元 OR 運算結合，用來識別如何複製圖格。

### 傳回值

類型：void

無。

## 備註

**CopyTiles** 會捨棄對未對應區域的寫入作業，
並處理從未對應區域的讀取作業
(Tier\_1 並排資源除外，
在其上讀取和寫入未對應區域是無效的，請參閱 [D3D12\_TILED\_RESOURCES\_TIER](/zh-TW/reference/graphics/d3d12/enums/d3d12_tiled_resources_tier_public))。

如果因為目的地資源中的多個位置對應到相同的圖格記憶體，
而導致複製作業多次寫入相同的記憶體位置，則對多重對應圖格產生的寫入作業
是非決定性且無法重複的；也就是說，對圖格記憶體的存取會依照硬體
執行複製作業時的任意順序進行。

複製作業所涉及的圖格不能包含含有已封裝 Mipmap 的圖格，否則複製
作業的結果會是未定義的。若要在硬體封裝至構成已封裝 Mip 之一或多個圖格的 Mipmap 之間傳輸資料，您必須
使用標準 (也就是非圖格專用) 的複製 API，
例如 [CopyTextureRegion](/zh-TW/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copytextureregion_public)。

**CopyTiles** 複製資料的模式與標準複製方法略有不同。

在複製作業的非並排緩衝區資源端，圖格的記憶體配置在 64 KB 圖格內是線性的，硬體和驅動程式在與並排資源之間傳輸時，會視需要針對每個圖格進行重排 (swizzle) 和反重排 (de-swizzle)。對於多重取樣消除鋸齒 (MSAA) 表面，硬體和驅動程式會先依照取樣索引順序周遊每個像素的取樣，再移至下一個像素。對於右側部分填滿的圖格 (適用於寬度不是圖格像素寬度倍數的表面)，向下移動一列的間距和步幅，是圖格填滿時可橫跨圖格之像素數目的完整位元組大小。因此，記憶體中每一列像素之間可能會有間隙。小於一個圖格的 Mipmap 在線性配置中不會封裝在一起，這看似浪費記憶體空間，但如前所述，您無法使用 **CopyTiles** 複製到硬體封裝在一起的 Mipmap。您可以直接使用一般的複製 API (例如 [CopyTextureRegion](/zh-TW/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](/zh-TW/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList/id3d12graphicscommandlist_xs)

[並排資源](https://learn.microsoft.com/en-us/windows/desktop/direct3d11/tiled-resources)


## Related topics

- [D3D12_TILE_COPY_FLAGS](/zh-TW/reference/graphics/d3d12/enums/d3d12_tile_copy_flags_public.md)
- [D3D12_TILE_REGION_SIZE](/zh-TW/reference/graphics/d3d12/structs/d3d12_tile_region_size_public.md)
- [D3D12_TILED_RESOURCE_COORDINATE](/zh-TW/reference/graphics/d3d12/structs/d3d12_tiled_resource_coordinate_public.md)
- [CopyTileMappings](/zh-TW/reference/graphics/d3d12/interfaces/id3d12commandqueue/methods/id3d12commandqueue_copytilemappings_public.md)
- [D3D12_TILE_MAPPING_FLAGS](/zh-TW/reference/graphics/d3d12/enums/d3d12_tile_mapping_flags_public.md)
