Condividi tramite


Heap del descrittore visibile shader

Gli heap del descrittore visibile dello shader sono heap descrittori a cui possono fare riferimento gli shader tramite tabelle descrittori.

Panoramica

Gli heap del descrittore a cui è possibile fare riferimento gli shader tramite tabelle descrittori sono disponibili in due versioni: un tipo heap, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, può contenere le viste delle risorse shader, le viste di accesso non ordinate e le visualizzazioni buffer costanti, tutte mescolate. Qualsiasi posizione specificata nell'heap può essere uno qualsiasi dei tipi elencati di descrittori. Un altro tipo di heap, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, archivia solo i campionatori, riflettendo il fatto che per la maggior parte dell'hardware, i campionatori vengono gestiti separatamente da SRV, UAV, CBV.

Gli heap del descrittore di questi tipi possono essere richiesti per essere visibili o meno quando viene creato l'heap (quest'ultimo, non shader visibile, può essere utile per i descrittori di staging nella CPU). Quando richiesto di essere visibile allo shader, ognuno dei tipi heap precedenti può avere un limite di dimensioni hardware per qualsiasi allocazione dell'heap del descrittore singolo.

Le applicazioni possono creare un numero qualsiasi di heap del descrittore e gli heap non shader visibili non sono vincolati alle dimensioni. Se un heap del descrittore visibile creato dall'applicazione è inferiore al limite di dimensioni hardware, il driver può scegliere di allocare l'heap del descrittore fuori da un heap del descrittore sottostante più grande in modo che più heap del descrittore API si adattino a un heap del descrittore hardware. Il motivo per cui ciò può verificarsi è che per alcuni hardware, il passaggio tra gli heap del descrittore hardware durante l'esecuzione richiede un'attesa GPU per l'inattività (per assicurarsi che i riferimenti GPU all'heap descrittore precedentemente siano completati). Se tutti gli heap del descrittore creati da un'applicazione rientrano nelle capacità massime dell'heap hardware applicabile, non si verificheranno attese di questo tipo durante il cambio di heap del descrittore API durante il rendering. Le applicazioni devono consentire la possibilità, tuttavia, che il passaggio dell'heap del descrittore corrente potrebbe incorrere in un'attesa di inattività.

Per evitare di essere interessati da questa possibile attesa per l'inattività sull'opzione dell'heap del descrittore, le applicazioni possono sfruttare le interruzioni nel rendering che causerebbero l'inattività della GPU per altri motivi come il tempo necessario per eseguire le opzioni dell'heap del descrittore, poiché un'attesa per l'inattività sta accadendo comunque.

Il meccanismo e la semantica per identificare gli heap del descrittore negli shader durante la registrazione dell'elenco dei comandi o del bundle sono descritti nella guida di riferimento all'API.

Esempio

L'immagine seguente mostra due heap descrittori che fanno riferimento a due trame 2D separate archiviate in due slot di un heap predefinito di grandi dimensioni. È possibile accedere all'heap del descrittore visibile tramite la pipeline grafica (inclusi gli shader) e quindi la trama 2D è disponibile per la pipeline.

heap del descrittore visibile e non visibile

Nota

Spesso è previsto un limite per l'hardware GPU della quantità di memoria locale gpu scrivibile dalla CPU (detta memoria combinata di scrittura) per gli heap del descrittore. In genere, questo limite è di circa 96 MB per tutti i processi. Un heap del descrittore di un milione di membri, con descrittori di 32byte, utilizzerebbe ad esempio 32 MB. Il driver eseguirà il fallback sulla memoria di sistema, se necessario, anche se è consigliabile non creare un numero elevato di heap di descrittore di grandi dimensioni.

 

heap descrittore