Impostazione e popolamento del descrittore heaps

I tipi heap descrittori che possono essere impostati in un elenco di comandi sono quelli che contengono descrittori per cui è possibile usare tabelle descrittori (al massimo uno di ogni volta).

Impostazione dell'heaps del descrittore

I tipi di heap descrittore che possono essere impostati in un elenco di comandi sono:

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

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

Dopo aver impostato un heap descrittore in un elenco di comandi, le chiamate successive che definiscono le tabelle descrittori fanno riferimento all'heap descrittore corrente. Lo stato della tabella descrittore non è definito all'inizio di un elenco di comandi e dopo che gli heaps descrittori vengono modificati in un elenco di comandi. L'impostazione ridondante dello stesso heap descrittore non causa l'annullamento delle impostazioni della tabella del descrittore.

In un bundle, al contrario, l'heaps descrittore può essere impostato solo una volta (le chiamate ridondanti che impostano lo stesso heap due volte non generano un errore); in caso contrario, il comportamento non è definito. L'heaps descrittore impostato deve corrispondere allo stato quando qualsiasi 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 del descrittore dell'elenco di comandi. I bundle che non modificano le tabelle descrittori (ereditano solo loro) non devono impostare un heap descrittore e erediteranno solo dall'elenco dei comandi chiamanti.

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

Popolamento degli heaps del descrittore

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

Il contenuto iniziale della memoria heap 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 descrittore per essere visibile dalla CPU, la CPU può chiamare i metodi per creare descrittori nell'heap e copiare da un punto all'altro (inclusi gli heaps) in modo immediato e gratuito. Se l'heap è stato configurato come SHADER_VISIBLE, la lettura dalla CPU non è consentita.

Descrittore Heaps