Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wartości generowane przez system są tworzone w etapie IA (na podstawie danych wejściowych dostarczonych przez użytkownika, semantyka ) w celu zwiększenia efektywności operacji cieniowania.
Dołączając dane, takie jak identyfikator wystąpienia (widoczny dla programu VS), identyfikator wierzchołka (widoczny dla programu VS) lub identyfikator prymitywu (widoczny dla GS/PS), kolejny etap cieniowania może wykorzystać te wartości systemowe w celu zoptymalizowania przetwarzania na tym etapie. Na przykład etap vs może wyszukać identyfikator wystąpienia, aby pobrać dodatkowe dane na wierzchołek cieniowania lub wykonać inne operacje; etapy GS i PS mogą używać identyfikatora pierwotnego, aby pobrać dane pierwotne w ten sam sposób.
WierzchołekID
Identyfikator wierzchołka jest używany przez każdy etap cieniowania do identyfikowania każdego wierzchołka. Jest to 32-bitowa liczba całkowita bez znaku, której wartość domyślna to 0. Jest przypisywany do wierzchołka, gdy element pierwotny jest przetwarzany przez etap IA. Dołącz semantykę identyfikatora wierzchołka do deklaracji wejściowej shadera, aby poinformować etap IA o konieczności generowania identyfikatora dla każdego wierzchołka.
IA doda identyfikator wierzchołka do każdego wierzchołka, aby mógł być używany przez etapy cieniowania. Dla każdego wywołania rysowania identyfikator wierzchołka jest zwiększany o 1. W przypadku wywołań indeksowanych rysowania licznik resetuje się do wartości początkowej. W przypadku ID3D11DeviceContext::DrawIndexed i ID3D11DeviceContext::DrawIndexedInstancedidentyfikator wierzchołka reprezentuje wartość indeksu. Jeśli identyfikator wierzchołka przepełnia się (przekracza 2³²– 1), zawija się do 0.
Dla wszystkich typów prymitywnych wierzchołki mają przypisany identyfikator wierzchołka (niezależnie od przylegania).
Identyfikator pierwotny
Identyfikator pierwotny jest używany przez każdy etap cieniowania do identyfikowania każdego elementu pierwotnego. Jest to 32-bitowa liczba całkowita bez znaku, której wartość domyślna to 0. Jest przypisywany do typu pierwotnego, gdy element pierwotny jest przetwarzany przez etap IA. Aby poinformować etap IA o wygenerowaniu identyfikatora pierwotnego, dołącz semantyczną semantyczną identyfikatora pierwotnego do deklaracji wejściowej cieniowania.
Etap IA doda identyfikator do każdego prymitywu do użycia przez cieniowanie geometryczne lub etap cieniowania pikseli, w zależności od tego, który z nich jest pierwszym aktywnym etapem po etapie IA. Dla każdego wywołania indeksowanego rysowania identyfikator pierwotny jest zwiększany o 1, jednak identyfikator pierwotny jest resetowany do wartości 0 za każdym razem, gdy rozpocznie się nowe wystąpienie. Wszystkie inne wywołania rysowania nie zmieniają wartości identyfikatora wystąpienia. Jeśli identyfikator wystąpienia przepełnia się (przekracza 2³²– 1), zawija się do 0.
Etap cieniowania pikseli nie ma oddzielnego danych wejściowych dla identyfikatora pierwotnego; jednak wszystkie dane wejściowe cieniowania pikseli, które określają identyfikator pierwotny, używają trybu interpolacji stałej.
Nie ma obsługi automatycznego generowania identyfikatora pierwotnego dla sąsiednich elementów pierwotnych. W przypadku prymitywów z sąsiedztwem, takich jak listwa trójkątowa z sąsiedztwem, identyfikator prymitywu jest utrzymywany tylko dla prymitywów wewnętrznych (nieprzyległych prymitywów), podobnie jak zestaw prymitywów w listwie trójkątowej bez sąsiedztwa.
Identyfikator wystąpienia
Każdy etap programu shader używa identyfikatora wystąpienia do identyfikacji geometrii, która jest aktualnie przetwarzana. Jest to 32-bitowa liczba całkowita bez znaku, której wartość domyślna to 0.
Etap IA doda identyfikator wystąpienia do każdego wierzchołka, jeśli deklaracja wejściowa cieniowania wierzchołka zawiera semantykę identyfikatora wystąpienia. Dla każdego wywołania indeksowanego rysowania identyfikator wystąpienia jest zwiększany o 1. Wszystkie inne wywołania rysowania nie zmieniają wartości identyfikatora wystąpienia. Jeśli identyfikator wystąpienia przepełnia się (przekracza 2³²– 1), zawija się do 0.
Przykład
Na poniższej ilustracji przedstawiono sposób przypisywania wartości systemowych do pasa trójkątów instancji na etapie IA.
Te tabele pokazują wartości systemowe wygenerowane dla obu wystąpień tego samego paska trójkąta. Pierwsze wystąpienie (wystąpienie U) jest wyświetlane na niebiesko, drugie wystąpienie (wystąpienie V) jest wyświetlane na zielono. Linie stałe łączą wierzchołki w prymitywach, linie przerywane łączą bliskie wierzchołki.
W poniższych tabelach przedstawiono wartości wygenerowane przez system dla wystąpienia U.
| Dane wierzchołka | C,U | D,U | E,U | F,U | G,U | H,U | I,U | J,U | K,U | L,U |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Wartość | Wartość | Wartość | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 0 | 0 | 0 |
W poniższych tabelach przedstawiono wartości wygenerowane przez system dla wystąpienia V.
| Dane wierzchołka | 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 |
| Wartość | Wartość | Wartość | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 1 | 1 | 1 |
Asembler wejściowy generuje identyfikatory (wierzchołek, prymityw i instancja); Należy również zauważyć, że każda instancja ma unikatowy identyfikator instancji. Dane kończą się cięciem paska, który oddziela poszczególne wystąpienia w pasku trójkątów.
Tematy pokrewne