Přehled kořenových podpisů
Kořenový podpis je nakonfigurovaný aplikací, která propojuje seznamy příkazů s prostředky potřebnými pro shadery. Seznam příkazů grafiky má grafický i výpočetní kořenový podpis. Seznam výpočetních příkazů bude mít jednoduše jeden kořenový podpis výpočetních operací. Tyto kořenové podpisy jsou navzájem nezávislé.
Kořenové parametry a argumenty
kořenový podpis je podobný podpisu funkce rozhraní API, určuje typy dat, které shadery by měly očekávat, ale nedefinuje skutečnou paměť nebo data. Kořenový parametr je jedna položka v kořenovém podpisu. Skutečné hodnoty kořenových parametrů nastavené a změněné za běhu se nazývají kořenových argumentů. Změna kořenových argumentů změní data, která shadery čtou.
Kořenové konstanty, popisovače a tabulky
Kořenový podpis může obsahovat tři typy parametrů; kořenové konstanty (konstanty vložené v kořenových argumentech), kořenové popisovače (popisovače vložené v kořenových argumentech) a tabulky popisovače (ukazatele na oblast popisovačů v haldě popisovače).
Kořenové konstanty jsou vložené jako 32bitové hodnoty, které se v shaderu zobrazují jako konstantní vyrovnávací paměť.
Vložené kořenové deskriptory by měly obsahovat popisovače, ke kterým se přistupuje nejčastěji, ale jsou omezeny na CBV a nezpracované nebo strukturované vyrovnávací paměti UAV nebo SRV. Složitější typ, například 2D texturový SRV, nelze použít jako kořenový popisovač. Kořenové popisovače nezahrnují omezení velikosti, takže není možné provádět kontrolu mimo meze, na rozdíl od hromad popisovačů, které zahrnují velikost.
Položky tabulky deskriptorů v kořenových podpisech obsahují deskriptor, název připojení shaderu HLSL a příznak viditelnosti. Podrobnosti o názvech shaderu jsou uvedeny v Modelu shaderu 5.1. Na některém hardwaru může dojít k nárůstu výkonu, protože popisovače jsou viditelné pouze ve fázích shaderu, které je vyžadují (viz D3D12_SHADER_VISIBILITY).
Rozložení kořenového podpisu je poměrně flexibilní, s některými omezeními uloženými na méně schopném hardwaru. Bez ohledu na úroveň hardwaru by se aplikace měly vždy snažit vytvořit kořenový podpis tak malý, jak je potřeba k maximální efektivitě. Aplikace mohou v kořenovém podpisu vyvažovat více tabulek popisovače oproti menšímu prostoru pro kořenové konstanty, nebo naopak.
Obsah kořenového podpisu (tabulky deskriptorů, kořenové konstanty a kořenové deskriptory), které aplikace navázala, je automaticky verzován ovladačem D3D12 vždy, když se jakákoli část obsahu změní mezi voláními draw (graphics) a dispatch (compute). Každý draw/dispatch tak získá jedinečnou úplnou sadu stavu kořenového podpisu.
V ideálním případě existují skupiny objektů stavu kanálu (PSO), které sdílejí stejný kořenový podpis. Po nastavení kořenového podpisu na potrubí mohou být všechny vazby, které definuje (deskriptorové tabulky, popisovače, konstanty), jednotlivě nastaveny nebo změněny, včetně dědičnosti do svazků.
Aplikace může vytvořit svůj vlastní kompromis mezi počtem tabulek popisovače, které chce, versus vložené deskriptory (které zabírají více místa, ale odeberou nepřímý argument) a vložené konstanty (které nemají žádný nepřímý vztah), které chtějí v kořenovém podpisu. Aplikace by měly používat kořenový podpis co nejvíce střídmě a spoléhat se na paměť řízenou aplikací, jako jsou haldy a deskriptory odkazující na ně, aby představovaly hromadná data.
Související témata