Firme radice di esempio
La sezione seguente mostra le firme radice che variano in complessità da vuota a completa.
- Firma radice vuota
- Una costante
- Aggiunta di una visualizzazione buffer costante radice
- Tabelle descrittori di associazione
- Firma radice più complessa
- Visualizzazioni risorse streaming shader
- Argomenti correlati
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 vertici minimi e pixel shader che non accedono a alcun descrittore. Anche la fase di fusione, eseguire il rendering delle fasi di destinazione e stencil di profondità 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 di record dell'elenco di 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 è la posizione in cui verrà visualizzato 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 al tempo 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 visualizzazione del buffer costante radice (CBV) che costa due slot DWORD.
Per associare una visualizzazione buffer costante, usare un comando, ad esempio il seguente. Si noti che il primo parametro (2) è lo slot visualizzato nell'immagine. In genere una matrice di costanti verrà configurata e quindi resa disponibile per gli shader in b0 come CBV.
pCmdList->SetGraphicsRootConstantBufferView(2,GPUVAForCurrDynamicConstants);
Tabelle descrittori di associazione
In questo esempio viene illustrato l'uso di due tabelle descrittori; dichiarando una tabella di cinque descrittori che saranno disponibili al momento dell'esecuzione in un heap del descrittore CBV_SRV_UAV e un altro dichiarando una tabella di due descrittori che verranno visualizzati al momento dell'esecuzione in un heap del descrittore di esempio.
Per associare tabelle 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 di quattro DWORDS. Il comando seguente associa solo i due DWORDS intermedi dei quattro.
pCmdList->SetComputeRoot32BitConstants(0,2,myFloat2Array,1); // 2 constants starting at offset 1 (middle 2 values in float4)
Firma radice più complessa
Questo esempio mostra una firma radice densa con la maggior parte dei tipi di voci. Due delle tabelle descrittori (a slot 3 e 6) includono matrici di dimensioni non associate. Il carico qui è sull'applicazione per toccare solo descrittori validi in un heap. Non associato o matrici molto grandi, richiedono il supporto del livello hardware 2+ dell'associazione di risorse.
Esistono due sampler statici (associati senza richiedere slot di firma radice).
Allo slot 9, gli UAV u4 e UAV u5 vengono dichiarati allo stesso offset di tabella descrittore. Questo è l'uso di un descrittore alias, un descrittore in memoria verrà visualizzato sia come u4 che u5 nei shader HLSL. In questo caso, è necessario compilare lo shader con l'opzione D3D10_SHADER_RESOURCES_MAY_ALIAS o l'opzione o /res_may_alias
in FXC. I descrittori alias consentono di associare un descrittore a più punti di associazione, senza dover apportare modifiche agli shader.
Visualizzazioni risorse streaming shader
Questa firma radice illustra uno scenario in cui tutti gli SRV vengono trasmessi in streaming e fuori da una matrice di grandi dimensioni. Al momento dell'esecuzione, una tabella descrittore può essere impostata una volta quando viene impostata la firma radice. Tutte le letture di trama vengono quindi eseguite tramite l'indicizzazione nella matrice tramite costanti immesse tramite i primi argomenti radice. È necessario solo un singolo heap 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 del buffer costante. Ad esempio, se 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 delle risorse2+.
Argomenti correlati