4. 3. 2011

Wile E. Coyote

Často dnes zachytím mladých, vylízaných onanistov hlavne na našich ČSSR provinčných sajtoch, ako sa škororadostne vytešujú nad tým, že už už prichádza nový Apple šmejd s výkonom rovnakým ako hárdverovo nadupané PSP2 a so SONY strojom bude koniec. Nejde o poznámky v komentároch, kdeže - plnohodnotná "herná žurnalistika". Carmack by sucho povedal /a aj to urobil/ - vysoko optimalizované low level programovanie PSP2ky bude znamenať, že aj o celú generáciu silnejší mobil /nejaké čísla na papieri/ ho v závere nedokáže prekonať. Výstup je v našom prípade pochopiteľne - hra.

Asi viete, že drvivá väčšina relevantného herného hárdvéru /vrátane mobilov, tabletov/ beží v grafickom prostredí OpenGL ES 2.0 /ES-Embedded Systems/. Je to pekná, fajnová vec pokiaľ nenarazíte na jej surové limity, výkonnostné polená hodená pod nohy, alebo nechcete využiť hárdvér na 100%. GPU v PSP 2 - Power VR je samozrejme kompatibilné s OpenGL ES 2.0, OpenVG1.x a OpenCL™ - CUDA štandardom.

Zoberme si častú, bežnú prácu so zmenami formátu textúr /R8G8B8A8, RGB565, RGBA5551, RGBA4444/. Chcete na alfa kanál niečo úspornejšiu, tam zas krajšie a rekompilácia shaderu si s tým poradí. Upsss. Našiel som práve túto operáciu na iPhone 3GS, kde jednoduchučký shader kód strávil pri týchto hrách s textúrami /opakujem - je to bežná vec/ - desivých 60 milisekúnd v limbu a v psej riti. Nič vám to nehovorí, vidím to na vás. Takže inak - vykreslenie jedného frejmu u 30 fps hry by malo trvať do 30ms. Ak nejaký postefekt na PS3 via SPE shaders trvá per frame viac ako 5ms je prekliato pomalý. A teraz tu máte toho Apple bazmeka a ten strávi pri všednej a ultra bežnej srande - 60 milisekúnd v úplnej kóme. Hra teda statí 2 celé frejmy z 30tich v pauza móde. Tých operácii tam beži v reálnom čase, v reálnej aplikácii celé more práve počas tych 30fps. Je to však "chyba" OGL ES, nie samého HW. To nás však nemusí zaujímať. Na špičkovo naprogramovanú PSP2 hru vám nebude stačiť rovnako výkonný iFuj. Mimochodom PowerVR archiktúra používa vlastné optimalizované, kompresné algoritmi pre textúry PVRTC s kompresným pomerom 8-16:1 a s podporou pre 4-bpp a 2-bpp módy /málo farieb, niečo ako paletizované textúry PS2 a Voodoo grafík/. PVRTC je výkonnejšia a odlišná od S3TC / DXTC 1-5/, ktorú poznáme z bežných PC grafík, alebo nintenda /Gamecube, a určite aj Wee/.

Ideme ďalej. Obľúbená kapitola všetkých Apple produktov. Offline shader compilation. Komplikovaná téma, a ešte horšie budú následovať. Preto letom svetom. Nevýhodou iOS a Android systémom je nespočetné množstvo konfigurácii, teda nutnosť kompilovanie shaderov a optimalizácie GPU mikrokódu pre rôzne GPU zostavy. To samo o sebe znamená pokles výkonu, nikto sa nebude hrajkať s piatimi GPU za štyri roky. Plus - iOS /Apple/ nepodporuje offline shader kompiláciu, nepoznajú univerzálny binárny shader formát. Automaticky strata 20% výkonu.

Práca /load/ s textúrami, organizácia UMA pamäte. Volanie štandardnej glTexture2D procedúry pripravenej zvládnuť akékoľvek GPU kompatibilné s OGL ES 2.x štandardnom ale za cenu - neuveriteľneho množstva zbytočných/redundantných presunov dát v pamäti. PSP 2 GPU tento problém samozrejme nepozná. Mimochodom to plusko za názvom PowerVR SGX 543 MP4+ PSP2 GPU znamená - custom, na zakázku upravený. Ďalej. Vertex setup - vertex data bindings v OGL /v D3D to poznajú ako vertex declarations/, kritický doležitá vec pre polygónový hrubý výkon /RSX v PS3 by vedelo rozprávať/. GPU si pri tejto operácii pripravuje/vyraďuje polygóny pred ich rasterizáciou. Je naozaj dôležité ich mať v raster fáze čo najmenej a čo najefektívnejšie "poskladaných". Ďalej. Shader uniforms aka constants /D3D/ - organizácia premenných/atribútov viazaných na záplavu shader kódu, constant buffers /cbuffers/ a texture buffers /tbuffers/. Jednoduchučký bumpmapping má tri uniform parametre : vec3 pre polohu svetla a dve sampler2D zložky základnú textúru a normálovu mapu. V OGL ES to funguje pri skutočne komplexnom kóde /rozumej veľká hra/ ako na lodi plnej opitých pirátov /OGL ES 2.0 pozná shader uniform iba per shader kód, nepozná pojem globálna premenná/.



obrovský Apple hit, na PC známy asi 15 rokov, snáď bude 500Mhz stačiť

A takto by sme mohli pokračovať až do súdneho dňa a príchodu rimejku FF7. Mojim cieľom vám bolo ukázať a dokázať, že natívny, vysoko optimalizovaný kód pre PSP 2 /heh, stačí aj stará a pracná, ale dobrá ARB cesta/ je niekoľko násobne výkonnejšia ako ten istý kód v štandardnom a pre danú platformu neoptimalizovanom OGL ES 2.0 prostredí. PSP2 naozaj graficky nebude pokorená Apple šmejom vybaveným na chlp identickým HW. Bokom nechám aj ekonomické, komerčné a filozofické dôvody. Ešte roky potrvá, kým niekto na iFuj bazmek vyrobí hru s budgetom za 60 miliónov dolárov. Takže si ďalej užívajte tie mobilné, prasačie "flash" sračky napísané v basicu s hrateľnosťou do 28 minút.