Hlavní navigace

Wine 3.0 přichází, konečně s Direct3D verze 10 a 11

David Ježek

Po mnoha, mnoha a mnoha letech vývoje konečně došlo na vydání Wine 3.0 s podporou vyšších verzí DirectX, resp. Direct3D než 9.x. Wine tak po více než 10 letech od uvedení Windows Vista zase trochu dohání svět.

Doba čtení: 5 minut

Novinky verze 3.0

Alexandre Julliard ohlásil vydání Wine 3.0 před pár dny. Mezi hlavními novinkami v příslušné zprávě vypíchl to, co bylo k dispozici ve vývojových verzích už delší dobu, tedy podporu Direct3D 10 a 11 a Direct3D Command Stream, dále pak grafický ovladač pro Android a vylepšenou podporu DirectWrite a Direct2D. Celkově tato verze přináší více než 6 tisíc dílčích změn a posouvá Wine oproti původnímu světu Microsoft Windows zase o pár let blíže.

Pro příští velkou verzi v rámci aktuálně započatého nového vývojového cyklu počítejme s podporou API Direct3D 12 a Vulkan a také s použitím OpenGL ES k podpoře Direct3D na Androidu.

Direct3D blíže

Jelikož se Wine posouvá od Direct3D 9.x nově až k Direct3D 11, je novinek pochopitelně velmi mnoho. Z hlediska grafického je potřeba zmínit hned na úvod Shader Moder 4.x a Shader Model 5.x. V kontextu světa Windows pak tu skutečnost, že s Direct3D 10 přišly Windows Vista a s Direct3D 11 pak Windows 7.

Významnou roli hraje přechod od pixel + vertex shaderů k unifikovaným shaderům, jak je zavedl Shader Model 4.0. Dále přibyly compute shadery. Shader Model 5.0 (a Direct3D 11) přinesl podporu techniky zvané tesselace (obecně hull a domain shadery). S novějšími Direct3D se objevuje také vícevláknový přístup ke zpracování.

DirectX 11 pak také zavedly podporu tzv. Feature Levels, kdy například (v dnešní době) grafická karta, která nepodporuje plně Direct3D 12 jej může podporovat formou „DirectX 12 Feature Level 11_1“, což jednoduše řečeno znamená, že daná grafická karta hardwarově umí DirectX 11.x a to, co je nad rámec této verze, tedy věci obsažení v DirectX 12 jsou bud realizovány softwarově (počítány CPU), nebo nahrazeny starší (pomalejší / méně efektivní) alternativou. Podrobněji k Feature Levels třeba Wikipedie.

Historické okénko

Dovolte mi na tomto místě ještě připomenout historické souvislosti. Začneme v bodě, na které až dosud Wine sedělo, tedy DirectX / Direct3D 9.x. Devítková řada rozhraní DirectX se objevila dávno, už v roce 2002, tehdy logicky pro Windows XP. Grafické karty tehdy nabízely dva typy shader jednotek (pixel a vertex). Při návrhu GPU bylo třeba optimálně nastavit jejich poměr s ohledem na očekávané nároky nadcházejících her. Takže kupříkladu ve své době velmi populární ATI Radeon X1950 Pro (uveden v říjnu 2006) nabízel jednotky pixel a vertex shaderů v poměru 36:8 a k tomu 16 TMU (texturovací) a 16 ROP (výstupní).

ATI - pixel+vertex shadery
Autor: ATI

pixel+vertex shadery

Logicky pokud hra (či aplikace) potřebovala ideálně trochu jiný poměr jednotek, stávalo se, že se třeba pixel shadery „flákaly“, neboť se čekalo na dopočítání dat ve vertex shaderech (nebo naopak). Optimálním řešením tak bylo sjednocení („unifikace“) výpočetních jednotek tak, aby byla schopné počítat oba typy dat. S tím přišel Shader Model 4.0 implementovaný i Microsoftu v Direct3D 10.0 a dostalo to název „unifikované shadery“.

ATI - unifikované shadery
Autor: ATI

Unifikované shadery

Další generace grafik tak už nesla jeden typ shader jednotek, například nechvalně proslulý (proč, by vydalo na samostatný text) Radeon HD 2900 XT (uveden v květnu 2007) nesl 320 unifikovaných shaderů a k tomu opět po 16 TMU a ROP jednotek. Nvidia přinesla GPU s unifikovanými shadery dříve, extrémně populární GeForce 8800 GTX se objevila v listopadu 2006 a nesla 128 unifikovaných shaderů.

Direct3D 10.1 a jednoprůchodový antialiasing

Zajímavou historickou chvilkou bylo uvedení DirectX 10.1 a následná podpora novinek umožňujících ještě efektivnější běh ve hře Assassin's Creed. Ta zavedla DirectX 10.1 novinky (konkrétně efektivnější implementaci antialiasingu) možná jako vůbec první a majitelé Radeonů byli spokojeni: hra běhala rychleji. Nicméně Nvidia a její horší implementace vedly k chybám i pádům hry a tak Ubisoft přistoupil k tomu, že podporu ve hře opět deaktivoval. Tím samozřejmě naštval spoustu majitelů Radeonů, nicméně tím opět opravil hru do podoby, která byla použitelná i na kartách GeForce. Ale psal se rok 2008 a přiznám se, že už si po 10 letech nepamatuji, jak to vlastně celé dopadlo, berte to tedy pouze jako ilustraci vlivu optimalizací dané verze rozhraní.

Direct3D 11 a tesselace

Na Direct3D 11 pak byla nejzajímavější tesselace, kde se opět jednalo tak trochu nečestně. Historicky vzato nebyla tesselace uvedená s Direct3D 11 v období listopad 2007 (ohlášení) až březen 2008 (vydání) ničím novým. ATI s touto věcí přišla dávno předtím, v roce 2001 přinesly Radeony 8500 věc zvanou TruForm, což byla v hardwaru implementovaná logika schopná z jednoduchých drátěných modelů vytvářet složitější (stojí za ní mj. Alexander Vlachos, který TruForm v ATI vyvinul mezi roky 1999 a 2000). Nešlo pochopitelně s ohledem na daný rok o věc tak efektivní, flexibilní a výkonnou jako tesselační jednotky v GPU roku 2008 a dále, ale to nebylo podstatné.

ATI TruForm
Autor: ATI

TruForm

Tesselace se totiž stala dalším marketingovým nástrojem, který byl použit při uvádění významných nových generací GPU a grafik na trh. Tentokrát to stihla dříve AMD (připomeňme: odkoupila firmu ATI), takže Nvidia mohla těžit z možnosti ovlivnit dodatečně testování. Důležitými grafickými kartami v tomto kontextu byly AMD Radeon HD 5870 a Nvidia GeForce GTX 480.

Radeon HD 5870 přišel na trh v září 2009 a obsahoval pochopitelně podporu všech novinek z nových Direct3D. Ostatně AMD i zde stihla hardware dřív než Microsoft implementaci v DirectX, sama (stejně jako dříve ATI) s Microsoftem na podpoře technologií v DirectX spolupracovala. Radeon HD 5870 (a všechny další odvozené grafiky) tak nesl podporu tesselace na určité úrovni, která odpovídala možnostem dané generace GPU (a 40nm výroby u TSMC) a očekávaným nároků her.

Nvidia uvedla svou GeForce GTX 480 po „nemalých porodních problémech“ až v březnu 2010 a potřebovala tak mít na trhu kartu, která bude v testech výkonu dostatečně rychlejší. Její vyladění výroby obřího GPU GF100 na stejný 40nm proces u TSMC se ale tolik nezdařilo, karta byla extrémně žhavá i extrémně hlučná v provozu. Způsob, jakým byly přiohnuty recenze ku prospěchu této nepříliš povedené karty, bylo využití tesselace. Jelikož GPU GF100 z generace Fermi bylo první velkým čipem Nvidie s výrazným důrazem na výpočty (ať již Nvidia CUDA, či pozdější OpenCL), bylo navrženo tak, že současně byla implementována i výrazně robustnější podpora tesselace než u Radeonu HD 5870. Nvidia tak byla schopna ve hrách i 3D benchmarcích provádět plynule tesselaci s výrazně vyššími tesselačními faktory („zjemněním drátových modelů“) než konkurence. Toho bylo náležitě využito s novým benchmarkem Unigine Heaven a také s testem Stone Giant, který velice rychle krátce po recenzích skončil v propadlišti dějin.

NMI18_Materna

Vyhlížejme Direct3D 12

Ať již ale byly určité kontroverze kolem technik v DirectX 10.x či 11.x, je skvělé, že podpora konečně přichází i do projektu Wine. Je pochopitelné, že nejde o podporu, která by zajistila 100% bezproblémové hraní všech her pro DirectX 10 a 11, ale na to jsme s Wine zvyklí.

Před tvůrci ale leží další významný milník. Význam unifikovaných shaderů, se kterými přišly DirectX 10, je možná podobně velký jako význam novinek vedoucích k výrazně efektivnějšímu běhu celé renderovací pipeline, se kterými ve světě Windows přišly DirectX 12. Doufejme, že implementace nepotrvá 10+ let, jako tomu bylo u Direct3D 10.

Našli jste v článku chybu?