语法
成员
SizeInBytes类型:SIZE_T SAL:
In
指定 pPipelineStateSubobjectStream 成员所指向的不透明数据结构的大小(以字节为单位)。
pPipelineStateSubobjectStream类型:void * SAL:
In_reads(Inexpressible(“Dependentonsizeofsubobjects”))
指定将任意管线状态子对象描述为字节流的数据结构的地址。
备注
使用此结构与 ID3D12Device2::CreatePipelineState 方法一起创建管线状态对象。 所提供的流的格式应包含交替的 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE 集合以及对应的子对象类型(例如,D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER 与 D3D12_RASTERIZER_DESC 配对)。在对齐方面,D3D12 运行时期望子对象为枚举-结构体的单独结构对,而不是连续的字段集。它还期望它们对齐到系统的自然字对齐。这可以通过使用alignas(void*),或将枚举 + 子对象与 void* 组成 union 来实现。
仅将 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE 与 void* 联合是不够的,因为这将导致某些子对象未对齐。例如,D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY 后跟一个 D3D12_PRIMITIVE_TOPOLOGY_TYPE 枚举。如果子对象类型与 void* 联合,则这两个成员之间将有额外的填充,导致流损坏。因此,当
alignas 不可用时,应将整个子对象结构与 void* 联合。d3dx12.h 扩展,它为所有管线子对象提供了一组辅助结构(例如,上面的结构与 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER 非常相似)。此头文件可在 github 上的 DirectX-Headers 仓库中找到。
-runtime-validation
运行时将验证 PSO desc 是计算、网格或图形管线,所有子对象都是可识别的类型,并且没有重复的子对象。出于识别重复子对象的目的,某些子对象被视为其他子对象的”派生”版本。例如,如果运行时发现一个 D3D12_DEPTH_STENCIL_DESC 子对象,然后又发现一个 D3D12_DEPTH_STENCIL_DESC1,它将认为这些是重复的子对象并失败。
要求
头文件: d3d12_xs.h 或 d3d12_x.h库: d3d12_xs.lib 或 d3d12_x.lib
支持的平台:XBOX Series 主机和 XBOX One 系列
