ID3D12Resource::WriteToSubresource 方法 (d3d12.h)
使用 CPU 將資料複製到子資源,讓 CPU 可以修改大部分具有未定義版面配置的紋理內容。
語法
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
參數
DstSubresource
類型: UINT
指定子資源的索引。
[in, optional] pDstBox
類型: const D3D12_BOX*
方塊的指標,定義要複製資源數據的目標子資源部分。 如果為 NULL,則數據會寫入目的地子資源,且沒有位移。 來源的維度必須符合目的地 (請參閱 D3D12_BOX) 。
空方塊會產生無作業。 如果頂端值大於或等於底部值,或左值大於或等於右值,或前端值大於或等於後端值,則方塊是空的。 當方塊是空的時,這個方法不會執行任何作業。
[in] pSrcData
類型: const void*
記憶體中源數據的指標。
SrcRowPitch
類型: UINT
從一個源數據列到下一個數據列的距離。
SrcDepthPitch
類型: UINT
從源數據的一個深度配量到下一個深度配量之間的距離。
傳回值
類型: HRESULT
這個方法會傳回其中一個 Direct3D 12 傳回碼。
備註
資源應該先使用 Map 進行對應。 紋理必須處於 D3D12_RESOURCE_STATE_COMMON狀態, 才能透過 WriteToSubresource 和 ReadFromSubresource 進行 CPU 存取,才能合法;但緩衝區不會。
為了有效率,請確定方塊中範圍的界限和對齊方式 ( 64 / [每圖元位元組] ) 圖元。 垂直界限和對齊方式應該是 2 個數據列,但使用每圖元 1 位元組格式時除外,在此情況下建議使用 4 個數據列。 每個呼叫的單一深度配量會有效率地處理。 建議使用,但不需要提供對齊 128 位元組的指標和步幅。
寫入至子Mipmap層級時,建議使用比上述更大的寬度和高度。 這是因為小型Mipmap層級實際上可能會儲存在較大的記憶體區塊內,而不透明的位移量可能會干擾快取行的對齊。
WriteToSubresource 和 ReadFromSubresource 為 UMA 配接器啟用近乎零複製優化,但可能會禁止影響離散/NUMA 配接器的效率,因為紋理數據不能位於本機視訊記憶體中。 一般應用程式應該會繼續使用離散易記的上傳技術,除非它們辨識適配卡架構是UMA。 如需上傳的詳細資訊,請參閱 CopyTextureRegion,如需 UMA 的詳細資訊,請參閱 D3D12_FEATURE_DATA_ARCHITECTURE。
在UMA系統上,此例程可用來將透過迴圈優化稱為 「迴圈磚」的記憶體複製成本降到最低。 藉由將上傳分解成可配合 CPU 快取的 Chuck,CPU 與主要記憶體之間的有效頻寬會更緊密地達到理論上的最大值。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | d3d12.h |
程式庫 | D3d12.lib |
Dll | D3d12.dll |