Impostazione e popolamento degli heap del descrittore

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

Impostazione degli heap 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 heap impostati nell'elenco di comandi devono essere stati creati anche come shader visibili. Esistono tre tipi di elenco di comandi: DIRECT, BUNDLE e COMPUTE.

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

In un bundle, al contrario, gli heap del descrittore possono essere impostati una sola volta (le chiamate ridondanti impostano due volte lo stesso heap non generano un errore); in caso contrario, il comportamento non è definito. 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 del descrittore dell'elenco di comandi. I bundle che non modificano le tabelle del descrittore (ereditano solo loro) non devono impostare un heap del descrittore e ereditano solo 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 impostato 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 all'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 dalla 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 libero. Se l'heap è stato configurato come SHADER_VISIBLE, la lettura dalla CPU non è consentita.

Heap descrittore