Condividi tramite


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

Vedi anche

Strutture principali