共用方式為


ID3D12Device1::CreatePipelineLibrary 方法 (d3d12.h)

建立快取的管線連結庫。 對於預期要一起共用數據的管線狀態物件,在串行化數據之前,將它們分組到連結庫,表示因為元數據而負擔較少,以及避免將重複或重複的數據寫入磁碟的機會。

您可以使用 D3D12_FEATURE_SHADER_CACHED3D12_FEATURE_DATA_SHADER_CACHE,使用 ID3D12Device::CheckFeatureSupport查詢 ID3D12PipelineLibrary 支援。 如果 旗標D3D12_FEATURE_DATA_SHADER_CACHE 成員包含旗標 D3D12_SHADER_CACHE_SUPPORT_LIBRARY,則支援 ID3D12PipelineLibrary 介面。 如果沒有,呼叫此函式時,一律會傳回 DXGI_ERROR_NOT_SUPPORTED

語法

HRESULT CreatePipelineLibrary(
  const void *pLibraryBlob,
  SIZE_T     BlobLength,
  REFIID     riid,
  void       **ppPipelineLibrary
);

參數

pLibraryBlob

類型:[in] const void*

如果輸入連結庫 Blob 是空的,則連結庫的初始內容是空的。 如果輸入連結庫 Blob 不是空的,則會驗證其完整性、剖析,並儲存指標。 提供做為這個方法輸入的指標,在傳回之物件的存留期內必須保持有效。 基於效率考慮,數據不會複製。

BlobLength

類型:SIZE_T

指定以位元組為單位 pLibraryBlob 長度。

riid

類型:REFIID

ID3D12PipelineLibrary 物件指定唯一的 REFIID。 一般而言,使用宏 IID_PPV_ARGS(&Library)來設定這個 和下列參數,其中 Library 是 對象的名稱。

ppPipelineLibrary

類型: [out] void**

傳回所建立連結庫的指標。

傳回值

類型:HRESULT

如果函式成功,它會傳回 S_OK。 否則,它會傳回 HRESULT錯誤碼E_INVALIDARG 包括如果 Blob 損毀或無法辨識,D3D12_ERROR_DRIVER_VERSION_MISMATCH 如果提供的數據來自舊驅動程式或運行時間,則為 D3D12_ERROR_ADAPTER_NOT_FOUND 數據來自不同的硬體。

如果您傳遞 nullptrpPipelineLibrary,則運行時間仍會執行 Blob 的驗證,但請避免建立實際的連結庫,並在連結庫建立時傳回S_FALSE。

此外,此功能需要更新的驅動程式,而且嘗試在舊驅動程式上使用此功能會傳回DXGI_ERROR_UNSUPPORTED。

言論

管線連結庫會啟用下列作業。

  • 將管線狀態物件 (PSO) 新增至現有的連結庫物件 (請參閱 StorePipeline)。
  • 將 PSO 連結庫串行化為磁碟記憶體的連續記憶體區塊(請參閱 串行化)。
  • 從永續性記憶體取消串行化 PSO 連結庫(這是由 createPipelineLibrary處理。
  • 從連結庫擷取個別 PSO (請參閱 LoadComputePipelineLoadGraphicsPipeline)。

管線連結庫生命週期中沒有任何重複的 POS 與相同子元件。

管理所提供指標存留期的建議解決方案,而只需要 ref-count 傳回的介面,就是利用 ID3D12Object::SetPrivateDataInterface,並使用實作 IUnknown的物件,並在 ref-count 達到 0 時釋放記憶體。

線程安全性

管線連結庫是安全線程使用,而且會視需要在內部同步處理,但有一個例外:多個線程載入相同的 PSO(透過 LoadComputePipelineLoadGraphicsPipelineLoadPipeline)應該同步處理自己,因為此動作可能會以非線程安全的方式修改連結庫中該管線的狀態。

例子

請參閱 Direct3D 12 管線狀態快取範例

要求

要求 價值
目標平臺 窗戶
標頭 d3d12.h
連結庫 D3d12.lib
DLL D3d12.dll

另請參閱