ID3D12Device1::CreatePipelineLibrary 方法 (d3d12.h)

建立快取的管線程式庫。 針對管線狀態物件, (預期會共用資料) ,在序列化資料之前將它們分組到程式庫,這表示由於中繼資料而產生較少的額外負荷,以及避免將重複或重複的資料寫入磁片的機會。

您可以使用ID3D12Device::CheckFeatureSupport查詢ID3D12PipelineLibrary支援,以及D3D12_FEATURE_SHADER_CACHED3D12_FEATURE_DATA_SHADER_CACHE。 如果D3D12_FEATURE_DATA_SHADER_CACHEFlags成員包含旗標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錯誤碼,包括如果 Blob 損毀或無法辨識,D3D12_ERROR_DRIVER_VERSION_MISMATCH如果提供的資料來自舊驅動程式或執行時間,則傳回E_INVALIDARG,如果資料來自不同的硬體,則D3D12_ERROR_ADAPTER_NOT_FOUND

如果您針對pPipelineLibrary傳遞 , nullptr 則執行時間仍會執行 Blob 的驗證,但請避免建立實際的程式庫,並在程式庫已建立時傳回S_FALSE。

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

備註

管線程式庫會啟用下列作業。

  • 將管線狀態物件 (PSOs) 新增至現有的程式庫物件, (參考 StorePipeline) 。
  • 將 PSO 程式庫序列化為磁片儲存體的連續記憶體區塊, (請參閱 序列化) 。
  • 從永續性儲存體取消序列化 PSO 程式庫 (這是 由 CreatePipelineLibrary) 處理。
  • 從程式庫擷取個別 PSO (請參閱 LoadComputePipelineLoadGraphicsPipeline) 。

管線程式庫生命週期中沒有任何重複的 PDO 具有相同子元件。

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

執行緒安全性

管線程式庫是安全線程使用,而且會視需要內部同步處理,但有一個例外狀況:多個 (執行緒會透過LoadComputePipelineLoadGraphicsPipeline 或 LoadPipeline) 同步處理,因為此動作可能會以非執行緒安全的方式修改程式庫中該管線的狀態。

範例

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

需求

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

另請參閱