rejestry ps_1_1__ps_1_2__ps_1_3__ps_1_4
Cieniowanie pikseli zależy od rejestrów w celu uzyskania danych wierzchołków, danych wyjściowych pikseli, przechowywania tymczasowych wyników podczas obliczeń i identyfikowania etapów próbkowania tekstury. Istnieje kilka typów rejestrów, z których każda ma unikatową funkcjonalność. Ta sekcja zawiera informacje referencyjne dotyczące rejestrów wejściowych i wyjściowych implementowanych przez 1_X wersji cieniowania pikseli.
Rejestruje dane do użycia przez cieniowanie pikseli. Rejestry są w pełni opisane w poniższych sekcjach.
- Typy rejestrów opisują cztery typy dostępnych rejestrów i ich cele.
- Przeczytaj temat Limit portów zawiera szczegółowe informacje o ograniczeniach dotyczących używania wielu rejestrów w jednej instrukcji.
- Tylko do odczytu zapis opisuje, które rejestry mogą być używane do odczytu, zapisu lub obu tych typów.
- Zakres zawiera szczegółowe informacje o zakresie danych składników.
Rejestrowanie typów
Nazwa | Typ | Wersja 1_1 | Wersja 1_2 | Wersja 1_3 | Wersja 1_4 |
---|---|---|---|---|---|
c# | Rejestr stały | 8 | 8 | 8 | 8 |
r# | Rejestr tymczasowy | 2 | 2 | 2 | 6 |
t# | Rejestr tekstur | 4 | 4 | 4 | 6 |
v# | Rejestr kolorów | 2 | 2 | 2 | 2 w fazie 2 |
Stałe rejestry zawierają stałe dane. Dane można załadować do rejestru stałego przy użyciu SetPixelShaderConstantF lub można je zdefiniować przy użyciu def - ps. Stałe rejestry nie mogą być używane przez instrukcje dotyczące adresów tekstury. Jedynym wyjątkiem jest texm3x3spec - ps instrukcji, która używa stałego rejestru do dostarczania wektora promienia oka.
Rejestry tymczasowe są używane do przechowywania wyników pośrednich. R0 dodatkowo służy jako dane wyjściowe cieniowania pikseli. Wartość w r0 na końcu cieniowania jest kolorem pikseli cieniowania.
Walidacja cieniowania zakończy się niepowodzeniem CreatePixelShader w dowolnym cieniatorze, który próbuje odczytać z rejestru tymczasowego, który nie został napisany przez poprzednią instrukcję. D3DXAssembleShader zakończy się niepowodzeniem, zakładając, że jest włączona walidacja (nie używaj D3DXSHADER_SKIPVALIDATION).
Rejestry tekstur
W przypadku cieniowania pikseli w wersji 1_1_1 do 1_3 rejestry tekstur zawierają dane tekstury lub współrzędne tekstury. Dane tekstury są ładowane do rejestru tekstur, gdy próbkowana jest tekstura. Próbkowanie tekstur używa współrzędnych tekstury do wyszukiwania lub próbki wartości koloru na określonych współrzędnych (u,v,w,q) przy uwzględnieniu atrybutów stanu etapu tekstury. Dane współrzędnych tekstury są interpolowane z danych współrzędnych tekstury wierzchołka i są skojarzone z określonym etapem tekstury. Istnieje domyślne skojarzenie "jeden do jednego" między numerem etapu tekstury i kolejnością deklaracji współrzędnych tekstury. Domyślnie pierwszy zestaw współrzędnych tekstury zdefiniowanych w formacie wierzchołka jest skojarzony z etapem tekstury 0.
W przypadku tych wersji cieniowania pikseli rejestry tekstur zachowują się tak jak rejestry tymczasowe, gdy są używane przez instrukcje arytmetyczne.
W przypadku cieniowania pikseli w wersji 1_4 rejestry tekstur (t#) zawierają dane współrzędnych tekstury tylko do odczytu. Oznacza to, że zestaw współrzędnych tekstury i numer etapu tekstury są niezależne od siebie. Numer etapu tekstury (z którego do próbkowania tekstury) jest określany przez numer rejestru docelowego (od r0 do r5). W przypadku instrukcji texld zestaw współrzędnych tekstury jest określany przez rejestr źródłowy (t0 do t5), więc zestaw współrzędnych tekstury można zamapować na dowolny etap tekstury. Ponadto rejestr źródłowy (określający współrzędne tekstury) dla texld może być również rejestrem tymczasowym (r#), w którym to przypadku zawartość rejestru tymczasowego jest używana jako współrzędne tekstury.
Rejestry kolorów zawierają wartości kolorów na piksel. Wartości są uzyskiwane przez iterację na piksel dla rozproszonych i spekulacyjnych wartości kolorów w danych wierzchołka. W przypadku cieniowania pikseli w wersji 1_4 rejestry kolorów są dostępne tylko w drugiej fazie.
Jeśli tryb cieniowania jest ustawiony na D3DSHADE_FLAT, iteracja obu kolorów wierzchołków (rozproszonych i specularnych) jest wyłączona. Niezależnie od trybu cieniowania mgła będzie nadal iterowana przez potok, jeśli mgła pikseli jest włączona. Należy pamiętać, że mgła jest stosowana później w potoku niż piksele.
Często można załadować rejestr v0 z danymi o kolorach rozproszonych wierzchołków. Często można również załadować rejestr w wersji 1 przy użyciu danych koloru widmowego wierzchołka.
Wartości danych koloru wejściowego są zaciśnięte (nasycone) do zakresu od 0 do 1, ponieważ jest to prawidłowy zakres danych wejściowych dla rejestrów kolorów w cieniatorze pikseli.
Cieniowania pikseli mają dostęp tylko do odczytu do rejestrów kolorów. Zawartość tych rejestrów to iteracji wartości, ale iteracja może być wykonywana z znacznie niższą dokładnością niż współrzędne tekstury.
Limit portów odczytu
Limit portów odczytu określa liczbę różnych rejestrów każdego typu rejestru, które mogą być używane jako rejestr źródłowy w jednej instrukcji.
Nazwa | Typ | Wersja 1_1 | Wersja 1_2 | Wersja 1_3 | Wersja 1_4 |
---|---|---|---|---|---|
c# | Rejestr stały | 2 | 2 | 2 | 2 |
r# | Rejestr tymczasowy | 2 | 2 | 2 | 3 |
t# | Rejestr tekstur | 2 | 3 | 3 | 1 |
v# | Rejestr kolorów | 2 | 2 | 2 | 2 w fazie 2 |
Na przykład rejestry kolorów dla prawie wszystkich wersji mają limit portów odczytu dwóch. Oznacza to, że pojedyncza instrukcja może używać maksymalnie dwóch różnych rejestrów kolorów (na przykład v0 i v1) jako rejestrów źródłowych. W tym przykładzie pokazano dwa rejestry kolorów używane w tej samej instrukcji:
mad r0, v1, c2, v0
Tylko do odczytu, odczyt/zapis
Typy rejestrów są identyfikowane zgodnie z możliwościami tylko do odczytu lub możliwością odczytu/zapisu (RW) w poniższej tabeli. Rejestry tylko do odczytu mogą być używane tylko jako rejestry źródłowe w instrukcji; nigdy nie mogą być używane jako rejestr docelowy.
Nazwa | Typ | Wersja 1_1 | Wersja 1_2 | Wersja 1_3 | Wersja 1_4 |
---|---|---|---|---|---|
Nazwa | Typ | 1_1 | 1_2 | 1_3 | 1_4 |
c# | Rejestr stały | RO | RO | RO | RO |
r# | Rejestr tymczasowy | RW | RW | RW | RW |
t# | Rejestr tekstur | RW | RW | RW | Zobacz następującą notatkę |
v# | Rejestr kolorów | RO | RO | RO | RO |
Rejestry, które są w stanie RW, mogą służyć do przechowywania wyników pośrednich. Obejmuje to rejestry tymczasowe i rejestry tekstur dla niektórych wersji cieniowania.
Nuta
- W przypadku cieniowania pikseli w wersji 1_4 rejestry tekstur są ro instrukcje adresowania tekstury, a rejestry tekstur nie mogą być odczytywane ani zapisywane przez instrukcje arytmetyczne. Ponadto ze względu na to, że rejestry tekstur stały się rejestrami współrzędnymi tekstury, uzyskanie dostępu ro nie jest regresją poprzedniej funkcjonalności.
Zakres
Zakres jest maksymalną i minimalną wartością danych rejestru. Zakresy różnią się w zależności od typu rejestru. Zakresy niektórych rejestrów można wykonywać na podstawie limitów urządzeń przy użyciu GetDeviceCaps.
Nazwa | Typ | Zakres | Wersje |
---|---|---|---|
c# | Rejestr stały | Od -1 do +1 | Wszystkie wersje |
r# | Rejestr tymczasowy | - PixelShader1xMaxValue do + PixelShader1xMaxValue | Wszystkie wersje |
t# | Rejestr tekstur | - MaxTextureRepeat to + MaxTextureRepeat | Wszystkie wersje |
v# | Rejestr kolorów | Od 0 do 1 | Wszystkie wersje |
Sprzęt wczesnego cieniowania pikseli reprezentuje dane w rejestrach przy użyciu numeru o stałym punkcie. Ogranicza to precyzję do maksymalnie ośmiu bitów dla części ułamkowej liczby. Pamiętaj o tym podczas projektowania cieniowania.
W przypadku cieniowania pikseli w wersji 1_1_1 do 1_3 maxTextureRepeat musi być co najmniej jeden. W przypadku wartości 1_4 wartość MaxTextureRepeat musi wynosić co najmniej osiem.
Aby uzyskać więcej informacji na temat funkcji PixelShader1xMaxValue, zobacz D3DCAPS9.
Tematy pokrewne