17-07-2009
Czas 32 nanometrów
Biblioteki graficzne DirectX 10, DirectX 10.1 i DirectX 11
Od dziesi±tki do jedenastki
O bibliotekach graficzny DirectX s³ysza³ chyba ka¿dy u¿ytkownik peceta, który
choæby w najmniejszym stopniu interesuje siê komputerowymi grami. Bez DX-ów nie
obejdzie siê dzi¶ nawet najmniejsza napisana pod Windows aplikacja
multimedialna. Mo¿e nie wszyscy o tym wiedz±, ale s± one równie¿ niezbêdne do
uruchomienia graficznej pow³oki systemu Windows Vista – interfejsu Aero. W
specyfikacjach kart graficznych podkre¶la siê za¶ sprzêtow± zgodno¶æ z tak± czy
inn± ich wersj±. Spróbujmy zatem odpowiedzieæ na pytanie, czym s± owe tajemnicze
DirectX-y, za co odpowiadaj± one w systemie i co przynios³y ich nowe wersje
DX10, DX10.1 oraz czego mo¿na siê bêdzie spodziewaæ po wersji 11?
Wraz z rozwojem kart graficznych rozwija³y siê równie¿ biblioteki DirectX. Ich
pierwsza wersja pojawi³a siê ju¿ w 1995 roku wraz z debiutem Windows 95.
Stanowi³y one wówczas du¿y prze³om u³atwiaj±cy programistom tworzenie aplikacji
dzia³aj±cych w ten sam sposób na wszystkich dostêpnych wówczas modelach kart
graficznych i to bez potrzeby korzystania ze specyficznego dla ró¿nych
producentów akceleratorów 3D kodu.
Gdy Microsoft og³osi³ premierê systemu Windows Vista, do u¿ytkowników trafi³a
kolejna, mocno zmodyfikowana wersja DX-ów – DirectX 10. W lutym zesz³ego roku
gdy opublikowany zosta³ dodatek Service Pack 1 dla Visty, biblioteki DX zosta³y
ponownie uaktualnione. Pierwszymi obs³uguj±cymi sprzêtowo kartami zgodnymi z
DirectX 10.1 by³y akceleratory ATI z serii Radeon 3800 HD. Obecnie do grona
producentów sprzêtu zgodnego z DX 10.1 do³±czy³a równie¿ Nvidia, która nieca³y
miesi±c temu zaprezentowa³a nowe, 40-nanometrowe uk³ady graficzne dla komputerów
przeno¶nych. Chodzi tu o ko¶ci GTS 260M, GTS 250M, GT 240M, GT 230M oraz G210M.
Tymczasem Microsoft koñczy prace nad kolejn± wersj± bibliotek DirectX. DX 11.
Znajd± siê one w nowej ods³onie Windowsa – systemie Windows 7. Co wiêcej,
zarówno programi¶ci, twórcy gier komputerowych, jak i producenci sprzêtu ju¿ od
kilku miesiêcy mogli skorzystaæ z odpowiedniego pakietu deweloperskiego SDK,
który Microsoft udostêpni³ na swoich stronach (http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en).
DirectX – a có¿ to takiego
Na pocz±tku wyja¶nijmy czym s± w ogóle biblioteki graficzne. Obecnie powszechnie
wykorzystywane s± dwa standardy takich graficznych bibliotek – wspomniany
DirectX i OpenGL. Obydwie aplikacje to tak naprawdê (z punktu widzenia
programisty) modu³y graficznego interfejsu programistycznego API (Application
Programming Interface). Jak czê¶æ z Was z pewno¶ci± wie, w dowolnym API zawarte
s± wszystkie procedury, funkcje i interfejsy pozwalaj±ce, korzystaj±cej z danego
API aplikacji (np. grze lub programowi multimedialnemu), na sprawn± komunikacjê
zarówno z systemem operacyjnym, ró¿nego rodzaju bibliotekami systemowymi, jak i
sterownikami urz±dzeñ. Innymi s³owy w uproszczeniu, zarówno DirectX, jak i
OpenGL po¶rednicz± w wymianie informacji pomiêdzy np. gr±, a sterownikami karty
graficznej zainstalowanej w komputerze.

¬ród³o: GameProgramer.org
Nowym, niezale¿nym elementem w API DirectX 10 jest
DirectX Graphics Infrastructure (na rysunku: DXGI), który po¶redniczy w
wymianie danych miêdzy aplikacj±, a sterownikami. DXGI przej±³ na siebie czê¶æ
funkcji realizowanych wcze¶niej przez modu³ Direct3D (na rysunku D3D).
Co wiêcej, DirectX i OpenGL unifikuj± jednocze¶nie przy tym
mo¿liwy do wykorzystania zestaw poleceñ, rozkazów i instrukcji oraz wszelkie
procedury zwi±zane ze wszystkimi aspektami tworzenia obrazu 3D. Ma³o tego,
istnienie takich bibliotek jest bardzo wa¿ne z punktu widzenia programistów
przede wszystkim z jednego wzglêdu. Mog± oni skorzystaæ bowiem wy³±cznie z
poleceñ zawartych w API i nie musz± wówczas pisaæ kilku niekompatybilnych ze
sob± wersji tej samej aplikacji na powiedzmy karty firm Nvidia, AMD/ATI lub
uk³ady Intela. Po prostu, wystarczy, ¿e programista pos³u¿y siê poleceniami i
formatami danych dopuszczonymi przez dany interfejs API, a wynik na ekranie
bêdzie zawsze (przynajmniej w teorii, o czym za chwilê) ten sam, niezale¿nie od
typu akceleratora 3D znajduj±cego siê w pececie.

OpenGL i DirectX dzia³aj± na tym samy poziomie i
realizuj± zbli¿ony schemat generowania grafiki.
¬ród³o: OpenGL.org
W tym miejscu warto dodaæ, ¿e DirectX jest najpopularniejsz±
bibliotek± graficzn± w¶ród twórców gier. Znacznie mniej firm stosuje
konkurencyjnego, bazuj±cego na otwartych standardach OpenGL (pe³na nazwa to:
Open Graphics Library). Najbardziej znana, pos³uguj±ca siê ni± „growa” firma to
id Software, która stworzy³a m.in. legendarnego Quake’a i Dooma. OpenGL jest za¶
znacznie bardziej popularny w zastosowaniach profesjonalnych. Wiêkszo¶æ
zaawansowanych aplikacji in¿ynierskich i naukowych, ze wzglêdu na otwarto¶æ
standardu i jego obecno¶æ na ró¿nych platformach systemowych, korzysta z
OpenGL-a.
Sterowniki
Jak mo¿na siê domy¶liæ, „po drugiej stronie” bibliotek graficznych takich jak
DirectX czy OpenGL znajduje siê sterownik karty. Do zadañ driverów nale¿y przede
wszystkim zamiana instrukcji i danych p³yn±cych z interfejsu API na informacje
zrozumia³e bezpo¶rednio dla danego urz±dzenia. W wypadku kart graficznych,
sterownik powinien zostaæ dostarczony przez producenta procesora graficznego.
Wynika to z faktu, ¿e producenci najlepiej wiedz± jak poszczególne funkcje
graficzne i dane przetwarzane s± w potoku graficznym, który realizowany jest
bezpo¶rednio w GPU. Co wiêcej, ze wzglêdu na bardzo ostr± konkurencjê, nie
udzielaj± oni tego typu informacji firmom trzecim. St±d praktycznie nie istniej±
tworzone niezale¿nie od producenta sterowniki np. dla systemu Linux, lub s± one
nie do koñca tak wydajne i funkcjonalne jak firmowe drivery.

Umiejscowienie sterowników i graficznych API w warstwowym modelu systemu
operacyjnego.
¬ród³o: Wikipedia
Z drugiej strony nale¿y pamiêtaæ te¿ o tym, ¿e sterownik
powinien mieæ mo¿liwie jak najmniej „do roboty”. Je¶li tylko co¶ siê da
bezpo¶rednio lub z jak najmniejsz± ingerencj± driverów przenie¶æ z API do potoku
graficznego realizowanego w procesorze graficznym, tym lepiej, poniewa¿ operacje
graficzne bêd± przez kartê wykonywane wówczas najszybciej. Wynika to z faktu, ¿e
nie trzeba w takim wypadku zbyt mocno anga¿owaæ do transformacji danych i
instrukcji jednostki centralnej komputera. Z tego w³a¶nie powodu producenci
uk³adów 3D staraj± siê, ¿eby ich ko¶ci by³y jak najbardziej sprzêtowo zgodne z
bibliotekami graficznymi DirectX lub OpenGL. Co wiêcej, dobrze zaprojektowane
sterowniki potrafi± znacz±co przyspieszyæ dzia³anie karty. Bywa, ¿e kolejna,
lepiej zoptymalizowana wersja sterowników mo¿e byæ szybsza od poprzedniej wersji
nawet o kilkana¶cie procent! ¬le napisany sterownik potrafi za¶ spowolniæ
generowanie grafiki o 30–40%.


¬le pojêta optymalizacja sterowników pod wzglêdem ich wydajno¶ci prowadzi czasem
do gubienia czê¶ci efektów 3D. U góry, s³ynna kilka lat temu sprawa, gdy firma ATI w sterownikach do Radeona 8500
wprowadzi³a „optymalizacjê” polegaj±c± na tym, ¿e w grze Quake III celowo
zmniejszono dok³adno¶æ filtrowania tekstur po to, aby osi±gn±æ wy¿sz± wydajno¶æ
liczon± w fps-ach. Rysunek na dole przedstawia prawid³owo wygenerowan± klatkê
obrazu w grze Quake III.
Z powy¿szych powodów in¿ynierowie projektuj±cy uk³ady
graficzne, niezale¿nie od tego jak bardzo ich firmy ze sob± konkuruj±, zawsze
¶ci¶le wspó³pracuj± z programistami tworz±cymi taki czy inny API. Wspó³praca ma
miejsce zarówno przy tworzeniu OpenGL-a, jak i DirectX-a. Co wiêcej, wspólne,
miêdzyfirmowe zespo³y in¿ynierów z Nvidii, AMD/ATI i Intela oraz programistów z
Microsoftu i firm tworz±cych gry decyduj± równie¿ o tym, jak bêdzie wygl±da³a
kolejna wersja bibliotek DirectX i czy nale¿y wprowadziæ ju¿ do niej nowe efekty
graficzne, nowe elementy potoku graficznego, kolejne shadery, rejestry, sposoby
kompresji tekstur, algorytmy o¶wietlenia itp. Ma³o tego, w takim gronie zapadaj±
te¿ decyzje o tym jak powinny byæ realizowane i z jak± dok³adno¶ci± poszczególne
efekty. Oczywi¶cie nikt nie narzuca producentowi uk³adu graficznego drogi
realizacji danego efektu. Dlatego na przyk³ad efekty o¶wietlenia sceny mog± byæ
realizowane zarówno przez jednostkê T&L (Transform and Lighting), tak jak to
mia³o miejsce w starszych kartach, b±d¼ przez Vertex i Piksel Shadery, b±d¼
zunifikowane shadery. Programista pisz±cy grê wydaje komendê zgodn± z API,
sterowniki przekszta³caj± j± na ci±g instrukcji odpowiednich dla danej karty, a
na wyj¶ciu otrzymujemy za³o¿ony efekt – np. transformacjê piksela.
Okre¶lenie dok³adno¶ci realizacji poszczególnych algorytmów wykorzystywanych w
API do tworzenia sceny 3D jest istotne przede wszystkim z jednego powodu. Otó¿,
jak ju¿ wspomnia³em, szczegó³owa droga do tego, aby na ekranie uzyskaæ
odpowiedni efekt graficzny, zale¿y tylko i wy³±cznie od funkcji
zaimplementowanych w strukturze danego GPU. Programista w ogóle nie musi
wiedzieæ jak realizowana jest w strukturze GPU dana instrukcja i czy dane
przetwarzaj± np. modu³y T&L czy jednostki zunifikowane – on programuje element
zgodny z API na przyk³ad zaimplementowany w API vertex shader o ¶ci¶le
okre¶lonej li¶cie rozkazów i rejestrów, mimo, ¿e karta takowych w ogóle nie musi
fizycznie mieæ. To w³a¶nie okre¶lenie dok³adno¶ci realizacji poszczególnych
efektów 3D sprawia, ¿e mimo unifikacji wprowadzonej przez DirectX czy OpenGL,
obraz wygenerowany przez ró¿ne modele procesorów graficznych, nawet pochodz±cych
od tego samego producenta, mo¿e wygl±daæ zawsze nieco inaczej. Ró¿nice te nie s±
zwykle du¿e (trudno je czasem wrêcz zauwa¿yæ), ale zawsze musz± mie¶ciæ siê w
za³o¿onych przez standard granicach. Oczywi¶cie, projektanci uk³adów graficznych
wiedz±c jak ma wygl±daæ dany efekt, d±¿± te¿ do tego, aby to co zobaczymy na
ekranie, jak najbardziej zbli¿one by³o do za³o¿onego w specyfikacji wzorca.
Co ciekawe, niewiele osób o tym wie, ale czê¶æ funkcji obs³ugiwanych przez
biblioteki mo¿e w ogóle nie zostaæ zaimplementowana w danej ko¶ci graficznej.
Okazuje siê bowiem, ¿e do osi±gniêcia zgodno¶ci z dan± wersj± bibliotek
graficznych wystarczy to, ¿e karta wykonuje przewidziane w specyfikacji
podstawowe instrukcje i obs³uguje najwa¿niejsze formaty danych. W takim wypadku,
bardziej zaawansowane instrukcje mog± byæ albo pomijane, albo realizowane za
po¶rednictwem emulacji efektu w sterownikach, b±d¼ te¿, co ma miejsce
najczê¶ciej, zastêpowane s± innymi operacjami, z którymi radzi ju¿ sobie
sprzêtowo dany model GPU. Nie trzeba chyba dodawaæ, ¿e w takim wypadku koñcowy
obraz nie zawsze wygl±da ju¿ tak dobrze, jak za³o¿yli sobie twórcy gier. Co
wiêcej, emulacja efektu w sterownikach trwa zwykle znacznie d³u¿ej ni¿ w wypadku
jej sprzêtowej implementacji.


Mimo, ¿e formalnie dana karta graficzna jest zgodna z konkretn± wersj± bibliotek
DirectX, to nie musi ona wspieraæ wszystkich efektów. Wówczas wy¶wietlany obraz
odbiega od tego, generowanego przez kartê z pe³nym wsparciem dla tej wersji
DX-a. Widaæ to wyra¼nie na poni¿szym przyk³adzie. U góry FarCry (DirectX 9.0c)
na wbudowanym w chipset Intel 915G module graficznym GMA 900, który teoretycznie
jest zgodny z DX 9.0c, ale nie ma dla tych bibliotek pe³nego wsparcia
sprzêtowego oraz (u do³u) ta sama scena wy¶wietlana na Radeonie 9800.
Od DX 1.0 do DX 10
Jak ju¿ wspomnia³em wcze¶niej, pierwsza wersja bibliotek graficznych DirectX
zadebiutowa³a w sierpniu 1995 roku wraz z premier± systemu Windows 95.
Najwa¿niejsz±, rewolucyjn±, jak na owe czasy w³a¶ciwo¶ci± DX-ów by³o to, ¿e
porz±dkowa³y one sposób wy¶wietlania grafiki w ówczesnych aplikacjach 2D/3D i
umo¿liwi³y pisanie gier dla systemu Windows zastêpuj±c przy okazji znany z
Windows 3.11 stosunkowo prosty graficzny interfejs 2D o nazwie WinG. Z
dzisiejszej perspektywy wydaje siê to dziwne, ale trzeba pamiêtaæ, ¿e ówczesne
gry komputerowe korzysta³y z DOS-u i w³asnych, pisanych oddzielnie dla kart
ró¿nych producentów, procedur obs³ugi i generowania grafiki 3D.
Prze³omem w generowaniu grafiki 3D okaza³y siê jednak biblioteki DirectX 6.1 i
7.0, które pojawi³y siê odpowiednio w lutym i we wrze¶niu 1999 roku. Wprowadzono
w nich po raz pierwszy elementy klasycznego ju¿ dzisiaj modelu generowania
grafiki, polegaj±cego na obs³udze potoków renderuj±cych (DX 6.1) i sprzêtowego
wspomagania operacji geometrycznych i kalkulacji o¶wietlenia T&L (Transform and
Lighting) – DX 7.0. Od tego czasu mo¿emy tak naprawdê mówiæ o akceleratorach 3D,
w takim znaczeniu jak rozumiemy to obecnie. Karty graficzne przejê³y wówczas od
CPU czê¶æ, ale nie wszystkie, g³ównych elementów procesu generowania
trójwymiarowej grafiki – wcze¶niej odpowiada³y jedynie za akcelerowanie grafiki
2D, a przy tworzeniu grafiki 3D pe³ni³y jedynie funkcje bufora ramki.
Warto w tym miejscu przypomnieæ równie¿, ¿e pierwsz± zgodn± z DirectX 7.0, kart±
graficzn± obs³uguj±c± sprzêtowo T&L by³ GeForce 256 (nazwa GeForce to akronim od
angielskich s³ów Geometry Force). Wówczas to Nvidia wymy¶li³a te¿ termin GPU (Graphics
Processing Unit), analogiczny do skrótowca okre¶laj±cego procesor, CPU (Central
Processing Unit). Nazwa GPU mia³a wówczas sugerowaæ u¿ytkownikom pecetów i
komputerowym graczom, ¿e uk³ady graficzne s± jednostkami samodzielnie
przetwarzaj±cymi wiêkszo¶æ operacji w strumieniu graficznym, co jak siê okaza³o
po latach nie by³o wcale dalekie od prawdy, choæ z dzisiejszego punktu widzenia
u¿ywanie zadomowionego ju¿ na dobre terminu GPU w stosunku do GeForce’a 256 by³o
co nieco naci±gane.

Nvidia GeForce 256 to pierwsza karta z wbudowanym modu³em T&L i pierwszy
akcelerator zgodny z DirectX 7.0.
¬ród³o: Asus
W 2000 roku pojawi³a siê kolejna wersja bibliotek DirectX –
DirectX 8.0. Wprowadzi³a ona do kart graficznych model przetwarzania grafiki
bazuj±cy na cieniowaniu i programowalnych jednostkach Vertex i Pixel Shader. Co
ciekawe, DX 8.0 powsta³a przede wszystkim ze wzglêdu na potrzeby pierwszej
wersji konsoli do gier Microsoft Xbox. Jednostki Vertex i Pixel Shader mog± w
dowolny, wymy¶lony przez programistê sposób modyfikowaæ szkielet sceny, zmieniaæ
nak³adane na poszczególne obiekty tekstury, czy przekszta³caæ pojedyncze
piksele. Wszystko to odbywa siê ju¿ w trakcie przetwarzania tych elementów
w potoku graficznym. Co wiêcej, obiekty te mog± byæ te¿ zmieniane na gotowej
scenie 3D. Aby zmodyfikowaæ przetwarzane obiekty programista musi siê tylko
pos³u¿yæ krótkimi programami shaderowymi. Za pomoc± tych ma³ych programików
(proces programowania shaderowego przypomina proces programowania w jêzyku C)
twórca gry mo¿e stworzyæ w³asne, nieosi±galne w inny sposób efekty graficzne –
wszystko jest ograniczone tylko umiejêtno¶ciami i fantazj± programisty.
Oczywi¶cie, nic nie stoi na przeszkodzie aby ca³y czas korzystaæ z zaszytych w DirectX
standardowych funkcji. S± one dostêpne równie¿ w najnowszych bibliotekach
DirectX 11 – kolejne wersje bibliotek s± zawsze pod wzglêdem programistycznym,
ale niekoniecznie sprzêtowym, kompatybilne wstecz ze starszymi graficznymi API.
Wracaj±c na chwilê do terminu GPU, to tak naprawdê dopiero od chwili pojawienia
siê bibliotek DirectX 8.0 i zgodnych z nimi sprzêtowo kart graficznych mo¿na
mówiæ o przejêciu wszystkich istotnych funkcji strumienia graficznego przez
uk³ad graficzny. Dlatego te¿ z czystym sumieniem mianem graficznego procesora
GPU mo¿na nazywaæ tylko te uk³ady, które s± zgodne z t± lub wy¿sz± wersj±
graficznego API Microsoftu.
Sukcesywnie pojawiaj±ce siê na rynku nowe wersje bibliotek graficznych DirectX,
a wiêc 8.1, 9.0, 9.0a, 9.0b i 9.0c oraz zgodnych z nimi kart, wprowadza³y
kolejne ulepszenia i modyfikacje do architektury cieniowania. Pojawia³y siê, co
oczywiste, te¿ implementacje nowych funkcji 3D, rozszerzenia rejestrów,
rozszerzenia jêzyka shaderowego (np. zwiêkszenie liczby argumentów, pojawienie
siê skoków warunkowych, pêtli itp.) – wszystko to po to, aby u³atwiæ
programistom tworzenie gier 3D i pozwoliæ na coraz to wiêksze urealistycznienie
generowanej przez karty trójwymiarowej grafiki. Nie bêdê tych zmian omawia³
szczegó³owo, gdy¿ artyku³ musia³by siê bardzo mocno rozrosn±æ. Z niektórymi z
nich mo¿ecie zapoznaæ siê zerkaj±c do poni¿szej tabelki. Jednak na nastêpn± du¿±
zmianê przysz³o nam czekaæ do 30 listopada 2006 roku. Wtedy to oficjalnie
zaprezentowano biblioteki DirectX 10, które znalaz³y siê w systemie Microsoft
Windows Vista.


Ró¿nice miêdzy API DirectX 9.0c wykorzystywanym w Windows XP (u góry), a API
DirectX 10 z Windows Vista (u do³u).
¬ród³o: Microsoft
Tabela 1: Ewolucja modeli cieniowania w bibliotekach DirectX
- ¼ród³o: Nvidia
|
|
DirectX
8.1 (Shader Model 1.1)
|
DirectX
9.0 (Shader Model 2.0)
|
DirectX
9.0c (Shader Model 3.0)
|
DirectX
10 (Shader Model 4.0)
|
|
Instrukcje werteksowe
|
128
|
256
|
512
|
64 000
|
|
Instrukcje pikselowe
|
4+8
|
32+64
|
512
|
|
Sta³e rejestry werteksowe
|
96
|
256
|
256
|
16×4096
|
|
Sta³e rejestry pikselowe
|
8
|
32
|
224
|
|
Tymczasowe rejestry werteksowe
|
16
|
16
|
16
|
4096
|
|
Tymczasowe rejestry pikselowe
|
2
|
12
|
32
|
|
Werteksowe dane wej¶ciowe
|
16
|
16
|
16
|
16
|
|
Pikselowe dane wej¶ciowe
|
4+2
|
8+2
|
10
|
32
|
|
Liczba jednocze¶nie renderowanych obiektów
|
1
|
4
|
4
|
8
|
|
Liczba jednocze¶nie pobieranych tekstur przez modu³ Vertex
Shader (uwaga: tekstury s± pobierane z pamiêci przez modu³ Vertex)
|
niedostêpne
|
niedostêpne
|
4
|
128
|
|
Liczba jednocze¶nie przetwarzanych tekstur przez modu³
Pixel Shader
|
8
|
16
|
16
|
|
Rozmiar tekstur 2D
|
–
|
–
|
2000×2000 pikseli
|
8000×8000 pikseli
|
|
Operacje wewnêtrzne
|
–
|
–
|
–
|
tak
|
|
Pêtle wewnêtrzne
|
–
|
–
|
–
|
tak
|
|
Obliczanie pochodnych
|
–
|
–
|
tak
|
tak
|
|
Kontrola przep³ywu operacji werteksowych
|
niedostêpna
|
statyczna
|
statyczna lub dynamiczna
|
dynamiczna
|
|
Kontrola przep³ywu operacji pikselowych
|
niedostêpna
|
niedostêpna
|
statyczna lub dynamiczna
|
dynamiczna
|
DirectX 10 – przepisane na nowo
Biblioteki DirectX w wersji 10, jak zapewne pamiêtacie zosta³y napisane
praktycznie zupe³nie od nowa. Projekt ten znany by³y wcze¶niej pod trzema
równolegle funkcjonuj±cymi nazwami – Windows Graphics Foundation, DirectX 10
oraz DirectX Next. Ostatecznie przyjêta zosta³a ta druga nazwa, której z
przyzwyczajenia u¿ywa³a wiêkszo¶æ osób.
O napisaniu bibliotek od nowa zadecydowa³y przede wszystkim trzy fakty. Po
pierwsze by³y one tworzone od pocz±tku wy³±cznie z my¶l± o nowym systemie
operacyjny Windows Vista (bibliotek DX 10 i DX 10.1 nie ma dla Widows XP,
podobnie nie bêd± dostêpne równie¿ dla tego systemu DX 11). Po drugie, chciano
maksymalnie zmniejszyæ narzut interfejsu API na tworzenie grafiki (jest to tzw.
API overhead), co w znacz±cy sposób pozwala przyspieszyæ generowanie grafiki.
Obs³uga bibliotek graficznych, co oczywiste, wymaga zawsze pewnej mocy
obliczeniowej procesora. Jak twierdzi Microsoft, dotychczas narzut na graficzny
API zajmowa³ ok. 40 procent cykli procesora przeznaczonych na generowanie
grafiki, w DX10 jest to tylko ok. 20 procent.



Narzut ze strony sterownika w DirectX 9 i DirectX 10.
¬ród³o: ATI/AMD
Trzecim istotnym faktem wp³ywaj±cym na to, i¿ postanowiono
napisaæ graficzny API Windowsów od nowa by³o to, ¿e chciano siê przy okazji
pozbyæ wszystkich kumuluj±cych siê od czasów DirectX 6.1, trudnych do usuniêcia
w inny sposób ograniczeñ i ciê¿kich do wykrycia drobnych b³êdów powoduj±cych
niedok³adno¶ci i niejednoznaczno¶ci w generowaniu na ró¿nych kartach
trójwymiarowego obrazu. Co wiêcej, je¶li chodzi o obs³ugê sprzêtu to DirectX 10
ró¿ni± siê na tyle od swoich poprzedników, ¿e nie zachowano w nim
kompatybilno¶ci z poprzednimi bibliotekami graficznymi.
No dobrze, to w jaki zatem sposób Windows Vista wspó³pracuj± ze starszymi
kartami graficznymi? Problem ten rozwi±zano w najprostszy mo¿liwy sposób.
Okazuje siê bowiem, ¿e w Vistê wbudowano specjalne, bazuj±ce na DX 9.0c
biblioteki DirectX 9.0L (L od legacy – dziedziczenie), które to w³a¶nie
odpowiadaj± za wspó³pracê ze wszystkimi kartami poprzednich generacji. Co wa¿ne,
DirectX 9.0L i DirectX 10 nie maj± ze sob± ¿adnych wspólnych elementów. Innymi
s³owy, nale¿y je po prostu traktowaæ jako dwa odrêbne interfejsy API – DirectX
9.0L s³u¿y jedynie do obs³ugi starszych kart, a DirectX 10 to API wspó³pracuj±cy
tylko i wy³±cznie ze zgodnymi z nim akceleratorami nowej generacji.
DX10 – w ¶rodku w zasadzie bez zmian
Je¶li chodzi o nowo¶ci wprowadzone przez Microsoft w DirectX 10, to z punktu
widzenia programisty mo¿na je nazwaæ kosmetycznymi. Wszystkie efekty realizowane
w DX 10 mo¿na bowiem z powodzeniem zrealizowaæ równie¿ korzystaj±c z bibliotek
DX 9. Programista musi siê tutaj pisz±c aplikacjê trochê wiêcej napracowaæ.
Wymagana jest te¿ niekiedy wiêksza liczba operacji realizowanych przede
wszystkim przez CPU. Niemniej uzyskany efekt w DX9 bêdzie dok³adnie taki sam jak
w DX10, z t± ró¿nic±, ¿e w tym drugim wypadku gra powstanie znacznie szybciej.
Wiêkszo¶æ publikowanych w Internecie i w prasie zrzutów porównuj±cych mo¿liwo¶ci
DX10 i DX9 (dwa z nich pokazujemy poni¿ej) nale¿y zatem uznaæ za nieco naci±gane
pod wzglêdem marketingowym – podobnie jak porównania DX10 i DX11, o czym nieco
dalej. Programy w DX9 i DX10 oferuj±ce podobne efekty bêd± zatem dzia³a³y mniej
wiêcej z podobn± wydajno¶ci± (oczywi¶cie, je¶li bêd± uruchamiane na tym samym
typie karty zgodnej zarówno z DX9, jak i DX10). Z punktu widzenia u¿ytkownika
nie ma zatem ró¿nicy, które biblioteki zosta³y u¿yte. Natomiast du¿e ró¿nice s±
w³a¶nie od strony programowej. Po prostu ¿eby uzyskaæ ten sam efekt w DX10,
programista musi siê znacznie mniej namêczyæ ni¿ w wypadku DirectX 9. Gra na
DX10 powstanie te¿ szybciej. Wyj±tek od tego co napisa³em powy¿ej stanowi± tylko
efekty fizyczne realizowane przez pojawiaj±ce siê w DirectX 10 Geometry Shader,
o czym za chwilê.


Porównanie efektów graficznych uzyskanych za pomoc± bibliotek DirectX 9.0 i
DirectX 10.
¬ród³o: Techland
Najwa¿niejsz± wprowadzon± w programistycznych mechanizmach
DirectX 10 zmian± jest wprowadzenie nowych pojemniejszych tablic tekstur (texture
arrays), mieszcz±ce do 512 pojedynczych tekstur oraz zaimplementowanie
dodatkowych mechanizmów obs³ugi strumienia danych (stream out). Te ostatnie
pozwalaj± wys³aæ w dowolnej chwili rezultaty pracy jednostek przetwarzania
geometrii wprost do pamiêci karty. Zoptymalizowano równie¿ algorytmy zarz±dzania
dostêpnymi równie¿ w DirectX 9 nieco mniej pojemnymi tablicami tekstur (do 128
lub 256, w zale¿no¶ci od formatu), zmieniono i przyspieszono procedury rysowania
z wyprzedzeniem (predicated draw) i wysy³ania strumienia danych. Co wa¿ne,
wymagaj± one teraz znacznie mniej „obs³ugowych cykli” ze strony jednostki
centralnej.

W DirectX 10 niezachowano kompatybilno¶ci sprzêtowo-programowej z wcze¶niejszymi
wersjami graficznego API. Wynika to przede wszystkim ze zmienionej architektury
systemu Windows Vista. Dziêki temu uda³o siê wyeliminowaæ wiele problemów
zwi±zanych z dziedziczeniem b³êdów komunikacyjnych na styku sterowników, API i
procedur zarz±dzaj±cych zasobami systemowymi.
We wcze¶niejszych ni¿ DX 10 API obowi±zywa³ te¿, nazwijmy go
mo¿e „nieformalnym limitem” liczby obiektów wy¶wietlanych jednocze¶nie na scenie
3D oraz operacji wykonywanych na obrazie, takich jak zamiana tekstur, formatu
danych dla jednostek Vertex i Pixel Shader i trybów mieszanych. Istotne jest
tutaj to, ¿e za obiekt uwa¿a siê w takim wypadku nie tyle pojedynczy trójk±t,
czy wielok±t, ale z³o¿on± z nich wiêksz± bry³ê np. ca³± postaæ lub jej fragment
(typu rêka, noga, g³owa), kamieñ, drzewo, samochód, górê, rzekê itp. Wszystko co
na scenie 3D mo¿na skalowaæ przesuwaæ i obracaæ, traktowane jest tutaj jako
ca³o¶æ. Ka¿dy z tych obiektów mo¿e za¶ sk³adaæ siê z dowolnej, nielimitowanej
liczby (przewa¿nie kilkuset tysiêcy lub nawet paru milionów) trójk±tów.
Ograniczenie za¶ tych obiektów do podawanej w wielu ¼ród³ach liczby piêciuset,
spowodowane by³o tylko i wy³±cznie niewydolno¶ci± procedur komunikacyjnych
miêdzy kart± graficzn± i CPU, w których to po¶redniczy³ API. Oczywi¶cie mo¿na
by³o wstawiæ na scenê wiêcej obiektów, ale procesor zbyt mocno siê wówczas
„przytyka³”. Przepisanie na nowo DX-a wyeliminowa³o ten b³±d i obecnie nie
trzeba ju¿ np. tworzyæ gêstego lasu z kilku modeli drzew, kopiuj±c ro¶liny w
ró¿ne miejsca, ale ka¿de drzewo mo¿e byæ teraz oddzielnym, niepowtarzalnym
obiektem. Jedynym ograniczeniem w tworzeniu liczby obiektów jest obecnie
wy³±cznie rzeczywista wydajno¶æ tandemu GPU i CPU, a nie sztuczny limit
narzucony przez API.
Shader Model 4.0
Wraz z DirectX 10 pojawi³ siê równie¿ nowy model cieniowania – Shader Model 4.0.
Przede wszystkim jest on znacznie bardzie elastyczny ni¿ zaimplementowany w
bibliotekach DX 9.0. Shader Model 3.0. Programi¶ci tworz±cy programy shaderowe
maj± w nim do dyspozycji znacznie wiêcej rejestrów – ich liczba wzros³a z 256 do
65536. Rejestry te zosta³y pogrupowane w bloki 16 buforów z 4096 rejestrami
ka¿dy. Wzros³a te¿ liczba rejestrów tymczasowych – z 32 do 4096.
Kolejn± modyfikacj± wprowadzon± w modelu cieniowania SM 4.0 jest zwiêkszony
rozmiar obs³ugiwanych tekstur. W DirectX 9.0c tekstury mog± mieæ maksymalny
rozmiar 4096×4096 pikseli, a w DX10 jest to 8192×8192 punktów. Je¶li chodzi o
tekstury to, zwiêkszona zosta³a równie¿ liczba obiektów, które mog± byæ
jednocze¶nie renderowane z wykorzystaniem techniki MRT (Multiple Render Targets),
polegaj±cej na nak³adaniu tej samej bitmapy jednocze¶nie na wiele obiektów
znajduj±cych siê na scenie 3D. W DX 9.0 jedna tekstura mog³a byæ nak³adana
jednocze¶nie na cztery obiekty, w DX 10 obiektów mo¿e byæ osiem. W DX 10
wprowadzono te¿ tablice tekstur (texture arrays) mieszcz±ce do 512 pojedynczych
bitmap. Wprowadzono równie¿ dwa nowe formaty danych u¿ywanych podczas renderingu
HDR (High Dynamic Range). Pierwszy z nich oznaczony symbolem R11G11B10
dostosowany jest do tekstur. W formacie tym barwa czerwona i zielona zapisane s±
z 11-bitow± dok³adno¶ci±. Kolor niebiesk± nadal opisany jest z 10-bitow±
dok³adno¶ci±. Drugi format HDR jest nieco bardziej skomplikowany w opisie. U¿ywa
siê tutaj bowiem u¿ywa cyfr o piêciobitowej dok³adno¶ci, stanowi±cych wyk³adnik
potêgi opisuj±cej ka¿dy kolor mantys± o dziewiêciobitowej dok³adno¶ci – uff,
brzmi to nieco skomplikowanie :-). Niemniej, w rezultacie oba formaty pozwalaj±
na lepsze „kolorowe” odwzorowanie obiektów podczas renderowania sceny z
wykorzystaniem techniki HDR.

Przyk³ad wykorzystania nowy formatów tekstur.
¬ród³o: ATI/AMD
Efekty, efekty, efekty
W bibliotekach DirectX 10 pojawi³o siê te¿ kilka nowych efektów 3D. Oczywi¶cie,
porównywalne rezultaty osi±gnie siê te¿ innymi metodami np. korzystaj±c z Pixel
i Vertex Shaderów, niemniej zaimplementowane w DX10 procedury daj± oczekiwane
rezultaty znacznie szybciej i pro¶ciej ni¿ w wypadku korzystania z mechanizmów
zawartych w starszych wersjach DX-ów. Lista dodanych efektów nie jest du¿a,
omówmy je zatem w ca³o¶ci po kolei.
Przegl±d nowych efektów zacznijmy od instancingu, który co prawda pojawi³ siê
ju¿ w bibliotekach DirectX 9, ale w DX10 zosta³ znacznie usprawniony. Instancing
to nic innego, jak mechanizm pozwalaj±cy na rysowanie obiektów na scenie 3D w
za³o¿onych przez programistê lub przypadkowych miejscach przy wykorzystaniu
przygotowanych uprzednio obiektów, które mog± byæ zmniejszane, obracane,
przechylane itp. Innymi s³owy, wystarczy przygotowaæ sobie np. (patrz: rysunek)
jeden obiekt w postaci drzewa, po czym w buforze instancingu zawrzeæ listê zadañ
do wykonania, które maj± byæ zrealizowane podczas rysowania ka¿dej kopii tego¿
obiektu na scenie 3D.
Karta graficzna automatycznie, zgodnie z zawartymi w buforze instrukcjami np.
wygina przygotowane przez nas drzewo, obróci je, zmniejszy, wyd³u¿y, przeskaluje
itp. dziêki czemu „za jednym zamachem” mo¿emy rozmie¶ciæ na scenie 3D ca³y las,
w którym ka¿de drzewo bêdzie nieco inne. Co wa¿ne, przy u¿yciu instancingu da
siê przes³aæ dane dotycz±ce drzewa w jednej paczce, za pomoc± jednego wywo³ania
CPU. Procesor graficzny rysuje sobie wówczas nasz przyk³adowy las sk³adaj±cy siê
z kilku tysiêcy drzew, sam bez pomocy CPU, który w tym czasie mo¿e zaj±æ siê
innymi zadaniami. Znika tu zatem konieczno¶æ oczekiwanie przez procesor
komputera na narysowanie ka¿dego obiektu oraz za ka¿dym razem pojedynczego
ustawiania parametrów dotycz±cych rysowanego obiektu w karcie graficznej przez
procesor. Jest to ogromny zysk. Usprawnienie technologii instancingu w DX10
polega na tym, ¿e do automatycznego rysowania obiektów mo¿na teraz wykorzystywaæ
ró¿ne tekstury.


Dzia³anie instancingu. ¬ród³o: Microsoft/Nvidia
Podobnie dzia³a wprowadzony z DirectX 10 mechanizm
proceduralnej symulacji wzrostu (Procedural Growth Simulation). Dziêki niemu
mo¿na renderowaæ ro¶liny nale¿±ce do wodnych ekosystemów (niestety, wzrost
ro¶lin l±dowych jest bardziej skomplikowany i jego symulacja wymaga interwencji
CPU) oraz, co wa¿ne, symulowaæ ich wzrost i zachodz±ce w nich zmiany za pomoc±
dos³ownie kilku instrukcji obs³ugiwanych przez DirectX 10 bez udzia³u jednostki
centralnej komputera – symulacj± zajmuje siê jedynie GPU.

Proceduralna symulacja wzrostu. ¬ród³o: Microsoft
Kolejnym efektem, który znalaz³ siê w bibliotekach DirectX 10
jest punktowe mapowanie przemieszczeñ (Per-pixel Displacement Mapping). Jest to
modyfikacja znanego z DirectX 8 mapowania kierunkowego (Parallax Mapping). W
pierwszym kroku obliczana jest mapa wysoko¶ci. Obrazuje ona wszystkie
nierówno¶ci i chropowato¶æ powierzchni obiektu. Mapê t± ³±czy siê nastêpnie z
nak³adan± na przedmiot tekstur±. Punktowe mapowanie przemieszczeñ ró¿ni siê od
tradycyjnego mapowania kierunkowego tym, ¿e odwzorowuje nierówno¶ci wy³±cznie w
tych miejscach, które s± widoczne dla obserwatora. W ten sposób koñcowy efekt
uzyskiwany jest znacznie szybciej, co nie znaczy, ¿e star± technik± nie
osi±gniemy porównywalnych efektów koñcowych.

Punktowe mapowanie przemieszczeñ. ¬ród³o: Microsoft
Ostatnim z wprowadzonych w DX10 efektów jest Alpha to
Coverage. Metoda ta jest wykorzystywana do wyg³adzania krawêdzi drobnych
obiektów znajduj±cych siê wewn±trz pó³przezroczystych tekstur. Tego typu
pó³przezroczyste tekstury wykorzystuje siê do rysowania siatek ogrodzeñ, ró¿nych
wisz±cych oraz drobnych ro¶lin, takich jak na przyk³ad ¼d¼b³a trawy. Alpha to
Coverage pozwala bardzo szybko wyg³adziæ krawêdzie wspomnianych obiektów bez
anga¿owania du¿ej mocy obliczeniowej. Co wa¿ne, wyg³adzanie obiektów
znajduj±cych siê wewn±trz tekstury wykonywane jest przed na³o¿eniem ich na scenê
3D. Dziêki temu, antyaliasingowane pó³przezroczyste tekstury z ma³ymi obiektami
mog± byæ wielokrotnie nak³adane na scenê lub, dziêki umieszczaniu ich w pamiêci
karty, u¿yte do mapowania kolejnych scen.

Przyk³ad wykorzystania techniki Alpha to Coverage na krawêdzi kory drzewa.
¬ród³o: Nvidia
Clou programu – zunifikowane shadery i shadery geometrii
Jedn± z najwa¿niejszych zmian wprowadzonych w bibliotekach graficznych DirectX
10 jest mo¿liwo¶æ optymalnego wykorzystania architektury kart graficznych
bazuj±cych na zunifikowanych shaderach (Unified Shaders). Zunifikowane shadery
mog± wykonywaæ, w zale¿no¶ci od potrzeb, zarówno operacje przetwarzania
wielok±tów, jak i pikseli, które realizowane do tej pory by³y przez jednostki
Vertex i Pixel Shader. Innymi s³owy operacje werteksowe i pikselowe w
bibliotekach graficznych DirectX 10 po³±czono w jedn± fazê przetwarzania sceny
3D. Nie znaczy to jednak, ¿e programista pisz±c grê czy inn± aplikacjê „widzi”
zunifikowane jednostki. Przy programowaniu korzysta on dalej z tradycyjnego
modelu Vertex i Pixel Shaderów, za¶ o wykonywaniu danej zunifikowanej jednostki
do obróbki werteksów czy pikseli decyduje sterownik karty i mechanizmy
przydzia³u zadañ zawarte bezpo¶rednio w graficznym procesorze.


Idea wykorzystania zunifikowanych shaderów.
¬ród³o: Nvidia
W tym miejscu warto dodaæ, ¿e nie ka¿da karta graficzna
zgodna z DX10 musi koniecznie korzystaæ ze zunifikowanej architektury shaderów.
Bez problemu mo¿e ona byæ wykonana w tradycyjnej architekturze z oddzielnymi
jednostkami Vertex i Pixel Shader. W takim wypadku za rozseparowanie ci±gu
operacji geometryczno-pikselowych odpowiadaæ sterownik urz±dzenia. Niestety
wi±¿e siê to z dodatkowym obci±¿eniem CPU, który te¿ bêdzie musia³ emulowaæ
operacje wykonywane na shaderach geometrii, o których za chwilê.
Architektura zunifikowanych shaderów zadebiutowa³a wraz z GeForce’m 8800. Owa
architektura to nic innego jak architektura i jednocze¶nie technologia CUDA (Compute
Unified Device Architecture), w której to wykorzystuje siê znajduj±ce siê w GPU
specjalne jednostki obliczeniowe Je¶li chodzi o karty AMD/ATI to podobne
rozwi±zanie o nazwie Unified Shaders znalaz³o siê po raz pierwszy w Radeonie HD
2900 XT. W sumie, zdecydowana wiêkszo¶æ wspó³czesnych kart graficznych, nawet
tych zgodnych tylko z bibliotekami graficznymi DirectX 9.0 korzysta z
technologii zunifikowanych shaderów. Mo¿na powiedzieæ, ¿e DirectX 10
usankcjonowa³ tylko to rozwi±zanie technologiczne.
Jednak DX 10 to nie tylko zunifikowane shadery zastêpuj±ce we wnêtrzu uk³adu
graficznego Vertex i Pixel Shadery. Jak siê okazuje biblioteki DirectX 10
wymagaj± jeszcze bowiem dodatkowych jednostek cieniowania, zaimplementowanych w
GPU. Zgodnie ze specyfikacj± nowego DX-a, w potoku graficznym miêdzy Vertex a
Pixel Shaderem musi siê znale¼æ modu³ obliczeñ geometrycznych – Geometry Shader.
Ta nowa jednostka obliczeniowa odpowiada m.in. za ³±czenie wierzcho³ków, a tak¿e
mo¿e scalaæ szereg tworz±cych scenê 3D trójk±tów w pasy (lub bardziej
skomplikowane struktury), a nastêpnie przeprowadzaæ obliczenia fizyczne zwi±zane
z ich ruchem. Takie po³±czone ze sob± paski mog± zostaæ np. wykorzystane do
odtworzenia falowania trawy, zachowania siê w³osów, tkanin, powiewania flag na
wietrze, uk³adania siê dymu itp. Shadery geometryczne odpowiadaj± te¿, ¿e
generowanie tzw. cieni szablonowych (Stencil Shadow). Wszystkie wymienione
powy¿ej operacje wykonywane by³y dot±d, czyli np. w wypadku kart zgodnych z DX
9.0c na CPU. Dziêki Geometry Shaderom znacznie ³atwiejsze (i szybsze) sta³o siê
odwzorowanie przemieszczeñ (Displacement Mapping), wyt³aczanie cieni
szablonowych (Stencil Shadow Extrusion) czy tworzenie obiektów „duszków” (point-sprite).

Potok graficzny w DirectX 10. ¬ród³o: Nvidia
Oczywi¶cie, symulacja Geometry Shadera przez sterowniki i
procesor komputera jest jak najbardziej mo¿liwa – w zasadzie operacje
geometryczne w bibliotekach DirectX 9 w ten sposób s± ca³y czas realizowane, ale
przy bardziej skomplikowanych grach czy programach pisanych ju¿ pod DX10,
emuluj±c operacje geometryczne na procesorze mo¿e siê bardzo szybko okazaæ, ¿e
zabraknie nam po prostu mocy obliczeniowej CPU do wykonywania innych zadañ.
In¿ynierowie zajmuj±cy siê kartami graficznymi i twórcy bibliotek DirectX 10,
podkre¶laj± dwie zalety po³±czenia w jedn± fazê obliczeniow± wszystkich
kalkulacji geometrycznych i operacji prowadzonych na pikselach (patrz: powy¿sze
schematy). Okazuje siê bowiem, ¿e w dotychczasowym modelu generowania sceny 3D
bardzo czêsto wszystkie jednostki Vertex Shader by³y zajête obliczeniami, a
Pixel Shadery bezczynnie przez kilkana¶cie cykli zegarowych oczekiwa³y na
potrzebne dane geometryczne. Zdarzaj± siê te¿ sytuacje odwrotne, gdzie na
informacje czekaj± jednostki werteksowe. W zunifikowanej architekturze shaderów,
teoretycznie nie powinno byæ tego typu przestojów, gdy¿ ka¿da jednostka w GPU w
zale¿no¶ci od potrzeb mo¿e zaj±æ siê jednym lub drugim typem obliczeñ. Dziêki
temu w prosty sposób zwiêksza siê nie tylko sumaryczna wydajno¶æ ca³ego
procesora graficznego, ale równie¿ drastycznie maleje liczba pustych przebiegów.
Drug± przyczyn± wprowadzenia, i usystematyzowania zunifikowanej architektury
shaderów jest mo¿liwo¶æ wykorzystania niezale¿nie programowanych i uniwersalnych
jednostek do zaawansowanych obliczeñ w ogóle nie zwi±zanych z grafik± – patrz:
artyku³ o technologii CUDA (http://www.frazpc.pl/artykuly/704/Technologia/Obliczenia/prowadzone/za/pomoca/kart/graficznych).


Przyk³ad wykorzystania zunifikowanych shaderów do obliczenia fizyki zachowania
siê wody (u góry) i dymu (u do³u).
¬ród³o: Nvidia
Czas DirectX-a 10.1
Po tym obszernym omówieniu bibliotek DirectX 10, przejd¼my teraz do
przedstawienia ich nowszej wersji. Pojawi³a siê ona na rynku wraz z Service
Packiem 1 do systemu Windows Vista. Uprzedzaj±c pytania, DirectX 9.0L nie uleg³
przy tym ¿adnym modyfikacjom. Pierwszymi kartami graficznymi zgodnymi sta³y siê
DX 10.1 akceleratory 3D firmy ATI/AMD z serii Radeon 3800 HD. Nvidia bardzo
d³ugo „broni³a siê” przed nowym standardem, dopiero, jak wspomnia³em na pocz±tku
nowe graficzne uk³ady mobilne GTS 260M, GTS 250M, GT 240M, GT 230M oraz G210M s±
z nimi kompatybilne. Kolejne, nowe rodziny uk³adów zarówno Nvidii, jaki i ATI/AMD,
jak te¿ ko¶ci Larrabee Intela maj± byæ ju¿ zgodne wy³±cznie z nowym API –
DirectX 11, który, wszystko ju¿ na to wskazuje, zadebiutuje tegoroczn± jesieni±.
Wróæmy jednak do obowi±zuj±cego obecnie standardu DX 10.1. Patrz±c na
dokumentacjê, wyra¼nie widaæ, ¿e wprowadzone zmiany mia³y u¶ci¶liæ precyzjê
realizowanych przez API funkcji i obliczeñ, udoskonaliæ operacje cieniowania i
nak³adania tekstur oraz usprawniæ procedury antyaliasingu. Co wa¿ne, w nowej
rewizja bibliotek graficznych DX 10.1 okre¶lono spor± listê funkcji, które w DX
10 karty graficzne mog³y dot±d obs³ugiwaæ opcjonalnie, a teraz musz± byæ one
zaimplementowane obowi±zkowo.
Precyzja obliczeniowa
Najwa¿niejsz± zmiana dotycz±c± precyzji wykonywanych przez kartê graficzn±
obliczeñ podczas generowania sceny 3D, jest to wprowadzenie zmiennoprzecinkowego
filtrowania 128-bitowych tekstur przy wykorzystaniu 32-bitowej dok³adno¶ci. W DX
10 stosowana jest precyzja 16-bitowa. Kolejnym zwiêkszeniem dok³adno¶ci jest
wprowadzenie 16-bitowej precyzji przy okre¶laniu przezroczysto¶ci pikseli
opisanych 64-bitowymi liczbami ca³kowitymi. Taka dok³adno¶æ, w bibliotekach DX
10 by³a w³a¶ciwo¶ci± tylko opcjonaln±.
Wa¿nym zwiêkszeniem precyzji obliczeñ realizowanych przez karty graficzne zgodne
z DX 10.1 jest zwiêkszenie we wszystkich operacjach zmiennoprzecinkowych takich
jak dodawanie, odejmowanie, mno¿enie i dzielenie dok³adno¶ci zaokr±gleñ
ostatniego miejsca po przecinku o pó³ warto¶ci w górê. S± to operacje 0.5 ULP
(Unit in the Last Place), których wymaga uzyskanie zgodno¶ci z normami IEEE
dotycz±cymi dok³adno¶ci obliczeñ numerycznych realizowanych na procesorach
obliczeniowych. Zgodno¶æ t± wprowadzono ze wzglêdu na coraz czêstsze stosowanie
kart graficznych w obliczeniach nie zwi±zanych z grafik±.
Z precyzj± obliczeniow± zwi±zane s± te¿ nowe algorytmy wyg³adzania krawêdzi.
Karty graficzne zgodne z DX 10.1 musza obowi±zkowo obs³ugiwaæ antyaliasing
wykonywany metod± multipróbkowania MSAA (Multi-Sample Anti-Aliasing) pobieraj±c
przynajmniej cztery próbki warto¶ci s±siednich pikseli przypadaj±ce na jeden
wyg³adzany punkt obrazu. Obliczenia te musz± byæ prowadzone niezale¿nie, czy
piksele s± zapisane z 32-, czy z 64-bitow± precyzj±. Zestandaryzowane zosta³y
te¿ szablony s³u¿±ce do próbkowania punktów wykorzystywanych przy pe³noekranowym
antyaliasingu (FSAA – Full Scene Anty-Aliasing). Szablony te obowi±zuj± w
trybach FSAA 2x, 4x, 8x i 16x. Dziêki temu wyg³adzanie powinno wygl±daæ teraz
tak samo niezale¿nie od modelu z DX 10.1 realizuj±cego je uk³adu graficznego.

Zwiêkszona dok³adno¶æ antyaliasingu. ¬ród³o: ATI/AMD
W tym miejscu trzeba te¿ wspomnieæ o tym, ¿e w bibliotekach
graficznych DirectX 10.1 wprowadzono trzy nowe funkcjonalno¶ci zwi±zane z
atyaliasingiem. Pierwsz± z nich jest bufor zapisu/odczytu danych przy
wyg³adzaniu krawêdzi wykorzystuj±cego multipróbkowanie. Pozwala on na
przechowywanie indywidualnych warto¶ci odczytanych dla ka¿dego punktu. W kartach
graficznych zgodnych z DX 10 przechowywana by³a jedna warto¶æ ¶rednia otrzymana
dla wszystkich próbkowanych pikseli. Drug± jest funkcj± Pixel Coverage Masks. Ma
ona za zadanie pomóc programi¶cie w stworzeniu w³asnych metod antyaliasingu,
które bêd± realizowane przez Pixel Shadery. Podobn± funkcje maj± do spe³nienia
szablony u¿ywane przy antyaliasingu, które programista sam mo¿e w dowolny sposób
stworzyæ i modyfikowaæ. Funkcja ta nazywa siê Programmable Anti-Aliasing Sample
Patern. Dziêki niej osoba programuj±ca shadery uzyskuje ca³kowit± kontrolê nad
próbkowaniem punktów wykorzystywanych do wyg³adzania krawêdzi.
Shader Model 4.1
Jak mo¿na siê domy¶liæ, w DirectX 10.1 pojawi³ siê te¿ nowy model cieniowania –
Shader Model 4.1. Spo¶ród wprowadzonych w SM 4.1 funkcji wymieniæ nale¿y przede
wszystkim Cube Map Arrays (macierz map kubicznych), która pozwala nanie¶æ w
jednym przej¶ciu wiele kubicznych map. Mapy kubiczne to nic innego, jak
specjalne przygotowywane w trakcie generowania obrazu 3D tekstury powstaj±ce z
po³±czenia pierwotnie nak³adanej na obiekt tekstury z mapami ¶rodowiska (np.
odbiciami ¶wiat³a od przedmiotów). Nowa realizowana sprzêtowo funkcja ma,
oczywi¶cie za zadanie przyspieszyæ generowanie sceny 3D.
Funkcja przyspieszaj±c± generowanie grafiki jest te¿ mo¿liwo¶æ okre¶lanie
przezroczysto¶ci punktów w trybie MRT (Multiple Render Target) osobno dla
ka¿dego obiektu na scenie 3D, dla którego nak³adana jest ta sama tekstura. Przy
jej wykorzystaniu nie trzeba zmieniaæ przezroczysto¶ci w kilku krokach ju¿ po
na³o¿eniu tekstur na obiekty na scenie 3D, po prostu tekstury o ju¿ odpowiednio
ustalonej przezroczysto¶ci od razu nak³adane s± na obiekty w jednym przebiegu
procesu renderingu.
Jedn± z najwa¿niejszych zdaniem Microsoftu wprowadzonych cech w SM 4.1 jest
funkcja obliczeniowa Gather4. Pozwala ona na wprowadzenie niefiltrowanych bloków
tekstur o wymiarach 2×2 teksele (teksel to punkt tekstury) do obliczeñ
filtrowania dwuliniowego. Co wiêcej obliczenia te dokonywane s± z wyprzedzeniem
na podstawie zaimplementowanych algorytmów przewiduj±cych operacje w potoku
graficznym. Na poprawê szybko¶ci wykonywania programów shaderowych wp³ywaj± te¿
ulepszone algorytmy wprowadzania danych wej¶ciowych i odbierania danych
wyj¶ciowych do/z Vertex Shadera. Wedle zapewnieñ, maj± one dwukrotnie
przyspieszaæ szybko¶æ przep³ywu informacji 16, 32 i 128 bitowych danych.
Ostatni± modyfikacj± wprowadzon± do SM 4.1 jest dodanie instrukcji LOD (Level Of
Detail). Pozwala ona programi¶cie okre¶liæ szczegó³owo¶æ filtrowania tekstur.
Dziêki ³atwiej bilansowaæ realistyczno¶æ odwzorowania obiektów wzglêdem
wymaganej szybko¶ci generowania sceny.

Przyk³adowa demonstracja firmy ATI/AMD dotycz±ca wykorzystania modelu
cieniowania SM 4.1 do uzyskania efektu globalnego o¶wietlenia.
¬ród³o: ATI/AMD
Oprócz wspomnianego wcze¶niej zwiêkszenia precyzji i
powtarzalno¶ci obliczeñ zwi±zanych z antyaliasingiem, w bibliotekach DirectX
10.1 wprowadzono trzy nowe cechy funkcjonalne zwi±zane z popraw± wyg³adzania
krawêdzi. Pierwsza z nich to wprowadzenie obs³ugi bufora zapisu/odczytu danych
przy wyg³adzaniu krawêdzi wykorzystuj±cego multipróbkowanie. Bufor ten pozwala
na przechowywanie indywidualnych warto¶ci odczytanych dla ka¿dego punktu (a nie
jak dotychczas jednej warto¶ci ¶redniej dla wszystkich próbkowanych pikseli) i
pozwala na bezpo¶redni dostêp do tych danych programom shaderowym (wykonywanym
przez Pixel Shader).
Ciekaw± funkcj± jest Pixel Coverage Masks, która za zadanie pomóc programi¶cie w
stworzeniu w³asnych metod antyaliasingu, które bêd± realizowane przez Pixel
Shadery. Podobn± funkcje maj± do spe³nienia szablony u¿ywane przy antyaliasingu,
które programista sam mo¿e w dowolny sposób stworzyæ i modyfikowaæ (Programmable
Anti-Aliasing Sample Patern), Dziêki temu uzyskuje on ca³kowit± kontrolê nad
próbkowaniem punktów wykorzystywanych do wyg³adzania krawêdzi.
Czekaj±c na DirectX 11
Jak widaæ, wprowadzone w DX 10.1 nie wyró¿niaj± siê niczym szczególnym. Co
prawda usprawniaj± one obliczenia wykonywane przez kartê podczas generowania
sceny 3D, ale nie wnios³y jaki¶ szczególnie istotnej nowej funkcjonalno¶ci. Du¿e
zmiany Czekaja nas dopiero w przygotowywanych w³a¶nie bibliotekach DirectX 11,
które mog± wywo³aæ znacznie wiêksz± rewolucjê w procesie tworzenia
trójwymiarowej grafiki, ni¿ pojawienie siê bibliotek DirectX 10, które do dzi¶
przez wielu programistów s± traktowane z pewna rezerw± i wola oni wci±¿
korzystaæ z wersji 9.0c.

Porównanie mo¿liwo¶ci DirectX 10 i DirectX 11. ¬ród³o: Microsoft


Gra Assassin’s Creed w wersji dla DX10 (u góry) i DX 11 (na dole)
Jak ju¿ wspomina³em na pocz±tku artyku³u, biblioteki DirectX
11 znajd± siê w finalnej wersji systemu Windows 7, ale, na szczê¶cie, bêd±
równie¿ dostêpne dla Windows Vista. Co wiêcej, zarówno programi¶ci, twórcy gier
komputerowych, jak i producenci sprzêtu ju¿ od kilku miesiêcy mogli skorzystaæ
z odpowiedniego pakietu deweloperskiego SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en).

DirectX 11 dostêpne s± ju¿ w pakiecie SDK dla developerów.
¬ród³o: Microsoft
Jak zapowiada firma ATI/AMD ju¿ w listopadzie powinny pojawiæ
siê na rynku pierwsze akceleratory 3D zgodne z nowym API. Przedstawiciele tej
firmy twierdz±, ¿e pod tym wzglêdem wyprzedz± Nvidiê, która swoje produkty
zgodne z DX 11 poka¿e na rynku znacznie pó¼niej – có¿, po¿yjemy, zobaczymy.
Nacisk na teselacjê
W czerwcu firma ATI/AMD przedstawi³a szereg dokumentów dotycz±cych nowych
bibliotek graficznych Microsoftu. Podczas tej, odbywaj±cej siê na targach
Computex 2009 konferencji zaprezentowano te¿ pierwsze wafle krzemowe z nowymi
uk³adami zgodnymi z DX 11. zaprezentowano te¿ algorytmy teselacji na dzia³aj±cej
karcie graficznej zgodnej z DirectX 11, na któr± to funkcjê najwiêkszy nacisk
po³o¿yli w³a¶nie przedstawiciele ATI/AMD – i nie ma co siê im dziwiæ. Sprzêtowy
teselator i zwi±zana z nim technologia TruForm pojawi³a siê w kartach ATI/AMD w
2002 roku, a konkretnie w Radeonie 8500. Niestety, przez d³ugi czas nie zyska³a
ona wiêkszego uznania. Do najbardziej znanych, pierwszych gier korzystaj±cych z
technologii TruForm nale¿y „Return to Castle Wolfenstein” (od wersji z patchem
1.33).

Return to Castel Wolfenstain – jedna z pierwszych gier wykorzystuj±cych
teselacjê.
Teselacja to etap, który w potoku graficznym 3D zwi±zany z
dzieleniem wygenerowanych podczas tworzenia wirtualnej sceny 3D wielok±tów na
mniejsze fragmenty – nie by³ on do tej pory obowi±zkowy. Dziêki teselacji
generowany wy¶wietlany na ekranie obiekt mo¿e byæ automatycznie, bez du¿ego
udzia³u programisty, znacznie bardziej precyzyjnie narysowany. Programista
wskazuje jedynie bry³y lub ich fragmenty, które maj± byæ dok³adniej podzielone,
a za pozosta³e dzia³ania odpowiadaj± ju¿ sterowniki i karta graficzna. Wskazany
obszar, fragment bry³y, lub wielok±t jest nastêpnie dzielony przez teselator na
kilkana¶cie mniejszych trójk±tów. Co wiêcej, na podstawie dodatkowych informacji
o po³o¿eniu obrabianego trójk±ta wzglêdem innych nale¿±cych do tego obiektu, np.
do kuli, wielok±tów, ustala siê wspó³rzêdne wierzcho³ków mniejszych trójk±tów.
Chodzi o to, aby wystawa³y one nad powierzchniê dzielonego trójk±ta tak, aby by³
on bardziej g³adki i ob³y, dziêki czemu mapowane tekstury znacznie lepiej
oddadz± jego kszta³t. Przy automatycznej teselacji z uzyskanymi dodatkowo
trójk±tami nie s± powi±zane ¿adne dane w pamiêci karty. To sprawia, ¿e, ilo¶æ
przesy³anych miêdzy pamiêci± karty i uk³adem 3D danych nie zwiêksza siê i nie
obci±¿a dodatkowo magistrali danych i pamiêci. Okazuje siê te¿, ¿e niektóre
animacje, np. falowanie wody czy miêcie tkaniny, mog± byæ tworzone wy³±cznie na
podstawie bazowej siatki sk³adaj±cej siê ze stosunkowo niewielkiej liczby
wielok±tów.

TruForm – Teselacja realizowana na kartach ATI. ¬ród³o: ATI/AMD
Hull i domain shader
Analizuj±c dokumenty Microsoftu i prezentacje firmy ATI/AMD widaæ wyra¼nie, ¿e
bardzo istotnymi zmianami w DirectX 11 jest wprowadzenie kolejnych modyfikacji
do modelu cieniowania realizowanego przez kartê graficzn± i jednocze¶nie do
potoku renderingu. S± to sprzêtowo realizowane etapy: hull oraz domain shader
nazywane równie¿ czasem po polsku odpowiednio shaderem pow³oki i shaderem
dziedziny. Uwaga, poni¿ej trudny fragment :-).
Hull Shader przekszta³ca wszystkie dane wej¶ciowe w taki sposób, ¿e s± one
traktowane podczas numerycznych obliczeñ jako siatka (macierz) powi±zanych ze
sob± danych wej¶ciowych o ró¿nych czêstotliwo¶ciach – jest to tak zwana siatka
typu control mesh frequency. Taka matematyczna transformata zmienia jedn±
reprezentacjê (czyli jej matematyczny opis – np. do opisania po³o¿enia w
przestrzeni 3D punktu potrzebne s± jego trzy wspó³rzêdne X,Y,Z lub np. promieñ i
kat wektora wodz±cego (r,f) – to jest inna reprezentacja tego¿ punktu)
powierzchni na drug±. W grafice 3D stosuje siê zamianê powierzchni opisanej
czterowymiarow± siatk± punktów Catmulla-Clarka na powierzchniê, a raczej jej
reprezentacjê opisan± powierzchniami Bziera (tzw. Bezier patch). W taki sposób
operacje dotycz±ce zamiany matematycznej reprezentacji wykonywa³ dotychczas na
potrzeby generowania grafiki 3D miêdzy innymi program Blender. Transformata z
normalnej przestrzeni na przestrzeñ opisana powierzchniami Beziera pozwala w
znacznie bardziej naturalny (realistyczny) sposób przedstawiæ przedmioty o
g³adkich zaoblonych kszta³tach. Takie powierzchnie nazywa siê w literaturze
zwi±zanej z generowaniem obrazów 3D powierzchniami naturalnie g³adkie.

Potok renderingu w DirectX 11. ¬ród³o: Microsoft
Nieco inne zadanie ma domain shader. Ten shader u¿ywany jest
praktycznie tylko raz dla ka¿dego wierzcho³ka na generowanej scenie 3D. Domain
shader ustala dziedzinê argumentów wej¶ciowych (tzw. domenê) dla obliczeñ
wszystkich powierzchni parametrycznych wykorzystywanych na danej trójwymiarowej
scenie. Mówi±c pro¶ciej, odpowiada on za to, ¿e ka¿dy obiekt na scenie 3D
zostaje wygenerowany tylko raz, a wszelkie zwi±zane z nim zmiany – np.
zgniecenie b³otnika wirtualnego samochodu, s± tylko uaktualnieniami fragmentów
jego bry³y, a nie efektem wygenerowania ca³ego obiektu od nowa.



Zmiany w DirectX 11. ¬ród³o: Microsoft
Shader Model 5.0
DirectX 11 nie by³by kolejn± wersj± bibliotek graficznych gdyby nie wprowadzono
w nim, kolejnego tym razem ju¿ pi±tego modelu cieniowania. Shader Model 5.0
zosta³ zaprojektowany tak by jeszcze bardziej ni¿ SM 4.1 u³atwiæ pracê
programistom. Najwa¿niejsz± jego cech± jest wykorzystanie obiektowego modelu
programowania, wzorowanego na C++. SM 5.0 pozwala te¿ na wykonywanie obliczeñ
podwójnej precyzji, co w efekcie zwiêksza dok³adno¶æ renderingu. Pozosta³e nowe
funkcje SM 5.0 dotycz± przede wszystkim wymiany danych miêdzy poszczególnymi
przetwarzanymi przez uk³ad w±tkami.
Istotn± nowo¶ci± w Shader Model 5.0 jest równie¿ zestaw instrukcji
odpowiedzialnych za sterowanie strumieniowymi operacjami wej¶cia-wyj¶cia.
Funkcje te w systemie Windows 7 wykorzystano przede wszystkim do zarz±dzania
multimediami. W Windows 7 pojawi siê multimedialny mechanizm drag&drop, który
pozwoli na to, ¿e po pod³±czeniu do komputera przeno¶nego urz±dzenia takiego jak
odtwarzacz MP4, konsola PSP, czy telefonu komorkowego i wybraniu w eksploratorze
Windows znajduj±cego siê na dysku komputera materia³u wideo i przeci±gniêciu go
do mobilnego urz±dzenia spowoduje, ze automatycznie rozpocznie siê proces
transkodowania filmu na odpowiedni dla mobilnego sprzêtu format danych wideo.
Transkodowanie to wykorzystuje procesor graficzny i strumieniowe operacje
wej¶cia-wyj¶cia zaszyte w SM 5.0.

Transkodowanie materia³ów wideo z pomoc± DirectX 11
¬ród³o: ATI/AMD
Kompresja tekstur
W DirectX 11 pojawi± siê te¿ dwa nowe formaty kompresji tekstur. S± to formaty
BC6 oraz BC7. Pierwszy stworzono w celu znacz±cej poprawy jako¶æ wy¶wietlanego
obrazu HDR (High Dynamic Range) bez zauwa¿alnego spadku szybko¶ci generowania
obrazu 3D. Z kolei format BC7 powsta³ do obs³ugi 8-bitowych tekstur LDR (Low
Dynamic Range) przy zachowaniu ich wysokiej jako¶ci. Format ten kompresuje
teksturu w proporcji 3:1, a BC6 pozwala na skompresowanie tekstur w stosunku
6:1.


Nowe formaty tekstur obs³ugiwane przez DX 11.
¬ród³o: Microsoft
Shadery obliczeniowe
Moim zdaniem najwa¿niejsz±, rewolucyjn± zmian±, której konsekwencji nie jeste¶my
jeszcze w tej chwili sobie nawet do koñca sobie obecnie u¶wiadomiæ jest
wprowadzenie w DirectX 11 shaderów obliczeniowych (Compute Shader). Element ten
nie jest jednak bezpo¶rednio wykorzystywany podczas generowania obrazu, dlatego
do¶æ czêsto jest w wielu opracowaniach pomijany. Compute Shader jest bowiem
elementem pozwalaj±cym na prowadzenie na karcie obliczeñ nie zwi±zanych w ogóle
z generowaniem grafiki – jest to rozwiniêcie opisanej wcze¶niej przy opisie DX
10 architektury zunifikowanych. Powiem wiêcej, tak naprawdê jest to wprowadzona
do DirectX implementacja obliczeniowych technologii Nvidia CUDA i AMD Stream!
(patrz:
http://www.frazpc.pl/artykuly/704/Technologia/Obliczenia/prowadzone/za/pomoca/kart/graficznych).
Lub jeszcze inaczej Microsoftowi odpowiednik bibliotek OpenCL – podobnie jak
DirectX jest odpowiednikiem OpenGL-a.
No dobrze, ale co w nim tak naprawdê takiego rewolucyjnego. Otó¿ podstawow±
zalet± modelu Compute Shader jest to, ¿e o ile technologie CUDA i AMD Stream nie
s± ze sob± kompatybilne, o tyle Compute Shader bêdzie, podobnie jak OpenCL,
wspólny dla wszystkich platform sprzêtowych wykorzystuj±cych do obliczeñ karty
graficzne. Konsekwencje tego faktu naprawdê trudno w tej chwili przeceniæ. Do
tej pory g³ówn± barier± rozwoju oprogramowania zgodnego z CUDA i AMD Stream by³o
to, ¿e by³y to technologie przeznaczone do obs³ugi sprzêtu wy³±cznie jednego
producenta, teraz gdy karty graficzne chc±c uzyskaæ zgodno¶æ z DX 11 bêd±
musia³y byæ te¿ zgodne z Compute Shader, co sprawi, ¿e obliczenia nie zwi±zane z
grafik± wykonywane na kartach graficznych zagoszcz± na dobre w naszych pecetach
przyczyniaj±c siê do znacznego przyrostu mo¿liwej do wykorzystania mocy
obliczeniowej.

Wykorzystanie Compute Shadera do obliczeñ zwi±zanych z fizyk±. Na rysunku
bêd±cym fragmentem wiêkszej animacji, dziêki szaderom obliczeniowym niemu
uzyskano realistyczny efekt falowania wody.
¬ród³o: Nvidia
Jak mo¿na wyczytaæ w dostêpnej dokumentacji
Microsoftu, shader obliczeniowy bêdzie przede wszystkim odpowiedzialny za
szeroko pojête obliczenia zwi±zane z fizyk± w grach. Z jego pomoc± obliczane
maj± byæ takie zjawiska fizyczne jak: interakcja przedmiotów, trajektoria ruchu,
eksplozje, zachowanie siê dymu (efekty cz±steczkowe), falowanie i przep³yw
cieczy, zachowanie siê tkanin i ubrañ, fizyka cia³ miêkkich itp. Ma³o tego,
planuje siê te¿, ¿e DX 11 bêdzie wspomaga³ algorytmy sztucznej inteligencji (AI)
w grach, co pozwoli na bardziej realne zachowanie siê postaci, którymi steruje
komputer. Oczywi¶cie, shader obliczeniowy bêdzie móg³ równie¿ zostaæ
wykorzystany w programy in¿yniersko-naukowych, tak jak ma to obecnie miejsce w
wypadku CUDA i AMD Stream.
Pojawienie siê Compute Shadera w DX 11 mo¿e moim zdaniem mieæ jeszcze jedn±
powa¿n± konsekwencjê, tym razem dla firmy Nvidia. Zintegrowany z DirectX shader
obliczeniowy pozwoli twórcom gier na przeniesienie znacznej czê¶ci obliczeñ z
procesora na kartê graficzn±, a jednocze¶nie kalkulacje te nie bêd± ju¿ wiêcej
ograniczone do sprzêtu tylko jednego producenta. Promowana przez Nvidiê
technologia CUDA, chodz±ca jedynie na kartach Nvidii, zaczyna wiêc dla twórców
oprogramowania traciæ powoli racjê bytu. Ma³o tego, wkrótce pojawi siê równie¿
nowa wersja silnika efektów fizycznych – Havok. Ten tworzony jest z kolei z
my¶l± o równie¿ uniwersalnym ¶rodowisku OpenCL, co stawia pod du¿ym znakiem
zapytania dalsz± egzystencjê promowanej przez Nvidiê technologii PhysX. Nale¿y
zatem zastanowiæ siê, który z twórców gier bêdzie chcia³ korzystaæ z rozwi±zania
technicznego przeznaczonego tylko dla sprzêtu jednego producenta? DirectX 11 i
nowy Havok mog± wiêc wpêdziæ Nvidiê, je¶li nie zmieni ona swojej polityki
dotycz±cej systemów CUDA/PhysX, w powa¿ne k³opoty i zepchn±æ do defensywy – czy
tak bêdzie, wkrótce siê o tym przekonamy.
Wró¿enie z fusów, czyli co nas czeka w przysz³o¶ci
Jak widaæ, biblioteki DirectX 10 i DirectX 11 konsekwentnie przenosz± coraz
wiêksz± cze¶æ obliczeñ z procesora do karty graficznej. Windows 7 ma byæ te¿
pierwszym systemem operacyjnym integruj±cym i w sposób p³ynny wykorzystuj±cym
moc obliczeniow± procesora i procesora graficznego. Programistom Microsoftu
tworz±cym biblioteki DirectX 11 przy¶wieca³a bowiem chêæ, dostarczenia wraz z
Windows 7 wygodnego ¶rodowiska umo¿liwiaj±cego jednolite wykorzystanie
w³a¶ciwo¶ci ca³ego dostêpnego w systemie komputerowym sprzêtu w taki sposób, aby
jak optymalnie wykorzystaæ ich potencja³ obliczeniowy. DirectX 11 ma zapewniæ
przede wszystkim obs³ugê sprzêtu przez system operacyjny na znacznie ni¿szym
poziomie i w znacznym stopniu udoskonaliæ sposoby przetwarzania wielow±tkowego.
Co wa¿ne ju¿ wkrótce pojawi± siê pierwsze karty graficzne zgodne z DX 11.

Zapowied¼ pierwszych uk³adów graficznych zgodnych z DirectX 11.
¬ród³o: ATI/AMD
Pierwszy krok zosta³ zrobiony – model cieniowania
Shader Model 5.0 w znacznym stopniu wykorzystuje ju¿ programowanie obiektowe i
obliczeniowe jednostki karty graficznej do kalkulacji nie zwi±zanych z grafik±.
Windows 7 ma maksymalnie korzystaæ z ujednoliconego ¶rodowiska GPU + CPU. Co
wiêcej, jego nastêpca bêdzie traktowa³ wszystkie dostêpne w pececie uk³ady
obliczeniowe (a wiêc np. procesor d¼wiêkowy, czy np. dodatkow± kartê
obliczeniow±) w ten sam jednolity sposób. Za kilka lat programista pisz±c grê
nie bêdzie siê przejmowa³ na czym bêdzie siê ona wykonywaæ, czy uruchomiona
zostanie na CPU czy GPU.

Przyk³adowa scena otrzymana przy wykorzystaniu DirectX 11.
¬ród³o: Microsoft
Jednolity model programowania i ¶rodowisko
programistyczne sprawi±, ¿e osoba pisz±ca aplikacjê wykorzystuj±c procedury
zawarte w przysz³ym API (jak wynika z bardzo nieoficjalnych zapowiedzi
Microsoftu mo¿e ju¿ chodziæ nawet o DirectX 12) bêdzie mog³a stworzyæ
uniwersalny program, w którym przydzia³em dostêpnej mocy obliczeniowej bêdzie
siê zajmowa³ wy³±cznie system operacyjny. Sprzêt stanie siê dla programistów
ca³kowicie „przezroczysty”. Czy tak siê stanie, trudno w tej chwili oceniæ.
Dysponujemy w tej chwili zbyt ma³a ilo¶ci± informacji, przez to przewidywanie
przysz³ych posuniêæ Microsoftu dotycz±cych mo¿liwych scenariuszy w rozwoju API,
w tym DirectX-a oraz rozwoju systemów operacyjnych staje siê raczej zajêciem dla
futurologów i przys³owiowym wró¿eniem z fusów.
Autor: Marcin Bieñkowski
Komentarze (139) |