´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Hardware pro poˇc´ıtaˇcovou grafiku NPGR019 3D akceler´atory - historie a architektura
Josef Pelik´an Jan Hor´aˇcek http://cgg.mff.cuni.cz/ MFF UK Praha
2012
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Pokroky v hardware
3D akcelerace bˇeˇzn´a i v konzumn´ım sektoru zamˇeˇren´ı na hry, multim´ edia vzhled - kvalita prezentace velmi d˚ umysln´e techniky texturov´an´ı a st´ınov´an´ı kombinace mnoha textur, modularita zpracov´an´ı
vysok´y v´ ykon nejmodernˇejˇs´ı ˇcipov´e technologie pro v´yrobu GPU,masivn´ı paralelismus velmi rychl´e pamˇ eti (GDDR5) v´yjimeˇcn´e sbˇernice mezi GPU a CPU - AGP, PCI-E
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Pokroky v software dvˇe hlavn´ı knihovny pro 3D grafiku OpenGL (SGI, open standard, nyn´ı Khronos) a Direct3D (Microsoft) pˇr´ıstup je podobn´y, API velmi ovlivnˇeno hardwarem
nastaven´ı parametr˚ uau ´sporn´ y pˇrenos dat do GPU maxim´aln´ı sd´ılen´ı spoleˇcn´ych datov´ych pol´ı
programov´ an´ı grafick´ eho ˇretˇ ezce revoluce v programov´an´ı 3D grafiky vertex-shader: zpracov´an´ı vrchol˚ u s´ıtˇe tesselation: rozdˇelov´an´ı pl´at˚ u na menˇs´ı troj˚ uheln´ıky, deformace podle textury, atp. geometry-shader: generov´an´ı element˚ u fragment-shader (pixel-shader): zpracov´an´ı jednotliv´ych pixel˚ u pˇred vykreslen´ım Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
V´yvojov´e n´astroje
pˇr´ıjemn´e pro program´atory i umˇelce vyˇsˇs´ı jazyky pro programov´an´ı GPU Cg (nVidia), HLSL (DirectX), GLSL (OpenGL) velmi podobn´e
kompozice grafick´ ych efekt˚ u kompaktn´ı popis cel´eho efektu (GPU programy, odkazy na data) v jednom souboru DirectX .FX form´at, nVidia CgFX form´at n´astroje: Effect Browser (Microsoft), FX Composer (nVidia), RenderMonkey (ATI)
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie I: Silicon Graphics
prvn´ı masovˇe rozˇs´ıˇren´e grafick´e pracovn´ı stanice hardwarovˇe akcelerovan´y grafick´y subsyst´em SW n´astroje a aplikaˇcn´ı programy, ”grafika == SGI”
vybran´e stanice (http://www.g-lenerz.de/) 1983: Iris 1000 - grafick´y termin´al k VAXu (Motorola 68000 @ 8 MHz, Geometry Engine, . . . ) 1984: Iris 2000 (grafick´a stanice, Clark GE), Iris 3000 1986: Profesional Iris 4D (prvn´ı s MIPS procesory) 1988: Power series, GTX, Personal Iris 4D 1991: Iris Indigo (asi nejpopul´arnˇejˇs´ı stanice SGI) 1992: Iris Crimson
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie II: Silicon Graphics, SGI
dalˇs´ı stanice a grafick´e syst´emy: 1992: 1993: 1993: 1996: 1997: 2000: 2002: 2003: 2008:
Indigo R4000 (64bit), Reality Engine Onyx (server s RE2) Iris Indigo2 (Extreme graphics) O2 (levn´a stanice), InfiniteReality engine Octane (2 procesory) Octane2 (Vpro gr.) Fuel Tezro (posledn´ı MIPS, SGI podporuje IRIX do 2013) Virtu (x86-based, nVidia)
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie III: Komoditn´ı produkty prvn´ı grafick´ y akceler´ ator do dom´ac´ıho poˇc´ıtaˇce 1996: 3Dfx Voodoo doplˇ nuje grafickou kartu (”pass-through”) biline´arn´ı filtrov´an´ı texel˚ u API Glide
prvn´ı karta se SLI 1998: 3Dfx Voodoo2 Scan Line Interleave - dvˇe karty spolupracuj´ı na vykreslen´ı obrazovky jedna kresl´ı sud´e ˇr´adky, druh´a lich´e nutnost aby obˇe karty mˇely stejnou informaci o sc´enˇe (tzn. velikost sc´eny limitovan´a velikost´ı pamˇeti jedn´e karty) pozdˇeji celou firmu koupila nVidia vˇcetnˇe t´eto technologie
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie IV: Komoditn´ı produkty prvn´ı karty od nVidia 1997: nVidia Riva 128 1998: nVidia Riva TNT (”TwiNTexel”)
prvn´ı HW T&L (”Transform and Lighting”) 1999: nVidia GeForce 256
rok 2000: nVidia GeForce 2 ATI Radeon
rok 2001: programov´ an´ı GPU DirectX 8.0 (vertex shaders, fragment shaders, 1.0, 1.1) nVidia GeForce 3 Titanium DirectX 8.1 (PS 1.2, 1.3, 1.4) ATI Radeon 8500 (TruForm) Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie V: Komoditn´ı produkty rok 2002: rozˇs´ıˇren´ e programov´ an´ı GPU DirectX 9.0 (VS, PS 2.0) nVidia GeForce 4 Titanium (DX 8) ATI Radeon 9700 [Pro]
rok 2003 DirectX 9.0 kompatibiln´ı karty jsou jiˇz levn´e (VS, PS 2.0) nVidia GeForce FX ATI Radeon 9800
rok 2004: rozˇs´ıˇren´ e programov´ an´ı GPU DirectX 9.0c (VS, PS 3.0) OpenGL 2.0 nVidia GeForce 6800 ATI Radeon X800 Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie VI: Komoditn´ı produkty rok 2005: PCI-Express sbˇernice nVidia uv´ad´ı obnovenou SLI, ATI podobn´e CrossFire nVidia GeForce 7800 ATI Radeon X550, X850
rok 2006: OpenGL 2.1 DirectX 10 (Widows Vista) - geometry shaders nVidia GeForce 7600, 7900 ATI Radeon X1800, X1900
rok 2007 CUDA - nVidia zpˇr´ıstupˇ nuje GPU pro obecn´e u ´lohy nVidia GeForce 8800 ATI Radeon HD 2400, 3850 Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Historie VII: Komoditn´ı produkty rok 2009: OpenGL 3.2 DirectX 11 GPU tesselation architektura nVidia Fermi
rok 2010 OpenGL 4 OpenCL - multiplatformn´ı programov´an´ı GPU pro obecn´e u ´lohy
dalˇs´ı v´ yrobci: Matrox, 3DLabs, S3, PowerVR (Kyro), SiS Intel - nejvˇ etˇs´ı v´yrobce grafick´ych ˇcip˚ u
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
ˇ ezec zpracov´an´ı 3D grafiky I Retˇ Aplikace
Geometrie
Rasterizace
Aplikace: reprezentace 3D dat (virtu´aln´ı uloˇzen´ı na disku i v pamˇeti), parametrizace, ˇsablony, . . . chov´ an´ı objekt˚ u: fyzik´aln´ı simulace, umˇel´a inteligence interakce uˇzivatele, mezi objekty (kolize, deformace), . . . Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
ˇ ezec zpracov´an´ı 3D grafiky II Retˇ Aplikace
Geometrie
Rasterizace
Geometrie: modelov´ e transformace (pom´ahaj´ı aplikaˇcn´ı vrstvˇe) projekˇ cn´ı transformace (perspektiva), oˇrez´ av´ an´ı v´ ypoˇ cet osvˇ etlen´ı (pˇr´ıp. jen pˇr´ıprava jist´ych vektor˚ u, . . . ) dlouh´y ˇretˇezec (pipeline), ˇretˇezc˚ u m˚ uˇze b´yt v´ıce Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
ˇ ezec zpracov´an´ı 3D grafiky III Retˇ Aplikace
Geometrie
Rasterizace
Rasterizace (vykreslen´ı): pˇrevod objekt˚ u sc´eny do fragment˚ u a jejich zpracov´an´ı do jednotliv´ych pixel˚ u v´ypoˇcet viditelnosti (depth buffer), mapov´an´ı textur a jejich kombinace, interpolace barev, pr˚ uhlednost, mlha Pelik´ an, Jan Hor´ aˇ cek avisl´ Hardware pro poˇ ca ´ıtaˇ cı) ovou grafiku NPGR019 vysok´y Josef paralelismus (nez´ e zpracov´ n´
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Sch´ema OpenGL (Fixed Function Pipeline) HW T&L (Hardware Transform and Lighting)
Rasterizace se na ˇcipu dˇel´a jiˇz dlouho
IrisGL: dˇr´ıve, display list od nVidia GeForce 256 (1999) Vertex data
Vertex Transform and Lighting Primitive Setup and Rasterization
Pixel Data
stanice Silicon Graphics API: IrisGL apod. multitexturov´ an´ı: aˇz druh´a polovina 90.let
Fragment Coloring and Texturing
Blending
Texture Store
OpenGL Fixed Functionality Pipeline Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
OpenGL: geometrick´a primitiva typy geometrick´ych primitiv: bod, u ´seˇ cka, lomen´a ˇc´ara, smyˇcka polygon, troj´ uheln´ık, prouˇzek troj´ uheln´ık˚ u, vˇej´ıˇr troj´ uheln´ık˚ u, ˇctyˇru ´heln´ık, prouˇzek ˇctyˇru ´heln´ık˚ u pozor: v nov´ych verz´ıch pˇribylo nˇekolik dalˇs´ıch (napˇr. patch, bude v pˇredn´aˇsce o OpenGL 4), ovˇsem nˇekter´a primitiva byla odstranˇena napˇr. ˇctyˇr˚ uheln´ık
zpracov´an´ı jednotliv´ ych vrchol˚ u glVertex, glColor, glNormal, glTexCoord, . . . neefektivn´ı (mnoho vol´an´ı funkc´ı) a dnes uˇz nen´ı v core profile
pole vrchol˚ u glDrawArrays, glMultiDrawArrays, glDrawElements, . . . glColorPointer, glVertexPointer, nebo prokl´ ad´ an´ı Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Geometrick´a primitiva I
v0
v0
v0
v1
v2
v4
v1
v2
v3
v5
GL POINTS
v0
v4
v1
v5
GL LINES
Josef Pelik´ an, Jan Hor´ aˇ cek
v2
v2
v3
v4
v1
v3
v5
GL LINE STRIP
v3
v5
v4
GL LINE LOOP
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Geometrick´a primitiva II
v0
v0
v1
v1
v2
v4
v1
v2
v3
v5
v4
GL TRIANGLES
v0
v3
v5
GL TRIANGLE STRIP
Josef Pelik´ an, Jan Hor´ aˇ cek
v2
v5
v3
v4
GL TRIANGLE FAN
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Geometrick´a primitiva III v nov´ych verz´ıch OpenGL jiˇz nejsou existuj´ı jeˇstˇe nov´a primitiva, budou v pˇredn´aˇsce o OpenGL 4 v0
v0
v0
v1 v3
v2
v2 v5
v4 v7
GL QUADS
v1
v6
v7
v3 v5
v4 v6
v v
v6 v7
GL QUAD STRIP Josef Pelik´ an, Jan Hor´ aˇ cek
v1
v5
v4
GL POLYGON
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Geometrick´a data na serveru aˇz od OpenGL 1.5 dnes ovˇsem velmi d˚ uleˇzit´e v OpenGL buffer na stranˇ e grafick´ eho serveru obsahuj´ıc´ı geometrick´a data zaloˇzen´ı bufferu: glGenBuffers, glBindBuffer zad´ an´ı dat z pole: glBufferData, glBufferSubData mapov´ an´ı do pamˇeti aplikace: glMapBuffer, glUnmap . . .
pr´ace s klientskou pamˇet´ı nebo bufferem: glColorPointer, glNormalPointer, glVertexPointer, . . . dnes se uz nepouˇz´ıv´a, skoro vˇse mus´ı b´yt na stranˇe serveru (z˚ ustalo pouze glVertexAttribPointer)
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Zpracov´an´ı vrchol˚ u
transformace vrchol˚ u modelovac´ımi a projekˇcn´ımi maticemi glMatrixMode glLoadIdentity, glLoadMatrix, glMultMatrix glRotate, glScale, glTranslate, . . . osvˇ etlovac´ı atributy glLight, glLightModel, glMaterial
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Sestaven´ı a zpracov´an´ı primitiv
sestaven´ı (Assembly) urˇcen´ı, kolik vrchol˚ u primitivum potˇrebuje shrom´aˇzdˇen´ı bal´ıˇcku dat a odesl´an´ı d´al
zpracov´ an´ı primitiv oˇrez´av´an´ı (clipping) projekce do zorn´eho objemu (frustum) - dˇelen´ı w projekce a oˇrez´an´ı do 2D ok´enka (viewport) odstranˇen´ı odvr´acen´ych stˇen (culling) - jednostrann´a vs. oboustrann´a primitiva
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Rasterizace, fragmenty rasterizace = vykreslen´ı vektorov´ych primitiv rozklad geometrick´ych objekt˚ u na fragmenty geometrick´e objekty: body, u ´seˇcky, troj˚ uheln´ıky
fragment rastrov´ y element, kter´y potenci´alnˇe pˇrisp´ıv´a k barvˇe nˇejak´eho pixelu velikost: stejn´a nebo menˇs´ı neˇz u pixelu (anti-aliasing) ”bal´ıˇcek dat”proch´azej´ıc´ı rasterizaˇcn´ı jednotkou GPU: vstup/v´ystup: x,y,z (pouze hloubku lze mˇenit!) texturovac´ı souˇradnice t0 aˇz tn leskl´ a a difusn´ı barva, textury, koeficient mlhy, uˇzivatelsk´ a data, . . . v´ystupn´ı barva RGB a nepr˚ uhlednost α (frame-buffer op.)
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Interpolace ve fragmentech
atributy fragment˚ u se automaticky interpoluj´ı z hodnot ve vrcholech hloubka (z nebo w) texturov´e souˇradnice barvy (leskl´a a difusn´ı sloˇzka) uˇzivatelsk´e atributy, . . .
rychl´e HW interpol´ atory perspektivnˇ e korektn´ı interpolace jen [x,y] se mˇen´ı line´arnˇe ostatn´ı veliˇciny vyˇzaduj´ı jedno dˇelen´ı na kaˇzd´y fragment
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Zpracov´an´ı fragment˚ u texturovac´ı operace maxim´alnˇe optimalizovan´ e operace v´ybˇer barvy z texturovac´ı pamˇeti interpolace texel˚ u: line´ arn´ı, mip-mapping, anisotropic filtering, . . . speci´ aln´ı HW pro naˇc´ıt´ an´ı a interpolaci texel˚ u
kombinace nˇekolika textur (v´ybˇer z mnoha operac´ı) zvl´aˇstn´ı efekty (bump-mapping, environment mapping)
v´ypoˇcet mlhy podle hloubky z
kombinace prim´arn´ı a sekund´arn´ı barvy (diff., spec.)
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Upotˇreben´ı fragment˚ u (per-fragment op.) lokalizace fragmentu do kter´eho pixelu patˇr´ı?
test uˇ zivatelsk´ eho oˇrez´ an´ı (glScissor) test odm´ıtnut´ı podle pr˚ uhlednosti (glAlphaFunc) test ˇsablony (stencil test, glStencilOp) test hloubky (depth test, glDepthFunc) kompozice barvy (podle pˇr´ıpadn´e pr˚ uhlednosti) dithering (pˇr´ıp. konverze barvy pro frame-buffer) logick´ a operace (glLogicOp)
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Glob´aln´ı operace s frame-bufferem frame-buffer se skl´ad´a z nˇekolika buffer˚ u front,back,left,right, . . . (double-buffering, stereo) nastaven´ı aktu´aln´ıho kresl´ıc´ıho bufferu (glDrawBuffer)
inicializace buffer˚ u (glClear) glClearColor, glClearDepth, glClearStencil, glClearAccum
ˇr´ızen´ı pˇrenosu dat do grafick´ eho serveru glFlush: neblokuj´ıc´ı vol´an´ı, vˇsechny dosavadn´ı pˇr´ıkazy se ukonˇc´ı co nejdˇr´ıve (pˇr´ıkazy mohou b´yt bufferovan´e, napˇr. pro lepˇs´ı v´ykon) glFinish: blokuj´ıc´ı, dokonˇc´ı celou kresbu v dan´em kontextu, ˇcek´a dokud vˇse na serveru nen´ı hotovo
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Pˇrenos rastrov´ych obr´azk˚ u aplikaˇ cn´ı pamˇ et’ → frame-buffer dˇr´ıve se pˇr´ımo dalo pouˇz´ıt vykreslov´an´ı: glDrawPixels, glBitmap efektivnˇejˇs´ı uloˇzit do textury a vykreslit pomoc´ı texturovan´eho polygonu
aplikaˇ cn´ı pamˇ et’ → texturov´ a pamˇ et’ jen pˇres unpacking a pixel transfer glTexImage, glTexSubImage
pˇrenos uvnitˇr OpenGL glBlitFramebuffer (dˇr´ıve glCopyPixels) glCopyTexImage, glCopyTexSubImage: c´ılem je textura
frame-buffer → aplikaˇ cn´ı pamˇ et’ glReadPixels: pomal´a operace i na rychl´ych sbˇernic´ıch, je tˇreba vypr´azdnit pipeline Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Konverze a rastrov´e operace
pixel unpacking pˇrevod z form´atu aplikace do OpenGL (coherent stream of pixels, group of pixels) {RGB[α] — depth — stencil}[][] zdrojov´y form´at, d´elka rozkladov´e ˇr´adky, offsety nastaven´ı: glPixelStore
pixel packing opaˇcn´y pˇrevod
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Sch´ema OpenGL (Programmable Pipeline) pˇrid´ano ofici´alnˇe v OpenGL 2.0 (pomoc´ı rozˇs´ıˇren´ı i dˇr´ıve) z˚ ustal i fixn´ı ˇretˇezec stejn´e aˇz do roku 2009 OpenGL 3.1 Vertex data
fragment shading vylepˇsil zpracov´an´ı fragment˚ u
Vertex Processor Primitive Setup and Rasterization
Pixel Data
vertex shading vylepˇsil fixn´ı T&L
Fragment Processor
Blending
Texture Store
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Vertexov´y procesor
nahrazuje modul zpracov´ an´ı vrchol˚ u: transformace vrchol˚ u transformace a normalizace norm´alov´ych vektor˚ u v´ypoˇcet/transformace texturovac´ıch souˇradnic v´ypoˇcet osvˇetlovac´ıch vektor˚ u nastaven´ı materi´alov´ych konstant do vrchol˚ u
nem˚ uˇ ze ovlivnit poˇ cet vrchol˚ u (nelze pˇridat ani ubrat vrchol) typ/topologii geometrick´ych primitiv ˇc´ asteˇcn´e ˇreˇsen´ı: degenerace primitiv
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Fragmentov´y procesor nahrazuje modul zpracov´ an´ı fragment˚ u: aritmetick´e operace s interpolovan´ymi hodnotami ˇcten´ı dat z textur aplikace textur v´ypoˇcet mlhy z´avˇereˇcn´a synt´eza barvy fragmentu moˇznost modifikace hloubky fragmentu (ale vyˇrad´ı early depth test)
nem˚ uˇ ze ovlivnit poˇ cet fragment˚ u (nelze pˇridat ani ubrat fragment) polohu fragmentu na obrazovce [x,y]
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Programov´an´ı procesor˚ u v GPU
Vertex shader k´ od zaveden´y ve vektorov´em procesoru
Fragment shader k´ od zaveden´y ve fragmentov´em procesoru
aplikaˇcn´ı program´ator m˚ uˇ ze tyto k´ ody mˇenit HW nez´ avisl´ e programovac´ı jazyky mikrok´ od pro GPU se kompiluje aˇz v dobˇe bˇehu aplikace (omezen´ı - r˚ uzn´e profily/verze) low-level instrukce (jazyk se podob´a assembleru) nebo vyˇsˇs´ı jazyky: Cg, HLSL, GLSL
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
OpenGL 3 odstranˇena FFP a pˇr´ım´y m´ od (glBegin/glEnd) nov´y syst´em kontextov´ych profil˚ u - zp˚ usob odstraˇ nov´an´ı star´e funkcionality textury v plovouc´ı ˇr´adov´e ˇc´arce HW instancing geometry shaders moˇznost generovat/odstraˇ novat vrcholy i primitiva hned za vertex shaderem
GLSL 1.3-1.5 nativn´ı bitov´e operace a pr´ace s cel´ymi ˇc´ısly rozˇs´ıˇren´ı mnoha dalˇs´ıch parametr˚ u
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
OpenGL 4 nov´a primitiva (GL PATCHES), troj´ uheln´ıky a ˇc´ary se sousednost´ı (GL TRIANGLES ADJACENCY), . . . ) HW tesselation dva nov´e shadery: Tesselation Control Shader, Tesselation Evaluation shader
pˇr´ım´e propojen´ı s extern´ımi v´ypoˇcetn´ımi API, napˇr. OpenCL bez CPU moˇznost ukl´adat bin´arn´ı verzi shader˚ u GLSL 4.00 podpora pro 64-bitovou plovouc´ı ˇc´arku shaderov´e podprogramy oddˇelen´e shaderov´e ˇretˇezce Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Literatura Tomas Akenine-M¨ oler, Eric Haines: Real-time rendering, nd 2 edition, A K Peters, 2002, ISBN:1568811829 OpenGL Architecture Review Board: OpenGL Programming Guide: The Official Guide to Learning OpenGL, Addison-Wesley, nejnovˇejˇs´ı vyd´an´ı (aktu´alnˇe 8. vyd´an´ı pro OpenGL 4.1) Randi J. Rost, Bill Licea-Kane: OpenGL Shading Language, 3rd Edition, Addison-Wesley, Randima Fernando, Mark J. Kilgard: The Cg Tutorial, Addison-Wesley, 2003, ISBN: 0321173481
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019
´ Uvod a historie Pipeline Geometrick´ a primitiva Zpracov´ an´ı fragment˚ u Programovateln´ y ˇretˇ ezec
Literatura
The Khronos Group: The OpenGL Graphics System: A Specification (Core/Compatibility profile), http://www.opengl.org/registry/ Christophe Riccino: OpenGL reviews, http://www.g-truc.net/post-opengl-review.html Wikipedia: http://en.wikipedia.org/wiki/OpenGL OpenGL tutorials: http://nehe.gamedev.net
Josef Pelik´ an, Jan Hor´ aˇ cek
Hardware pro poˇ c´ıtaˇ covou grafiku NPGR019