D3D12_PIPELINE_STATE_STREAM_DESC struttura (d3d12.h)
Descrive un flusso di stato della pipeline.
Sintassi
typedef struct D3D12_PIPELINE_STATE_STREAM_DESC {
SIZE_T SizeInBytes;
void *pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC;
Members
SizeInBytes
SAL: In
Specifica le dimensioni della struttura di dati opaca a cui punta il membro pPipelineStateSubobjectStream, in byte.
pPipelineStateSubobjectStream
SAL: In_reads(Inexpressible("Dependentonsizeofsubobjects"))
Specifica l'indirizzo di una struttura di dati che descrive come bytestream un subobject dello stato della pipeline arbitrario.
Commenti
Usare questa struttura con il metodo ID3D12Device2::CreatePipelineState per creare oggetti dello stato della pipeline.
Il formato del flusso fornito deve essere costituito da un set alternato di D3D12_PIPELINE_STATE_SUBOBJECT_TYPE e i tipi di oggetto secondario corrispondenti per essi , ad esempio D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER coppie conD3D12_RASTERIZER_DESC. In termini di allineamento, il runtime D3D12 prevede che gli oggetti secondari siano singole coppie di struct di enumerazione anziché un set continuo di campi. Si prevede inoltre che siano allineati all'allineamento naturale della parola del sistema. Questa operazione può essere ottenuta usando o facendo alignas(void*)
una union
delle enumerazioni + sottooggetto e un void*
oggetto .
Importante
Non è sufficiente unire semplicemente l'D3D12_PIPELINE_STATE_SUBOBJECT_TYPE con un void*, perché ciò comporterà l'errata allineamento di determinati oggetti secondari.
Ad esempio, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY è seguito da un'enumerazione D3D12_PRIMITIVE_TOPOLOGY_TYPE . Se il tipo di oggetto secondario viene unito a un void*, sarà presente un riempimento aggiuntivo tra questi 2 membri, causando il danneggiamento del flusso.
A causa di questo, è consigliabile unire l'intero struct subobject con un void*, quando alignas
non è disponibile
Un esempio di subobject adatto per l'uso con D3D12_RASTERIZER_DESC è illustrato di seguito:
struct alignas(void*) StreamingRasterizerDesc
{
private:
D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type = D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
public:
D3D12_RASTERIZER_DESC Desc;
}
Il runtime determina il tipo di flusso di pipeline (tipi validi che sono COMPUTE, GRAPHICS e MESH), in base al tipo di oggetto secondario, fuori da VS (vertex shader), CS (compute shader) e MS (mesh shader), viene trovato. Se il runtime trova nessuno di questi shader, la creazione della pipeline avrà esito negativo. Se trova più di questi shader che non sono Null, avrà esito negativo. Ciò significa che è legale avere entrambi, ad esempio, un cse vs nell'oggetto di flusso, fornito che solo uno ha un puntatore non null per il bytecode shader per qualsiasi chiamata specificata a ID3D12Device2::CreatePipelineState. I tipi di oggetto secondario non rilevanti per la pipeline ,ad esempio un subobject dello shader di calcolo in un flusso grafico, verranno ignorati. Se un oggetto secondario non viene fornito (escluso gli oggetti secondari necessari sopra indicati), il runtime fornirà un valore predefinito.
È consigliabile usare le d3dx12.h
estensioni per C++, che forniscono un set di struct helper per tutti gli oggetti secondari della pipeline, ad esempio lo struct precedente è molto simile a CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER
. Questa intestazione è disponibile nel repository DirectX-Headers in github.
Requisiti
Requisito | Valore |
---|---|
Intestazione | d3d12.h |