.[ ČeskéHry.cz ].
compute shader reset atomic counteru

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1421
Bydliště: Telč

PříspěvekZaslal: 21. listopad 2018, 13:58:04    Předmět: compute shader reset atomic counteru Odpovědět s citátem

Zkouším přes atomic counter v GLSL compute shaderu spočítat určitý range v bufferu. Detaily jsou nepodstatné. Ale, co už podstatný je: na začátku bych ten atomic counter chtěl vynulovat (nebo spíš nastavit na nějakou hodnotu).

To můžu udělat kopií připravenýho bufferu do atomic counter bufferu. Nebo pomaleji přes map buffer.

Otázka ale je: lze ten atomic counter vynulovat přímo v compute shaderu, třeba když je global invocation id == 0? Musel bych mít zaručeno, že se to vynuluje hned jako první, než se budou počítat další invokace. Ovšem nevím, jestli na to funguje nějaká bariéra, nebo jiný synchronizační nástroj. Nic jsem na netu nenašel.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1742

PříspěvekZaslal: 21. listopad 2018, 18:54:36    Předmět: Odpovědět s citátem

Divoky napad: Pust si najprv separatny jedno-vlaknovy CS, ktory ti ho znuluje a za ten daj barieru. Az potom pusti tvoj hlavny CS.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 458
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 22. listopad 2018, 02:51:18    Předmět: Re: compute shader reset atomic counteru Odpovědět s citátem

Co se týče OpenGL-GLSL tak nevím zda budu schopný pomoct. V D3D12 obecně je potřeba provést ResourceBarrier po zápisu do counter bufferu.

Co se týče OpenGL našel jsem pouze thread na Github který se tomu věnoval (definice z ARB_shader_atomic_counter nejsou úplně jednozačné...), kde je řečeno:

citace:
Based on feedback from IHVs and their implementation of atomic counters we're planning to treat them like we treat other resources like image atomic, image load/store, buffer variables, etc. in that they require explicit synchronization from the application.


https://github.com/KhronosGroup/OpenGL-API/issues/14

Teď je otázka, když budeš v CS - tak teoreticky můžeš zkusit nastavit counter buffer na 0 uvnitř if(gl_GlobalInvocationID == 0), a poté barrier. Teoreticky by toto řešení mělo fungovat, ale!

Problém je že barrier funguje pouze ve workgroup - a pouze uvnitř workgroup je garantováno že bude v paměti zapsáno.

Další, hlavní, problém - nad tím v jakém pořadí a případně kolik najednou workgroup se bude zpracovávat - neexistuje žádná možnost kontroly (leda bys spouštěl ručně pouze po 1 workgroup uvnitř cyklu, a pokaždé čekal na dokončení).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1421
Bydliště: Telč

PříspěvekZaslal: 22. listopad 2018, 09:22:38    Předmět: Odpovědět s citátem

Díky. S barriérou v CS jsem se potýkal včera. Došel jsem právě k tomu závěru, že funguje pravděpodobně jen v rámci té workgrupy a tudíž if (gl_GlobalInvocationID == 0) nebude to pravé. Oni to samozřejmě i píšou v manuálu, ale nějak sme si kolegou nebyli jistí.

Napadlo mě to, co psal pcmaster, ale přijde mi to valstně skoro stejný, jako kopie z bufferu do bufferu na GPU. Stejně se bude muset za to dát bariéra a čekat na dokončení (případně doublebufferovat).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1742

PříspěvekZaslal: 22. listopad 2018, 09:50:12    Předmět: Odpovědět s citátem

Ze GlobalInvocationID == 0 bude fungovat, nemame nijaku garanciu, ale je to VELMI pravdepodobne Very Happy To z toho dovodu, ze scheduler fakt najprv spusti skupinu s vlaknom 0. Ale spoliehat sa na to, to radsej nie.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1421
Bydliště: Telč

PříspěvekZaslal: 22. listopad 2018, 10:02:53    Předmět: Odpovědět s citátem

No právě. Pak by to někde občas bliklo, nebo něco takovýho.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 458
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 22. listopad 2018, 13:15:20    Předmět: Odpovědět s citátem

citace:
To z toho dovodu, ze scheduler fakt najprv spusti skupinu s vlaknom 0.

Scheduler může najednou pustit i více workgroup (v ten moment celé řešení padá), což je celkem běžná záležitost - takže výsledek se pak může lišit na jiném hardware nebo i driveru.
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1742

PříspěvekZaslal: 22. listopad 2018, 15:25:00    Předmět: Odpovědět s citátem

To je pravda.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna