Skip to main content
將管線狀態物件 (PSO) 序列化,以便在執行階段有效率地載入。此方法會在離線建立內容期間呼叫,而不是在遊戲執行階段呼叫。

語法

參數

pPipelineState   _In_
類型:ID3D12PipelineState*
要序列化的圖形管線狀態,以指向 ID3D12PipelineState 的指標表示。 Flags   _In_
類型:UINT
用來控制此作業的旗標,以 D3D12XBOX_SERIALIZE_FLAGS 列舉常數的位元 OR 組合表示。目前此參數必須為 D3D12XBOX_SERIALIZE_FLAGS_NONE。 pSerializeState   _Out_
類型:D3D12XBOX_SERIALIZE_GRAPHICS_PIPELINE_STATE*
產生的序列化狀態,以指向 D3D12XBOX_SERIALIZE_GRAPHICS_PIPELINE_STATE 結構的指標表示。

傳回值

類型:HRESULT 其中一個 Direct3D 12 傳回碼。

備註

此方法會將 PSO 序列化,以便在執行階段有效率地載入。此方法應在離線建立內容時呼叫,絕不可在遊戲執行階段呼叫。一般而言,此方法會由 PC 型工具使用,該工具會叫用 XBOX One Direct3D 12.x API、驅動程式和著色器編譯器的 PC 型 UMD12_PC.DLL/XGS12_PC_XS.DLL 實作。使用 D3D12XBOX_PROCESS_DEBUG_FLAG_INSTRUMENTED 和 D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED 旗標 (即 D3D12XBOX_PROCESS_DEBUG_FLAGS 列舉中的列舉常數旗標) 時,也可以在 XBOX One 開發套件主機上呼叫此方法。 呼叫此方法會將 PSO 序列化為其元件片段,形式可讓 DeserializeGraphicsPipelineStateX 在執行階段有效率地載入。為了避免浪費磁碟和記憶體空間,呼叫端應在其 PSO 集合中將產生的元件去除重複。例如,當多個 PSO 之間只有點陣化器狀態不同時,這些物件可能會具有完全相同的著色器 GPU 指令集。開發人員必須自行在這類叫用之間執行雜湊或記憶體比較,並識別可共用的元件片段。開發人員會在執行階段管理所有序列化 PSO 元件的放置位置和存留期,並在呼叫 DeserializeGraphicsPipelineStateX 時指定序列化 PSO 元件的位置,藉此促進這類共用。 對於一般遊戲,大多數 PSO 都是使用此 SerializeGraphicsPipelineStateX/DeserializeGraphicsPipelineStateX 機制離線建立的。 若要在執行階段有效率地建立 PSO 變化,請將還原序列化的著色器與 CreateDerivedGraphicsPipelineStateX 搭配使用。不需要使用 SerializeGraphicsPipelineStateX 建立 PSO 所有可能的狀態排列。 SerializeGraphicsPipelineStateX 會針對每個產生的元件片段傳回 ID3DBlob 結構。若要查詢產生的元件緩衝區,呼叫端會呼叫 ID3DBlob::GetBufferPointer 和 ID3DBlob::GetBufferSize;若要在複製結果後釋放記憶體,呼叫端會呼叫 Release。 對於非作用中的著色器,blob 指標可能為 null。某些著色器可能有 pGpuInstructions blob,但沒有對應的 pMetaData blob。(pGpuInstructions 和 pMetaData 是 D3D12XBOX_SERIALIZE_SHADER 結構的成員)。所有元件片段都必須保存,並提供回 DeserializeGraphicsPipelineStateX。 D3D12.x 會使用 CRC 確保提供給 DeserializeGraphicsPipelineStateX 的所有元件片段與 SerializeGraphicsPipelineStateX 產生的元件片段完全相符。 請注意,SerializeGraphicsPipelineStateX 無法用來序列化先前已透過 DeserializeGraphicsPipelineStateX 還原序列化的管線狀態物件。

需求

標頭: d3d12_x.h 程式庫: d3d12_x.lib 支援的平台: XBOX One 系列

另請參閱

ID3D12Device
Last modified on October 6, 2026