Firme radice di esempio
La sezione seguente mostra le firme radice che variano in complessità da vuoto a completamente pieno.
- Una firma radice vuota
- una costante
- Aggiunta di una vista buffer costante radice
- tabelle del descrittore di binding
- Una firma radice più complessa
- viste delle risorse dello shader di streaming
- argomenti correlati
Una firma radice vuota
È improbabile che una firma radice vuota sia utile, ma può essere usata in un passaggio di rendering semplice con l'uso solo dell'assembler di input e dei vertex shader minimi e pixel shader che non accedono ad alcun descrittore. Anche la fase di fusione, le fasi di destinazione di rendering e depth-stencil sono disponibili, anche con una firma radice vuota.
Una costante
Lo slot di associazione API è il punto in cui l'argomento radice per questo parametro verrà associato all'ora del record dell'elenco dei comandi. Il numero degli slot di associazione API è implicito, in base all'ordine dei parametri nella firma radice (il primo è sempre zero). Lo slot di associazione HLSL è il percorso in cui lo shader visualizzerà il parametro radice. Il tipo ("uint" nell'esempio precedente) non è noto all'hardware, ma è solo un commento nell'immagine, l'hardware visualizzerà semplicemente il singolo DWORD come contenuto.
Per associare una costante in fase di record dell'elenco dei comandi, verrà usato un comando simile al seguente:
pCmdList->SetComputeRoot32BitConstant(0,seed); // 0 is the parameter index, seed is used by the shaders
Aggiunta di una visualizzazione buffer costante radice
Questo esempio mostra due costanti radice e una vista CBV (Constant Buffer View) radice che costa due slot DWORD.
Per associare una visualizzazione buffer costante, usare un comando come il seguente. Si noti che il primo parametro (2) è lo slot visualizzato nell'immagine. In genere verrà configurata una matrice di costanti e quindi resa disponibile agli shader in b0 come CBV.
pCmdList->SetGraphicsRootConstantBufferView(2,GPUVAForCurrDynamicConstants);
Associazione di tabelle dei descrittori
In questo esempio viene illustrato l'uso di due tabelle descrittori; uno che dichiara una tabella di cinque descrittori che saranno disponibili in fase di esecuzione in un heap del descrittore CBV_SRV_UAV e un altro dichiarando una tabella di due descrittori che verranno visualizzati in fase di esecuzione in un heap del descrittore del campionatore.
Per associare le tabelle dei descrittori durante la registrazione di un elenco di comandi.
pCmdList->SetComputeRootDescriptorTable(1, handleToCurrentMaterialDataInHeap);
pCmdList->SetComputeRootDescriptorTable(2, handleToCurrentMaterialDataInSamplerHeap);
Un'altra funzionalità della firma radice è la costante radice float4 con dimensioni quattro DWORDS. Il comando seguente associa solo i due DWORDS centrali dei quattro.
pCmdList->SetComputeRoot32BitConstants(0,2,myFloat2Array,1); // 2 constants starting at offset 1 (middle 2 values in float4)
Una firma radice più complessa
Questo esempio mostra una firma radice densa con la maggior parte dei tipi di voci. Due delle tabelle del descrittore (in corrispondenza degli slot 3 e 6) includono matrici di dimensioni non associate. L'onere in questo caso riguarda l'applicazione per toccare solo descrittori validi in un heap. Le matrici non associate o molto grandi richiedono il livello hardware 2+ del supporto dell'associazione di risorse.
Sono disponibili due campionatori statici (associati senza richiedere slot di firma radice).
Allo slot 9, UAV u4 e UAV u5 vengono dichiarati con lo stesso offset di tabella descrittore. Questo è l'uso di un descrittore con alias, un descrittore in memoria verrà visualizzato sia come u4 che u5 negli shader HLSL. In questo caso, lo shader deve essere compilato con l'opzione D3D10_SHADER_RESOURCES_MAY_ALIAS o l'opzione o /res_may_alias
in FXC. I descrittori con alias consentono di associare un descrittore a più punti di associazione, senza dover apportare modifiche agli shader.
Viste delle risorse dello shader di streaming
Questa firma radice illustra uno scenario in cui tutti i file SRV vengono trasmessi in streaming e fuori da una matrice di grandi dimensioni. In fase di esecuzione, una tabella descrittore può essere impostata una volta quando viene impostata la firma radice. Quindi tutte le letture delle trame vengono eseguite tramite l'indicizzazione nella matrice tramite costanti inserite tramite i primi argomenti radice. È necessario solo un singolo heap del descrittore e viene aggiornato solo quando le trame vengono trasmessi in streaming o fuori da slot di descrittore gratuiti.
Gli offset del descrittore nell'heap di grandi dimensioni vengono identificati dagli shader usando le costanti nelle visualizzazioni buffer costanti. Ad esempio, se a un shader viene assegnato un ID materiale, può essere indicizzato in una matrice di grandi dimensioni usando la costante per accedere al descrittore richiesto (che fa riferimento alla trama richiesta).
Questo scenario richiede hardware con il livello di associazione di risorse2+.
Argomenti correlati
-
associazione di risorse in HLSL