Pokročilé použití tabulek popisovače
Následující části obsahují informace o pokročilém použití tabulek popisovače.
- změna položek tabulky popisovače mezi voláními vykreslování
- indexování mimo hranice
- deriváty shaderu a rozdílové indexování
- související témata
Změna položek tabulky popisovače mezi voláními vykreslování
Po odeslání příkazů, které nastaví tabulky popisovače do fronty ke spuštění, nesmí aplikace upravovat z procesoru části haldy deskriptoru, na které může GPU odkazovat, dokud aplikace neví, že GPU dokončilo použití odkazů.
Dokončení práce se dá určit v těsné vazbě pomocí plotů rozhraní API pro sledování průběhu GPU nebo hrubějších mechanismů, jako je čekání na zobrazení vykreslování – to, co vyhovuje aplikaci. Pokud aplikace ví, že k tabulce popisovače se bude přistupovat jenom podmnožina oblasti, ke které bude přistupovat (například kvůli řízení toku v shaderu), ostatní neodkazované popisovače se stále můžou změnit. Pokud aplikace potřebuje přepínat mezi různými tabulkami popisovače mezi voláními vykreslování, existuje několik přístupů, ze které si aplikace může vybrat:
- Správa verzí tabulek popisovače: Vytvořte (nebo znovu použijte) samostatnou tabulku popisovače pro každou jedinečnou kolekci popisovačů, na kterou odkazuje seznam příkazů. Při úpravách a opětovném použití dříve naplněných oblastí v haldách popisovače musí aplikace nejprve zajistit, aby GPU dokončil používání libovolné části haldy popisovače, která se bude recyklovat.
- Dynamické indexování: Aplikace mohou uspořádat objekty, které se liší mezi kreslením a odesláním (nebo se dokonce v rámci kreslení) v rozsahu haldy popisovače, definovat tabulku popisovače, která zahrnuje všechny z nich, a ze shaderu použít dynamické indexování tabulky během provádění shaderu k výběru objektu, který se má použít.
- Přímé vložení popisovačů do kořenového podpisu Tímto způsobem lze spravovat pouze velmi malý počet popisovačů, protože je omezený prostor kořenového podpisu.
Implikací použití správy verzí tabulek popisovače je, že paměť popisovače z haldy deskriptoru musí být spálena pro každou jedinečnou sadu popisovačů odkazovaných grafickým kanálem pro každý seznam příkazů, který může být spuštěn, zařazen do fronty ke spuštění nebo zaznamenán v libovolném okamžiku.
D3D12 je zodpovědná za správu správy verzí pro aplikaci pro typy objektů spravované prostřednictvím hald a popisovačů tabulek popisovače. Jednou z výhod je, že se aplikace můžou rozhodnout, že obsah tabulky popisovače budou moct používat co nejvíce, a ne vždy definovat novou verzi tabulky popisovače pro každé odeslání seznamu příkazů. Kořenový podpis je prostor, který ovladač D3D12 automaticky verze.
Možnost svázat více tabulek popisovače s kořenovým podpisem (a tedy s kanálem) najednou umožňuje aplikacím seskupit a přepnout sady odkazů popisovače v případě potřeby na různé frekvence. Aplikace může například použít malé číslo (třeba jen jedno) velkých statických tabulek popisovače, které se zřídka mění nebo ve kterých oblastech v paměti haldy podkladového popisovače se podle potřeby naplní s použitím dynamického indexování z shaderu k výběru textur. Aplikace může současně udržovat další třídu prostředků, kde sada odkazovaná jednotlivými voláními kreslení se přepne z procesoru pomocí techniky správy verzí tabulek popisovače.
Indexování mimo hranice
Z indexování jakékoli tabulky popisovače ze shaderu vznikne z velké části nedefinovaný přístup k paměti, včetně možnosti čtení libovolné paměti v procesu, jako by se jedná o popisovač stavu hardwaru a žil s následkem toho, co s tím hardware dělá. To by mohlo způsobit resetování zařízení, ale ne chybové ukončení Systému Windows.
Indexování shaderu a divergentní indexování
Pokud vyvolání shaderu pixelů, které se spouští v razítku 2x2 (pro podporu odvozených výpočtů), zvolte různé indexy textury, které se mají vzorkovat z tabulky popisovače, a pokud vybraná konfigurace a textura vzorkovače pro každý daný pixel vyžaduje výpočet LOD z derivátů souřadnic textury, pak výpočet LOD a vzorkování textur se provádí hardwarem nezávisle na každém vyhledávání textury v razítku 2x2, což bude mít vliv na výkon.
Související témata