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狀態, 才能透過 WriteToSubresourceReadFromSubresource 進行 CPU 存取,才能合法;但緩衝區不會。

為了有效率,請確定方塊中範圍的界限和對齊方式 ( 64 / [每圖元位元組] ) 圖元。 垂直界限和對齊方式應該是 2 個數據列,但使用每圖元 1 位元組格式時除外,在此情況下建議使用 4 個數據列。 每個呼叫的單一深度配量會有效率地處理。 建議使用,但不需要提供對齊 128 位元組的指標和步幅。

寫入至子Mipmap層級時,建議使用比上述更大的寬度和高度。 這是因為小型Mipmap層級實際上可能會儲存在較大的記憶體區塊內,而不透明的位移量可能會干擾快取行的對齊。

WriteToSubresourceReadFromSubresource 為 UMA 配接器啟用近乎零複製優化,但可能會禁止影響離散/NUMA 配接器的效率,因為紋理數據不能位於本機視訊記憶體中。 一般應用程式應該會繼續使用離散易記的上傳技術,除非它們辨識適配卡架構是UMA。 如需上傳的詳細資訊,請參閱 CopyTextureRegion,如需 UMA 的詳細資訊,請參閱 D3D12_FEATURE_DATA_ARCHITECTURE

在UMA系統上,此例程可用來將透過迴圈優化稱為 「迴圈磚」的記憶體複製成本降到最低。 藉由將上傳分解成可配合 CPU 快取的 Chuck,CPU 與主要記憶體之間的有效頻寬會更緊密地達到理論上的最大值。

規格需求

需求
目標平台 Windows
標頭 d3d12.h
程式庫 D3d12.lib
Dll D3d12.dll

另請參閱

ID3D12Resource

子資源