Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
kerekes
Založen: 29. 07. 2007 Příspěvky: 57
|
Zaslal: 1. červenec 2011, 08:23:29 Předmět: |
|
|
Eosie napsal: |
OpenGL nejde používat z více vláken zároveň. Pro thread-safety je fakt lepší, aby správa okna i OpenGL běželo pod jedním vláknem (ono to stejně ani jinak funkční udělat nejde). |
S tym si dovolim nesuhlasit. Da sa to len treba dat pozor aby:
1. v jednom case volalo gl volania len jedno vlakno.
2. aby tie volania tvorili logicke celky (tj aby vysledna seria gl volani z roznych threadov davala zmysel)
- priklad:
ak v jednom threade kde renderujes nejaku vec volas trebarz bindovanie textury (A), buffra (B), drawcall (C) ... a v tom ti medzi A a B strci druhy (napr streamovaci) thread upload textury, nedajboze vacsej tak to samozrejme crashne, ale ak to oddelis do celkov ktore sa nebudu navzajom bit tak to vpohode funguje
EDIT: beriem spat, na windows to takto jednoducho nefunguje |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 1. červenec 2011, 09:15:03 Předmět: |
|
|
I kdyby to šlo, takový postup není využití více vláken (musej na sebe pořád čekat). _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 1. červenec 2011, 12:39:06 Předmět: |
|
|
Ono samozřejmě jde udělat rendering z více vláken, když máš více kontextů. Kontexty mohou sdílet buffery, textury a jiný věci, takže spolupráce je možná. glFlush se používá, pokud chceš, aby operace z jednoho kontextu viděl i druhý kontext. Např. když uděláš rendering do textury a nezavoláš glFlush, tak jiný kontext nemusí mít tu texturu aktualizovanou, protože ten renderovací příkaz ještě bude čekat ve frontě toho jednoho kontextu.
Předtím jsem ovšem měl na mysli vícevláknový rendering pouze s jedním kontextem, což samozřejmě nejde, protože jeden kontext se může používat pouze z jednoho vlákna. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 1. červenec 2011, 13:16:53 Předmět: |
|
|
Ked sme uz pri tom, ako to vlastne funguje? Naspawnujem si vlakna, v kazdom si nainicializujem novy kontext, prepnem si v tom vlakne na svoj RC a potom mozem fakt "renderovat" paralelne? Tj posielat prikazy ako glDraw* v kazdom vlakne na iny kontext na tom istom HW zariadeni? Ako to ten driver potom serializuje? :O _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 1. červenec 2011, 13:26:45 Předmět: |
|
|
Asi podobně, jako když máš souběžně puštěné 2 OpenGL programy . _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 1. červenec 2011, 14:02:25 Předmět: |
|
|
rozběhla se tady zajímavá diskuze, problem solved, vytvářel jsem shader v sdíleným kontextu, to bylo celý proč to padalo. Jakmile jsem toto opravil tak zmizel invalid enum a jede to aji pod ATI. Diky za napady  |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 1. červenec 2011, 14:21:23 Předmět: |
|
|
pcmaster napsal: |
Ked sme uz pri tom, ako to vlastne funguje? Naspawnujem si vlakna, v kazdom si nainicializujem novy kontext, prepnem si v tom vlakne na svoj RC a potom mozem fakt "renderovat" paralelne? Tj posielat prikazy ako glDraw* v kazdom vlakne na iny kontext na tom istom HW zariadeni? Ako to ten driver potom serializuje? :O |
Každý kontext si cpe příkazy do fronty. Není to obyčejná fronta, je to spíš buffer příkazů pro GPU v určitém GPU-specific formátu (tzn. jsou tam nějaké pakety), který GPU postupně parsuje a podle toho to vykonává.
Paralelismus je tam v tom, že ta fronta příkazů se plní paralelně (každý kontext má vlastní frontu), ale GPU se předávají za sebou podle pořadí volání glFlush. Pokud glFlush nevoláte, tak se volá automaticky, když je fronta plná. To glFlush ti tam dává možnost určité synchronizace. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|