20. 9. 2013

Playstation 4 - priama kontrola


"3Dfx bol svojho času skutočne silný hráč ale všemocné MS malo zbrane o ktorých sa podobným slabingerom ani len nesnívalo. Ani na sekundu sa nikto z nás neobával nejakej hrozby z tejto strany. Mali sme prostriedky ako dostať iných výrobcov HW alebo ich vlastné API úplne mimo hru. Na Nvidiu sme urobili iba ľahké bububu a hneď naskočila na DirectX vlak. Akýkoľvek odpor zo strany 3Dfx bol zbytočný, rovnako sme postupovali aj s SGI, OGL štandardom alebo JAVA. Zničiť, ponížiť ,odstaviť, minimalizovať, pohltiť."  - Alex St. John A.K.A. “The Saint”

"DirectX bolo interne známe ako Projekt Manhattan. Skutočným cieľom tohto nášho API bolo nahradiť japonské herné konzoly - herným PC a neskôr aj vlastnou hernou konzolou. Projekt Manhattan sme to volali preto, lebo to bolo počas druhej svetovej kódové označenie pre vývoj atómovej bomby. A takto sme chceli japončíkov opäť zničiť. Logo radioaktívne žiariaceho X samozrejme spôsobilo menší poprask vo vtedajšej tlači."
- Alex St. John A.K.A. “The Saint”

------------------------------------------

Svätý Alex je jedným z otcov zakladateľov grafického rozhrania DirectX /a venoval sa mu zhruba až do verzie DirectX 8.x/. A zaroveň ide o morálne krivé, dokonale šovinistické, arogantné prasa - ostatne ako celý Microsoft. Dnes Alex tvrdí, že dni DirectX rozhrania, tak ako ho roky intímne poznáme, sú takmer spočítané a budúcnosť je tzv. priame programovanie GPU /direct compute/ a teda na prvom mieste nič iné ako Playstation 4. Úprimnosť nadovšetko, ale pekne poporiadku.

V roku 1995 sa spolu s Win95 dostala do obehu prvá ostrá verzia DirectX /DirectX 1.0/, ktorá mala dokázať, že MS-DOS je mŕtvy a WinOS je to správne prostredie pre hry. Takto sa začala dlhá cesta vývoja tohto API, v ktorom MS ostatným výroncom grafického rozhrania predpisovalo minimálny, povinný súbor vlastností, ktoré daná grafická karta musela spĺňať. DirectX je podmnožina toho čo dnešné alebo vtedajšie GPU dokázalo, ak ste chceli do DirectX dostať napríklad tie svoje extenzie na úkor konkurencie, ktorá bola v tejto ovlasti pomalšia, alebo to vôbec zatiaľ nevedela .. tak - chápete, biznis a likvidačná politika sa dá robiť aj takýmto spôsobom.

Ešte pred napísanim prvého riadku DirectX však MS hľadalo strategického partnera, ktorý sa v tejto problematike "vyzná". Kandidáti - Epic Games /UnReal engine/, Criterion /Renderware/, Argonaut Software /BRender .. pozn. SuperFx čip pre SNES !!/ a RenderMorphics /Reality Lab/. Vyhrala posledná menovaná, neherná firma, ktorá spolupracovala napríklad aj so známym Autodesk /ten MS tiež chcelo dostať na lopatky/. Bill teda kúpil RenderMorphics aj s ponožkami a na jadre ich Render Labu postavil s bandou opic na čele s Alexom vlastné grafické API. Jeho oficiálnym cieľom je čo najjednoduchší ale zaroveň na funkcie bohatý, "priamy" a rýchly prístup najmä ku grafickému hardvéru /Direct 3D/.

Tento článok nemá byť stručným popisom histórie vzniku tohto rozhrania, niektoré fakty však musím uviesť aby ste pochopili pointu. Každopádne medzi DX 1.0 a 7.0 prebiehali v dev tíme búrlivé debaty okolo jeho charakteru, pochopiteľne cieľom bolo maximalizovať trhový podiel MS na úkor všetkých ostatných. Technické detaily bokom, ale aj preto bolo možné, aby PS2 HW z roku 1999 vedelo finty, ktoré sa DirectX naučilo až o mnoho rokov neskôr. Počnúc DirectX 8.0 opustili tzv. fixed function pipeline a nastúpili grafické karty s programovateľnými pixel a vertex shaders /kód ktorý ráta polohu, farba, tvar pixelu a polohu a morfológiu polygónu/. K programovateľnosti sa muselo pristúpiť aj z jednoduchého darwinistického pohľadu. V GPU sa začali hromadiť jednotky-desiatky-stovky subprocesorov. Veľmi, veľmi rýchlych ale neschopných super rýchleho vetvenia /branching/ alebo náhodného pristupu k dátam /v oboch bodoch naopak CPU exceluje, a CPU je možné vtedy ako aj dnes použiť ako softvérový rasterizér a to bez obmedzení/. A DirectX to je pochopiteľne more obmedzení.

CPU tu spomínam zámerne. MS totiž bojovalo aj s Intelom, ktorý mal snahu virtualizovať grafické operácie práve na svojich silných procákoch, a čím viac tým lepšie. Do týchto dverí vložilo MS bosú nohu a začalo pracovať na tom, aby GPU s ich API znížilo "váhu" CPU čo najnižšie a zaroveň zničilo imidž CPU ako srdca každej PC zostavy. Grafické karty sa teda museli naučiť CPU móresom a MS im v tom láskavo pomohlo s DX10 a hlavne s DX11.x. Stalo sa však niečo čo sa dalo čakať. Dnes v roku 2013 aj sám svätý Alex hovorí /pripomínam - jeho práca s týmto MS API skončila s DirectX 8.x/, že niečo tak šialene zamotané, neprehľadné a psychopaticky komplikované ako DirectX 11.x už dávno nevidel. Jednoduchá trojstupňovaná renderovacia kaskáda /transformation, lighting, rendering/ sa zmenila na kolosálne chaotický zlepenec o minimálne 13 hlavných krokov /a ďalšej dvadsiatke subkrokoch/ a na každom metri narážate na výnimky, pračudesné extenzie, pomalé zombies /geometry, domain, hull shaders/ a partizánske vložky od AMD či Nvidia.

Alex sám hovorí, že mal veľké problémy ako low level coding špecialista tento mišmaš aspoň na slušnej úrovni nejako zvládnuť. Čo je aj odpoveď na to, prečo dnes tak veľmi málo ľudí vlastne vie pre toto rozhranie naprogramovať špičkový engine. Pre malého domáceho majstra ide o nemožnú úlohu !! Alex doslova hovorí: "stojím v nemom úžase nad dnešným hardvérom grafickým kariet a jeho fantastickými možnosťami a zároveň som zhnusený ako takmer nepoužiteľnou žumpou sa DirectX stalo." Nepoužiteľný = veľmi pomalý, extrémne komplikovaný a opäť veľmi limitujúci !!

------------------------------------------

Rozuzlenie. Existuje spôsob ako takmer úplne obísť tento bordeľ. Dokonale ignorovať takmer 20 rokov vytváraný "spätne kompatibilný", zastaralý, pomalý, do uzla spletený chaos. Volá sa - Direct Compute. Obchádzate klasickú a preklínanú cestu - direct 3D rendering pipeline. Ste boh so skutočne priamym prístupom ku hardvéru. Technicky si vytvárate vlastné API, vlastné "DirectX", vlastné paradigmy. Ide vlastne o kódovanie ako za starých čias, softvérový rendering, kde ste obmedzený iba hrubým výkonom a vlastným talentom. Je to čistá forma programátorského umenia. Alex hovorí, že ak by bol pri kormidle vývoja DirectX dnes, tak zruší ďalšie investície do klasického DirectX a vytvorí nové direct GPU programming prostredie. Tvrdí, že toto je ten správny spôsob ako zvýšiť efektivitu využitia GPU HW o niekoľko rádov a behom zopár generácií /8-10 rokov/ dosiahnuť filmovú grafiku nad úrovňou Avatara a samozrejme v reálnom čase.

Teraz ta pointa. Playstation 4 je od základu navrhnutá práve pre - direct GPU programming. Trójsky kóň, podobne ako PS3 a CELL s jeho heterogénnym programovacím modelom. Každý bit a hertz PS4 mašiny bol dizajnovaný práve s ohľadom na to, že toto je tá žiarivá budúcnosť. Mark Cerny skutočne nie je idiot. Všetky tie špeciálne HW úpravy /8 x ACE engine, bezprecedentne vysokánska granularita pri spracovaní GPGPU operácii/, špeciálne zbernice medzi CPU a GPU, hUMA adresovanie hlavnej pämate, vlastné grafické PS4 GPU API. alebo shader jazyk. To všetko je dôkladná príprava pred veľkým skokom. Guerrilla Games v prednáške o vývoji Killzone pre PS4 iba sucho povedala, že sa direct compute ani len nedotkla a pôjde vlastne o PS3 HD hru. Housemarque len tak medzi rečou prehodili, že direct compute využívajú intenzívne a ich engine zvládne v 1080p/60 simulovať interaktívne správanie až 500 000 malých 3D objektov naraz /skúste si v Cryengine to isté s 10 000 sudmi, veľa sťastia a jeden frame za 10 sekúnd/. Mark Cerny povedal, že prechod na rutinérsky používanie direct compute nečaká skôr ako o 2-3 roky. PS4 má tak ohromný potenciál, že je doslova nemožné sa aspoň priblížiť ku jeho dnu skôr ako 6-8 rokov /GTA5 sa dnes dostáva do obehu na 8 ročný xcrap 360 a stále nejde o 100% využitie jeho HW/. A SONY má s PS4 po tejto stránke ešte divokejšie plány, o tom niekedy inokedy, až to bude aktuálnejšie.