Sdílet prostřednictvím


Použití hodnot System-Generated

Automaticky generované hodnoty jsou vytvářeny ve fázi IA (na základě uživatelského vstupu a sémantiky ) k zajištění určité efektivity v operacích shaderu.

Připojením dat, jako je ID instance (viditelné pro VS), ID vrcholu (viditelné pro VS) nebo primitivní ID (viditelné pro GS/PS), může následující fáze shaderu hledat tyto systémové hodnoty pro optimalizaci zpracování v této fázi. Fáze VS může například vyhledat ID instance, aby pro shader chytila další data jednotlivých vrcholů nebo aby prováděla jiné operace; fáze GS a PS mohou použít primitivní ID k získání primitivních dat stejným způsobem.

VertexID

Id vrcholu se používá v každé fázi shaderu k identifikaci každého vrcholu. Jedná se o 32bitové celé číslo bez znaménka, jehož výchozí hodnota je 0. Je přiřazeno vrcholu, když je primární část zpracována fází IA. Připojte sémantiku vertex-id k deklaraci vstupu shaderu, aby fáze IA generovala id pro každý vrchol.

IA přidá id vrcholu do každého vrcholu pro použití ve fázích shaderu. Pro každé volání kreslení se ID vrcholu zvýší o 1. U indexovaných volání kreslení se počet obnoví zpět na počáteční hodnotu. Pro ID3D11DeviceContext::DrawIndexed a ID3D11DeviceContext::DrawIndexedInstancedid vrcholu představuje hodnotu indexu. Pokud id vrcholu přeteče (překračuje 2³²– 1), zabalí se na 0.

Vrcholy všech primitivních typů mají přidružený identifikátor vrcholu (bez ohledu na sousedství).

PrimitiveID

Primitivní ID se používá v každé fázi shaderu k identifikaci jednotlivých primitiv. Jedná se o 32bitové celé číslo bez znaménka, jehož výchozí hodnota je 0. Ve fázi IA je přiřazena k primitivu, když je primitiv zpracováván. Pokud chcete informovat fázi IA o vygenerování primitivního ID, připojte k deklaraci vstupu shaderu sémantiku primitive-id.

Fáze IA přidá primitivní ID ke každému primitivu pro použití shaderem geometrie nebo fází shaderu pixelů (podle toho, která fáze je první aktivní po fázi IA). Pro každé indexované volání kreslení se primitivní ID zvýší o 1, ale primitivní ID se resetuje na 0 při každém zahájení nové instance. Všechna ostatní volání kreslení nemění hodnotu ID instance. Pokud id instance přeteče (překračuje 2³²– 1), zabalí se na hodnotu 0.

Fáze shaderu pixelů nemá samostatný vstup pro primitivní ID; Jakýkoli vstup shaderu pixelů, který určuje primitivní ID, však používá konstantní interpolační režim.

Neexistuje žádná podpora automatického generování primitivního ID pro sousední primitivy. U primitivních typů se sousedstvím, jako je trojúhelníkový pás se sousedstvím, se primitivní ID udržuje pouze pro vnitřní primitiva (nesousedící primitiva), podobně jako u sady primitiv v trojúhelníkovém pásu bez sousedství.

Identifikátor instance

Id instance používá každá fáze shaderu k identifikaci instance geometrie, která se právě zpracovává. Jedná se o 32bitové celé číslo bez znaménka, jehož výchozí hodnota je 0.

Fáze IA přidá ID instance každému vrcholu, pokud deklarace vstupu pro vertex shader obsahuje ID instance jako sémantiku. Pro každé indexované volání kreslení se ID instance zvýší o 1. Všechna ostatní volání kreslení nemění hodnotu ID instance. Pokud id instance přeteče (překračuje 2³²– 1), zabalí se na hodnotu 0.

Příklad

Následující obrázek ukazuje, jak jsou systémové hodnoty připojovány k instance pruhu trojúhelníku ve fázi IA.

ilustrace systémových hodnot pro instancovaný pruh trojúhelníků

Tyto tabulky zobrazují systémové hodnoty vygenerované pro obě instance stejného trojúhelníkového pruhu. První instance (instance U) se zobrazuje modře, druhá instance (instance V) je zobrazená zeleně. Plné čáry spojují vrcholy v základních tvarech, přerušované čáry spojují sousední vrcholy.

Následující tabulky zobrazují hodnoty generované systémem pro instanci U.

Data vrcholů C,U D,U E,U F,U G,U H,U Já a Ty J,U K,U L,U
VertexID 0 1 2 3 4 5 6 7 8 9
ID instance 0 0 0 0 0 0 0 0 0 0

 

Hodnota Hodnota Hodnota
PrimitiveID 0 1 2
ID instance 0 0 0

 

Následující tabulky zobrazují hodnoty generované systémem pro instanci V.

Data vrcholů C,V D,V E,V F,V G,V H,V I,V J, V K,V L,V
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 1 1 1 1 1 1 1 1 1 1

 

Hodnota Hodnota Hodnota
PrimitiveID 0 1 2
ID instance 1 1 1

 

Vstupní assembler generuje identifikátory (vrcholové, primitivní a instance); všimněte si také, že každá instance má jedinečný identifikátor instance. Data končí ořezem pruhu, který odděluje každou instanci trojúhelníkového pruhu.

Input-Assembler fáze