共用方式為


D3D12_PIPELINE_STATE_STREAM_DESC 結構 (d3d12.h)

描述管線狀態數據流。

語法

typedef struct D3D12_PIPELINE_STATE_STREAM_DESC {
  SIZE_T SizeInBytes;
  void   *pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC;

成員

SizeInBytes

SALIn

指定 pPipelineStateSubobjectStream 成員所指向之不透明數據結構的大小,以位元組為單位。

pPipelineStateSubobjectStream

SALIn_reads(Inexpressible("Dependentonsizeofsubobjects"))

指定描述為任意管線狀態子物件之位元組數據流的數據結構位址。

備註

使用這個結構搭配 ID3D12Device2::CreatePipelineState 方法來建立管線狀態物件。

提供的數據流格式應該包含一組替代 的D3D12_PIPELINE_STATE_SUBOBJECT_TYPE,以及 (它們對應的子物件類型,例如 ,D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZERD3D12_RASTERIZER_DESC配對。 就對齊方式而言,D3D12 運行時間預期子對象必須是列舉結構組的個別結構組,而不是連續的一組字段。 它也預期它們會對齊系統的自然文字對齊方式。 這可以使用 來達成 alignas(void*),或建立 union 列舉 + 子物件和 void*

重要

它不足以直接將 D3D12_PIPELINE_STATE_SUBOBJECT_TYPEvoid* 聯集,因為這會導致某些子對象不對齊。 例如, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY 後面接著 D3D12_PRIMITIVE_TOPOLOGY_TYPE 列舉。 如果子物件類型與 void* 聯集,則這 2 個成員之間會有額外的填補,導致數據流損毀。 因此,當無法使用時alignas,您應該將整個子對象結構與 void*聯集

以下顯示適合用於 D3D12_RASTERIZER_DESC 的子物件範例:

struct alignas(void*) StreamingRasterizerDesc
{
private:
  D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type = D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
public:
  D3D12_RASTERIZER_DESC Desc;
}

運行時間會決定管線數據流的類型, (有效的類型為 COMPUTEGRAPHICSMESH) ,其子物件類型、 VS (頂點著色器) 、 CS (計算著色器) ,以及找到 MS (網狀著色器) 。 如果運行時間找不到這些著色器,則會失敗建立管線。 如果找到多個不是 Null 的著色器,它也會失敗。 這表示在串流對象中同時擁有 CSVS 是合法的,前提是只有一個具有 ID3D12Device2::CreatePipelineState 之指定呼叫之著色器位元組碼的非 Null 指標。 與管線無關的子物件類型 (例如,將會忽略圖形數據流中的計算著色器子物件) 。 如果未提供子物件 (排除上述必要子物件) ,運行時間會為其提供預設值。

請考慮使用 d3dx12.h C++ 的延伸模組,其為所有管線子物件提供一組協助程序結構 (,例如,上述結構非常類似 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER) 。 您可以在 github 上的 DirectX-Headers 存放庫下找到此標頭。

規格需求

需求
標頭 d3d12.h

另請參閱

核心結構