Příklady kořenových podpisů
Následující část ukazuje kořenové podpisy, které se liší v složitosti od prázdného po úplně úplné.
- prázdný kořenový podpis
- jednu konstantu
- přidání kořenového zobrazení konstantní vyrovnávací paměti
- tabulky popisovače vazby
- složitější kořenový podpis
- zobrazení prostředků shaderu streamování
- související témata
Prázdný kořenový podpis
Prázdný kořenový podpis není pravděpodobně užitečný, ale lze ho použít v triviálním vykreslování s použitím pouze vstupního assembleru a minimálních shaderů vrcholů a pixelů, které nemají přístup k žádným popisovačům. K dispozici jsou také fáze prolnutí, cíl vykreslení a fáze vzorníku hloubky, a to i s prázdným kořenovým podpisem.
Jedna konstanta
Slot vazby rozhraní API je místo, kde bude kořenový argument pro tento parametr vázán v době záznamu seznamu příkazů. Počet slotů vazby rozhraní API je implicitní na základě pořadí parametrů v kořenovém podpisu (první je vždy nula). Slot vazby HLSL je místo, kde se shader zobrazí kořenový parametr. Typ ("uint" v předchozím příkladu) není známý pro hardware, ale je to jen komentář na obrázku, hardware jednoduše uvidí jediný DWORD jako obsah.
K vytvoření vazby konstanty v době záznamu seznamu příkazů by se použil příkaz podobný následujícímu:
pCmdList->SetComputeRoot32BitConstant(0,seed); // 0 is the parameter index, seed is used by the shaders
Přidání zobrazení kořenové konstantní vyrovnávací paměti
Tento příklad ukazuje dvě kořenové konstanty a zobrazení kořenové vyrovnávací paměti (CBV), které stojí dva sloty DWORD.
Chcete-li vytvořit vazbu zobrazení konstantní vyrovnávací paměti, použijte například následující příkaz. Všimněte si, že první parametr (2) je slot zobrazený na obrázku. Obvykle se nastaví pole konstant a pak zpřístupní shadery na b0 jako CBV.
pCmdList->SetGraphicsRootConstantBufferView(2,GPUVAForCurrDynamicConstants);
Tabulky popisovače vazeb
Tento příklad ukazuje použití dvou tabulek popisovače; jeden deklarující tabulku pěti popisovačů, které budou k dispozici v době provádění v haldě deskriptoru CBV_SRV_UAV a další deklarující tabulku dvou popisovačů, které se zobrazí v době provádění v haldě deskriptoru vzorkovníku.
Vytvoření vazby tabulek popisovače při záznamu seznamu příkazů
pCmdList->SetComputeRootDescriptorTable(1, handleToCurrentMaterialDataInHeap);
pCmdList->SetComputeRootDescriptorTable(2, handleToCurrentMaterialDataInSamplerHeap);
Další funkcí kořenového podpisu je kořenová konstanta float4, která má čtyři hodnoty DWORDS. Následující příkaz vytvoří vazbu pouze prostředních dvou DWORDS ze čtyř.
pCmdList->SetComputeRoot32BitConstants(0,2,myFloat2Array,1); // 2 constants starting at offset 1 (middle 2 values in float4)
Složitější kořenový podpis
Tento příklad ukazuje hustý kořenový podpis s většinou typů položek. Dvě tabulky popisovače (v slotech 3 a 6) zahrnují nevázaná pole velikostí. Zátěž zde spočívá v aplikaci tak, aby se v haldě dotýkala pouze platných popisovačů. Nevázaná nebo velmi velká pole vyžadují podporu vazby prostředků vrstvy hardwaru 2 nebo více.
Existují dva statické vzorkovače (vázané bez nutnosti slotů kořenového podpisu).
Při slotu 9 jsou UAV u4 a UAV u5 deklarovány na stejném odsazení deskriptoru. Používá se aliasovaný popisovač, jeden popisovač v paměti se v shaderech HLSL zobrazí jako u4 i u5. V takovém případě musí být shader zkompilován s možností D3D10_SHADER_RESOURCES_MAY_ALIAS nebo /res_may_alias
v FXC. Popisovače aliasů umožňují, aby jeden popisovač byl svázán s více body vazby, aniž by bylo nutné provádět změny shaderů.
Zobrazení prostředků shaderu streamování
Tento kořenový podpis znázorňuje scénář, ve kterém se všechny zobrazení obrazovky streamují do jednoho velkého pole a z jednoho velkého pole. V době provádění lze tabulku popisovače nastavit jednou při nastavení kořenového podpisu. Poté se všechna čtení textury provádí indexováním do pole prostřednictvím konstant předávaných pomocí prvních několika kořenových argumentů. Potřebujete jenom jednu haldu popisovače a aktualizuje se pouze v případě, že se textury streamují do volných slotů popisovače nebo z něj.
Posuny popisovače ve velké haldě jsou identifikovány shadery pomocí konstant v zobrazení vyrovnávací paměti konstanty. Pokud má například shader zadané ID materiálu, může indexovat do jednoho velkého pole pomocí konstanty pro přístup k požadovanému popisovači (který odkazuje na požadovanou texturu).
Tento scénář vyžaduje hardware s vrstvou vazby prostředků +.
Související témata