Condividi tramite


Impostazione e popolamento degli heap di descrittori

I tipi di heap dei descrittori che possono essere impostati in un elenco di comandi sono quelli che contengono descrittori per i quali si possono usare le tabelle dei descrittori (al massimo una di ognuna alla volta).

Impostazione degli heap del descrittore

I tipi di heap descrittore che possono essere impostati su una lista di comandi sono:

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

Gli heap impostati nell'elenco dei comandi devono essere stati creati anche come shader visibili. Esistono tre tipi di elenco di comandi: DIRECT, BUNDLE e COMPUTE.

Dopo che un heap di descrittori è impostato in un elenco di comandi, le chiamate successive che definiscono le tabelle descrittori fanno riferimento all'heap di descrittori corrente. Lo stato della tabella dei descrittori è indefinito all'inizio di una lista di comandi e dopo che gli heap dei descrittori vengono modificati nella lista di comandi. L'impostazione ridondante dello stesso heap del descrittore non rende indefinita l'impostazione delle tabelle del descrittore.

In un bundle, al contrario, gli heap dei descrittori possono essere impostati una sola volta (le chiamate ridondanti che impostano lo stesso heap due volte non generano un errore); in caso contrario, il comportamento è indefinito. Gli heap del descrittore impostati devono corrispondere allo stato quando un elenco di comandi chiama il bundle; in caso contrario, il comportamento non è definito. Ciò consente ai bundle di ereditare e modificare le impostazioni della tabella dei descrittori dell'elenco dei comandi. I bundle che non modificano le tabelle dei descrittori (li ereditano soltanto) non devono impostare affatto un heap dei descrittori ma erediteranno semplicemente dall'elenco dei comandi chiamante.

Quando gli heap del descrittore vengono impostati (usando ID3D12GraphicsCommandList::SetDescriptorHeaps), tutti gli heap usati vengono impostati in una singola chiamata (e tutti gli heap impostati in precedenza non vengono impostati dalla chiamata). Al massimo un heap di ogni tipo elencato sopra può essere specificato nella chiamata.

Popolamento degli heap del descrittore

Dopo che un'applicazione ha creato un heap del descrittore, può quindi usare i metodi nel dispositivo per generare descrittori direttamente nell'heap o copiare i descrittori da una posizione a un'altra.

Il contenuto iniziale della memoria heap del descrittore non è definito, quindi chiedere alla GPU o al driver di fare riferimento alla memoria non inizializzata per il rendering può causare risultati non definiti, ad esempio una reimpostazione del dispositivo.

Se l'applicazione configura un heap del descrittore in modo che sia visibile per la CPU, la CPU può chiamare i metodi per creare descrittori nell'heap e copiare da una posizione all'altra (inclusi gli heap) in modo immediato e senza thread. Se l'heap è stato configurato come SHADER_VISIBLE, la lettura dalla CPU non è consentita.

Heap Descrittori