ID3D12GraphicsCommandList::CopyTiles 方法 (d3d12.h)
將磚從緩衝區複製到磚資源,反之亦然。
語法
void CopyTiles(
[in] ID3D12Resource *pTiledResource,
[in] const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
[in] const D3D12_TILE_REGION_SIZE *pTileRegionSize,
[in] ID3D12Resource *pBuffer,
UINT64 BufferStartOffsetInBytes,
D3D12_TILE_COPY_FLAGS Flags
);
參數
[in] pTiledResource
類型: ID3D12Resource*
圖格資源的指標。
[in] pTileRegionStartCoordinate
類型: const D3D12_TILED_RESOURCE_COORDINATE*
描述磚資源起始座標之 D3D12_TILED_RESOURCE_COORDINATE 結構的指標。
[in] pTileRegionSize
類型: const D3D12_TILE_REGION_SIZE*
描述磚區域大小的 D3D12_TILE_REGION_SIZE 結構的指標。
[in] pBuffer
類型: ID3D12Resource*
ID3D12Resource 的指標,表示預設、動態或暫存緩衝區。
BufferStartOffsetInBytes
類型: UINT64
在 pBuffer 的緩衝區中,以位元組為單位的位移,以啟動作業。
Flags
使用位 OR 運算結合 的D3D12_TILE_COPY_FLAGS型別值組合,並識別如何複製磚。
傳回值
無
備註
CopyTiles 會將寫入作業卸除至未對應的區域,並處理未對應的區域讀取作業 (,但Tier_1磚資源除外,其中讀取和寫入未對應的區域無效 - 請參閱 D3D12_TILED_RESOURCES_TIER) 。
如果複製作業牽涉到寫入相同的記憶體位置多次,因為目的地資源中的多個位置會對應至相同的磚記憶體,則對多對應磚產生的寫入作業不具決定性且不可重複;也就是說,存取磚記憶體會依硬體執行複製作業的順序發生。
複製作業中涉及的圖格不能包含包含已封裝Mipmap或複製作業結果的磚未定義。 若要將數據傳輸到硬體套件到構成封裝Mips的一或多個磚,您必須使用標準 (,也就是非磚特定) 複製 API,例如 CopyTextureRegion。
CopyTiles 會以與標準複製方法稍微不同的模式複製數據。
複製作業之非磚緩衝資源端的記憶體配置在64 KB圖格內的記憶體中是線性的,其中硬體和驅動程式會在每一磚上適當地傳輸至並排顯示資源時,依適當方式清除每個磚的記憶體配置。 針對多重取樣反鋸齒 (MSAA) 表面,硬體和驅動程式會在移至下一個圖元之前,以取樣索引順序周遊每個像素的樣本。 對於在右側部分填滿的磚 (,如果磚已滿,其寬度不是圖元寬度的倍數,) ,則向下移動數據列的間距和步調,是圖格已滿時會容納在磚上之圖元的完整大小。 因此,記憶體中每個像素數據列之間可能會有一個間距。 小於磚的 Mipmap 不會在線性配置中封裝在一起,這似乎浪費記憶體空間,但如前所述,您無法使用 CopyTiles 複製到硬體套件一起的 Mipmap。 您可以只使用一般複製 API,例如 CopyTextureRegion,個別複製小型 Mipmap。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | d3d12.h |
程式庫 | D3d12.lib |
Dll | D3d12.dll |