跳轉到主要內容
建立快取的管線程式庫。對於預期會彼此共用資料的管線狀態物件 (PSO),在序列化之前先將它們分組到程式庫中,可以減少中繼資料造成的額外負荷,並有機會避免將多餘或重複的資料寫入磁碟。 您可以使用 ID3D12Device::CheckFeatureSupport 搭配 D3D12_FEATURE_SHADER_CACHE 和 D3D12_FEATURE_DATA_SHADER_CACHE,查詢是否支援 ID3D12PipelineLibrary。如果 D3D12_FEATURE_DATA_SHADER_CACHE 的 Flags 成員包含旗標 D3D12_SHADER_CACHE_SUPPORT_LIBRARY,則支援 ID3D12PipelineLibrary 介面。如果沒有,則呼叫此函式時一律會傳回 DXGI_ERROR_NOT_SUPPORTED。

語法

參數

pLibraryBlob
類型:const void *
如果輸入的程式庫 Blob 是空的,則程式庫的初始內容是空的。如果輸入的程式庫 Blob 不是空的,則會驗證其完整性、加以剖析,並儲存指標。作為此方法輸入所提供的指標,在傳回物件的存留期間內必須保持有效。基於效率考量,不會複製資料。 BlobLength
類型:SIZE_T
指定 pLibraryBlob 的長度 (以位元組為單位)。 riid
類型:const IID &
指定 ID3D12PipelineLibrary 物件的唯一 REFIID。通常會使用巨集 IID_PPV_ARGS(&Library) 設定此參數和下一個參數,其中 Library 是物件的名稱。 ppPipelineLibrary
類型:void **
傳回所建立程式庫的指標。

傳回值

類型:HRESULT 如果函式成功,會傳回 S_OK。否則會傳回 HRESULT 錯誤碼,包括 Blob 損毀或無法辨識時的 E_INVALIDARG、提供的資料來自舊版驅動程式或執行階段時的 D3D12_ERROR_DRIVER_VERSION_MISMATCH,以及資料來自不同硬體時的 D3D12_ERROR_ADAPTER_NOT_FOUND。 如果您為 pPipelineLibrary 傳遞 nullptr,執行階段仍會執行 Blob 的驗證,但不會建立實際的程式庫;如果原本會建立程式庫,則會傳回 S_FALSE。 此外,此功能需要更新的驅動程式,嘗試在舊版驅動程式上使用時會傳回 DXGI_ERROR_UNSUPPORTED。

備註

管線程式庫可啟用下列作業。
  • 將管線狀態物件 (PSO) 新增至現有的程式庫物件 (請參閱 StorePipeline)。
  • 將 PSO 程式庫序列化為連續的記憶體區塊以供磁碟儲存 (請參閱 Serialize)。
  • 從永續性儲存體還原序列化 PSO 程式庫 (由 CreatePipelineLibrary 處理)。
  • 從程式庫擷取個別 PSO (請參閱 LoadComputePipeline 和 LoadGraphicsPipeline)。
在管線程式庫生命週期的任何時間點,具有相同子元件的 PSO 之間都不會發生重複。 若要管理所提供指標的存留期,同時只需對傳回的介面進行參考計數,建議的解決方案是利用 ID3D12Object::SetPrivateDataInterface,並使用實作 IUnknown 的物件,在參考計數達到 0 時釋放記憶體。

執行緒安全性

管線程式庫可安全地在多執行緒中使用,並會視需要在內部進行同步處理,但有一個例外:多個執行緒載入相同的 PSO (透過 LoadComputePipeline、LoadGraphicsPipeline 或 LoadPipeline) 時應自行同步處理,因為此動作可能會以非執行緒安全的方式修改程式庫內該管線的狀態。

範例

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

需求

標頭: d3d12_xs.h 或 d3d12_x.h
程式庫: d3d12_xs.lib 或 d3d12_x.lib
支援的平台:XBOX Series 主機與 XBOX One 系列

另請參閱

最後修改於 2026年10月6日