[ Pobierz całość w formacie PDF ]
niebieskiego rejestru wejÅ›ciowego. Selektor jest dost¹pny we wszystkich wersjach
shadera w wersji 1.1 i w wersjach pózniejszych.
Replikacja kanału Replikuje wartość kanału zielonego do wszystkich kanałów.
zielonego Dost¹pny jedynie w wersji 1.4.
Replikacja kanału Replikuje wartość kanału czerwonego do wszystkich kanałów.
czerwonego Dost¹pny jedynie w wersji 1.4.
Tabela 16.6. Modyfikatory instrukcji w mechanizmach pixel shader
Modyfikator Składnia Opis
Mnożenie przez 2 Ten modyfikator mnoży wynik instrukcji przez 2.
Mnożenie przez 4 Mnoży wynik przez 4.
Mnożenie przez 8 Mnoży wynik przez 8. Dost¹pny jedynie w wersji 1.4.
Dzielenie przez 2 Dzieli wynik przez 2.
Dzielenie przez 4 Dzieli wynik przez 4. Dost¹pny tylko w wersji 1.4.
Dzielenie przez 8 Dzieli wynik przez 8. Dost¹pny tylko w wersji 1.4.
Nasycenie Konwertuje wynik do zakresu 0,0 1,0. Modyfikator nasycenia zapewnia,
że wartoÅ›ci mieszczÄ… si¹ w poprawnym zakresie dla kolorów.
Ograniczenia i uwagi dotyczÄ…ce
stosowania mechanizmów pixel shader
Podobnie jak w przypadku mechanizmów vertex shader podstawowym ograniczeniem
mechanizmów pixel shader jest liczba instrukcji. Pixel shadery podlegają znacznie ostrzej-
szym ograniczeniom niż vertex shadery. W wersjach 1.1, 1.2 i 1.3 istnieje ograniczenie
do 4 instrukcji adresowania tekstur oraz 8 instrukcji arytmetycznych, co daje w sumie 12
instrukcji. Wersja 1.4 dopuszcza 8 instrukcji arytmetycznych oraz sześć instrukcji adreso-
wania tekstur dla każdego z dwóch etapów. W sumie daje to 28 dost¹pnych instrukcji. Jest
to ponad dwukrotna liczba instrukcji w porównaniu z wersjami poprzednimi, ale w dalszym
ciÄ…gu dużo mniejsza od liczby instrukcji dost¹pnych w mechanizmach vertex shader.
Chociaż istnieje ograniczenie co do liczby instrukcji adresowania oraz instrukcji aryt-
metycznych, to nie ma ograniczeń co do liczby instrukcji konfiguracyjnych . Instrukcje
, oraz nie zajmujÄ… dost¹pnego limitu liczby instrukcji.
Innym ograniczeniem jest liczba dost¹pnych rejestrów. W tabeli 16.7 zestawiono ogra-
niczenia liczby rejestrów dla wszystkich wersji mechanizmów pixel shader.
Rozdział 16. Mechanizmy pixel shader 271
Tabela 16.7. Ograniczenia liczby rejestrów w mechanizmach pixel shader
Typ rejestru Ograniczenie w wersjach 1.1 1.3 Ograniczenie w wersji 1.4
Rejestr koloru 2 2 (etap 2)
Rejestr tekstury 46
Rejestr stałych 88
Rejestr tymczasowy 26
Pixel shadery sÄ… ograniczone przez sprz¹t, na którym dziaÅ‚ajÄ…. Niektóre karty być może
w ogóle nie b¹dÄ… obsÅ‚ugiwaÅ‚y żadnej z wersji pixel shader. Inaczej niż w przypadku me-
chanizmów vertex shader, dla pixel shaderów nie ma akceptowalnej alternatywy pro-
gramowej. Jeżeli sprz¹t ich nie obsÅ‚uguje, wydajność jest przerazliwie niska. UrzÄ…dzenie
referencyjne może służyć do testowania kodu, ale nie do rzeczywistego wykorzystania.
Sprawdzanie dostępności
mechanizmów pixel shader
Podobnie jak w przypadku mechanizmów vertex shader, można sprawdzić, czy nasz
sprz¹t obsÅ‚uguje pixel shadery, poprzez wywoÅ‚anie metody . Struktura
zawiera pole typu . Wartość zawiera zarówno numer
wersji głównej, jak numery wersji pomocniczych. Najlepiej analizować znaczenie tej
wartości za pomocą makra :
Uzyskany numer wersji to wersja maksymalna. UrzÄ…dzenia obsÅ‚ugujÄ…ce danÄ… wersj¹
shadera powinny także obsługiwać wersje wcześniejsze. Jeżeli urządzenie nie obsługuje
mechanizmów pixel shader, być może konieczne b¹dzie opracowanie techniki zast¹p-
czej wykorzystującej operacje łączenia tekstur lub wyłączenie niektórych efektów. Jeżeli
mechanizmy pixel shader sÄ… dost¹pne, możemy zrobić krok naprzód i przystÄ…pić do
utworzenia shadera.
Asemblacja, tworzenie i wykorzystywanie
mechanizmów pixel shader
Asemblacja pixel shaderów jest działaniem podobnym do asemblacji vertex shaderów.
Należy wykorzystać to samo wywołanie funkcji (zobacz poprzedni
272 Część IV Mechanizmy shader
rozdziaÅ‚). Jeżeli skÅ‚adnia jest poprawna, to skompilowany shader znajdzie si¹ w buforze
shadera. Skompilowany shader może posłużyć do właściwego utworzenia shadera.
Kolejną czynnością jest wywołanie funkcji . Jest to funkcja podobna
do funkcji , ale niewymagajÄ…ca deklaracji. Pixel shadery zawsze
operujÄ… na wartoÅ›ci koloru skÅ‚adajÄ…cej si¹ z czterech komponentów, niezależnie od for-
matu tekstury lub bufora:
Uzyskany uchwyt może posłużyć do uaktywnienia wybranego shadera:
[ Pobierz całość w formacie PDF ]