Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 16. červenec 2009, 17:51:12 Předmět: glBegin - glVertex - glEnd :: funkce |
|
|
Zdravím,
otázka je jednoduchá,
co se přesně děje, když volám glBegin, pak nějaké vertexy a nakonec glEnd...
Myslím to tak, co přesně provádí procesor, jak to vypadá s pamětí a co se děje s grafickou kartou...
Dopředu upozorňuji, že mě nezajímá to, že je glBegin-glEnd neefektivní a že je lepší použít VA, popř. VBO apod... to vím i bez toho aby mi to pořád někdo opakoval...jak říkám, zaměřte se především na zodpovězení otázky...
Moc děkuji...
PS: Prosím zdržte se OT...forum je toho plné...  _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
michalferko
Založen: 29. 09. 2008 Příspěvky: 83
|
Zaslal: 16. červenec 2009, 18:21:43 Předmět: |
|
|
povedal by som ze to je ine pre kazdu implementaciu. Ale tak hadam sa iba zapisuju do interneho bufferu v pamati hodnoty a pri glEnd sa jednym supom poslu na grafiku. Google by mozno vedel odpovedat na urcite implementacie |
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 17. červenec 2009, 04:14:36 Předmět: |
|
|
ano, zalezi na implementaci. rozhodne se ale nemusi cekat na glEnd. to jenom rika, ze se muze pak dalsim glBegin zmenit druh primitiv a ze se muzou menit veci, ktere se mezi glBegin a glEnd menit nesmeji.
S transformaci vertexu se muze zacit hned po kazdem vertexu. S rasterizaci jakmile byl zadan dostatecny pocet vertexu. Takze u jednotlivych trojuhelniku se muze rasterizovat po kazdych 3.
Pokud ma GK volne jednotky muze se proces paralelizovat. Ale inicializace jednotek probiha sekvencne.
Asi nejvetsi nevyhoda je vysoke zatizeni CPU instrukcemi CALL, kdy se kopiruji na zasobnik parametry, aby se v zapeti vyprazdnil...
Kdyz jsem s tim delal nejake pokusy od 5 tisic trojuhelniku bylo CPU tak zahlcene, ze GK nemela absolutne co delat, ted by cisla byla trochu jina, ale trend odpovida.
Takze se tam nedeje zadna magie, trochu optimalizace muze byt pri pouziti s display listy. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 17. červenec 2009, 08:31:13 Předmět: |
|
|
s display listy spíš trochu hodně optimalizace (VODO promiň za OT), vypozoroval sem, že se DL chová většinou stejně rychle jako VB _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 17. červenec 2009, 10:29:56 Předmět: |
|
|
Viděl jsem testy, kde VBO bylo rychlejší než DL (u NVIDIA), asi se to liší případ od případu. Šlo by také udělat testy, které se budou chovat opačně...
Teď k tématu. Ladik to vesměs shrnul. Jeden z podstatných faktů je, že vertexy se odesílají na GK ve větších dávkách. PCIe pakety musí mít nějakou minimální velikost, aby se linka využila. Rozhodně nejde posílat data na GPU po třech vertexech bez velkých ztrát na propustnosti. Stejně tak grafika nedokáže zpracovávat data po třech vertexech, protože dalších X stream procesorů poběží naprázdno (nelze je tedy použít na nic jiného). GPU se začíná v praxi rozumně využívat při několika tisících vertexech na dávku, tam ale už končí propustnost glBegin/glEnd.
glBegin/glEnd i vertex arrays bez VBO musí používat pomocný buffer pro přenos na GPU, který je ale alokovaný v neodswapovatelné/nepřesunutelné paměti (takhle se musí posílat na GPU všechno), takže glBegin/glEnd není jediný, kdo tímto trpí. Jediný způsob, jak získat přímý přístup do tohoto bufferu, je glMapBuffer/glMapBufferRange.
V Mesa/DRI ani v Mesa/Gallium se glBegin/glEnd moc neoptimalizuje, protože to údajně nemá smysl. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 16. srpen 2009, 10:42:59 Předmět: |
|
|
I když jsem vás na začátku prosil o vynechání OT, sám to poruším...i když trochu to k tématu pořád patří...
Někde jsem četl (Eosie ), že se od DL upouští...
To by znamenalo, že kdybych teď chtěl urychlit vykreslování opakujících se statických objektů přes DL a pustil to na modernějších kartách, které už podporu DL nemají, tak to jednoduše nebude fungovat?
Takže...má cenu se do DL ještě pouštět?
No a co VA, jak jsem pochopil, má to stejná omezení jako glBegin/glEnd...jen s tím, že se volá jen jedna funkce(což to zrychlí)...
Já stále přemýšlím, jak toho vykreslovat více, ale vždy když přistoupím na něco nového, tak zjišťuji, že to má ke spoustě výhodám také spoustu nevýhod...
Proto jsem také založil toto téma... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 16. srpen 2009, 12:15:09 Předmět: |
|
|
Vertex arrays+VBO. To je správná cesta. Ale on to tady Eosie už přece psal, ne? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 16. srpen 2009, 14:23:24 Předmět: |
|
|
VODA napsal: |
To by znamenalo, že kdybych teď chtěl urychlit vykreslování opakujících se statických objektů přes DL a pustil to na modernějších kartách, které už podporu DL nemají, tak to jednoduše nebude fungovat? |
Nesmysl, fungovat to bude, pakliže explicitně nenastavíš OpenGL profil, který display listy zahazuje. Já nevidím důvod upouštět od display listů. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 16. srpen 2009, 15:46:13 Předmět: |
|
|
Deprecated? Že by tohle byl ten důvod, proč opustit DL? Stejně se hodí jenom na statické modely, takže proč prostě nepoužít VBO? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 16. srpen 2009, 20:07:34 Předmět: |
|
|
VODA napsal: |
Takže...má cenu se do DL ještě pouštět? |
Pro pohodlí jsou DL ok, ještě mnoho let to tu bude. Všichni výrobci to dnes podporují (jak efektivně, těžko soudit). Z definice snad žádné karty v historii neměly HW podporu DL, to by musely na hardwarové úrovni implementovat kompletní OpenGL state machine, což je blbost. Typicky se DL rozdělí na části (změna stavů, kreslení geometrie)^*, pokud to jde (pokud to nejde, tak to bude pomalé). DL je vhodné jak na geometrii, tak jako stavové objekty.
GL2.1 a starší, vše při starém.
GL3.0 nic neodstraňuje, jenom označuje věci jako deprecated, tzn. vše při starém.
GL3.1 odstraňuje většinu z deprecated, ale extenze ARB_compatibility je vrací zpět (forward compatibility kontext by měl potlačit zpřístupnění této extenze).
GL3.2 podporuje volitelný Compatibility profil, který úplně všechno vrací zpět (lepší než to mít jako extenzi).
V kuloárech se šušká, že by se DL mohly vrátit v nové lepší formě a s podporou multithreadingu. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|