W przypadku procesorów już wiemy jak będzie wyglądać najbliższa przyszłość. Wielordzeniowość, która ma zapewnić zwielokrotnienie mocy obliczeniowej przy tym samym zegarze. Jak natomiast wygląda sprawa układów graficznych ? Rozwój układów graficznych zmieża w kierunku general programming a pierwszym krokiem jest wprowadzenie do DirectX10 tzw. Unified Shader. Unified Shader wraz z SM4.0 (Shader Model) przygotowuje nam rewolucje w rysowaniu obiektów oraz w zarządzaniu zasobami. Ale zacznijmy po kolei…

W chwili obecnej, gdy rysowany jest jakiś obiekt 3d, przez kartę graficzną, to każdy przesyłany do karty wierzchołek, jest przetwarzany przez program VS (Vertex Shader) na zasadzie „jeden wierzchołek wchodzi, jeden wychodzi”. Te wierzchołki trafiają następnie do części geometrycznej układu, która składa z nich trójkąty, które są następnie rysowane punkt po punkcie na ekranie. Jednak zanim ten punkt trafi na ekran to zostanie on przetworzony przez program PS (Pixel Shader) również na zasadzie „jeden punkt wchodzi, jeden wychodzi”. To co stanowi główne ograniczenie to wyraźne oddzielenie, w specyfikacji, tych dwóch programów. VS posiada własny zestaw instrukcji, własny zestaw rejestrów, własny rodzaj i ilość danych wejściowych oraz wyjściowych. PS również posiada swój własny zestaw instrukcji , własne rejestry, własny rodzaj danych wejściowych i wyjściowych. Specyfikacja SM1.0, SM2.0 oraz SM3.0 (skrót SM pochodzi od Shader Model) jasno określa typ oraz ilość parametrów wchodzących i wychodzących z/do VS i PS. Niestety VS i PS różnią się od siebie tak bardzo, że sprawia to pewne problemy oraz ograniczenia. Dla przykładu dostęp do tekstur ma jedynie PS, mimo, że czasami bardzo wygodne oraz dające duże możliwości byłoby użycie tekstury w VS.

Pierwszym krokiem w przygotowywaniu do Unified Shader było wprowadzone już w SM3.0 możliwość korzystania z kilku wspólnych danych zarówno przez VS jak i PS. Np. VS uzyskał możliwość korzystania z tekstur, tych samych co PS. Jednak to był jedynie wstęp do tego co nas czeka w SM 4.0.

DX10 wprowadzając Unified Shader proponuje (jak nazwa wskazuje) ujednolicenie oraz zrównanie możliwościami VS oraz PS. Obydwa programy, VS i PS posiadają taką samą ilość rejestrów, otrzymują dostęp do tych samych danych, tych samych instrukcji. Stają się równorzędnymi jednostkami, których użycie przypomina teraz bardziej pisanie pod dwa wątki procesora a nie pod dwa zupełnie różne procesory. Podejście takie w znaczący sposób porządkuje pisanie programów dla GPU. To jednak nie koniec zmian. Wraz z US znoszone są ograniczenia co do ilości oraz typów wchodzących danych. Do tej pory można było przesłać do VS maksymalnie do 16 parametrów na jeden wierzchołek przy czym ich przeznaczenie było z góry ustalone przez specyfikację. W DX10 otrzymujemy możliwość zdefiniowania zupełnie dowolnego formatu wierzchołka, który teraz może się składać z dowolnej ilości danych ogólnego przeznaczenia. W pewnym sensie nie ma już oddzielnych VertexBuffer, IndexBuffer, czy Texture. Przed narysowaniem obiektu będzie trzeba teraz ustawić zasoby (Resource) z których będzie korzystać VS lub PS i chociaż nadal oddzielnie się ustawia zasoby dla VS i PS, to mogą to być te same zasoby i tego samego typu. Zasoby te mogą posłużyć jako źródło danych dla VS, PS, wierzchołków (nowa jednostka IA) oraz dla zupełnie nowej jednostki, która jest wprowadzona wraz z DX10 a jest nią Geometry Shader (GS). Geometry Shader tak jak VS i PS korzysta z dobrodziejstw Unified Shader czyli wspólne dane, wspólne instrukcje, takie same rejestry. Głównym przeznaczeniem GS jest tworzenie geometrii za pomocą danych dostarczonych przez silnik. W przeciwieństwie do VS, GS potrafi przetwarzać całe obiekty, a nie tylko wierzchołki, przekształcać te obiekty i wykorzystywać powtórnie w kolejnym przebiegu. Jednym z przykładów jest np. wygenerowanie z obiektu wejściowego, dodatkowego obiektu złożonego z samych „silhouette edges” i narysowanie tego obiektu w tym samym wywołaniu Draw(). Program GS umożliwia również tworzenie proceduralnych obiektów takich jak np. powierzchnie NURBS.

Dobrodziejstw jakie się pojawiają w DX10 jest bardzo dużo. Zmienią one nie tylko sposób tworzenia grafiki ale również sprzęt, który dzięki ujednoliceniu VS i PS pozwoli na kostrukcje prostszych oraz szybszych układów graficznych. Układ ATI użyty w Xbox360 korzysta już z Unified Shader dzięki czemu zamiast kilku jednostek VS i paru PS, posiada 48 jednostek ogólnego przeznaczenia.

Kończąc humorystycznie: to co można łatwo zauważyć, to fakt, że te wszystkie zmiany, już niedługo zaprowadzą nas, dość okrężną drogą, z powrotem do czasów softwarowych rendererów.

Jedność w grafice. Rzecz o Unified Shaders.
0 votes, 0.00 avg. rating (0% score)