Sdílet prostřednictvím


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

prázdný kořenový podpis nemá žádné vazby

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

jedno kořenové konstanty

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

přidá do kořenového podpisu konstantní zobrazení 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

přidá tabulky popisovače do kořenového podpisu

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

komplexního kořenového podpisu s mnoha prvky

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í

zobrazení prostředků shaderu streamování v tomto kořenovém podpisu

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ů +.

vrstvy hardwaru vazby prostředků

vazby prostředků v HLSL

kořenových podpisů