Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 8. září 2009, 08:19:31 Předmět: Shader Model 3/4 |
|
|
Zdravím,
narazil jsem na problém s Shader Modelem 4. Celou dobu jsem svou aplikaci psal pro SM3 na sedmičkové řadě NVidia, v minulém týdnu jsem ale aplikaci vyzkoušel na několika řadách NVidie s Shader Modelem 4 a zjistil jsem, že se mi chová jinak předávání hodnot přes uniform proměnné, přesněji pole uniformních proměnných.
Před renderováním modelu si do shaderu nacpu aktuální transformace kostí, abych je pak v shaderu aplikoval k modelu. Problém je, že na Shader modelu 3 mi to běží v pohodě, ale na Shader modelu 4 se pravděpodobně předají transformace kostí jen na poprvé a dále se pak již v gpu neupdatují.
Nevíte někdo o nějaké optimalizaci sm čtyřky, která by toto mohlo způsobovat? |
|
Návrat nahoru |
|
 |
am!go

Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 8. září 2009, 10:11:25 Předmět: |
|
|
Měl by jsi uvést, jestli používáš DX9 nebo OGL a co máš za OS. |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 8. září 2009, 10:18:34 Předmět: |
|
|
am!go napsal: |
Měl by jsi uvést, jestli používáš DX9 nebo OGL a co máš za OS. |
Zkoušel jsem to na windows XP, Windows Vista a Windows Seven (primárně Windows Seven). Jedná se o OpenGL, GLSL. |
|
Návrat nahoru |
|
 |
am!go

Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 8. září 2009, 11:09:28 Předmět: |
|
|
Na OpenGL bohužel moc odborník nejsem a pro shadery jsem u něj používal vždycky Cg, nicméně..
U SM4 se hodnoty už neposílaj po jedný, ale najednou v constant bufferech (jenom textury snad pořád posílají po jedný). Cg cbuffery s OGL v pohodě podporuje, ale i tak je to docela zásah do kódu tvý aplikace. S GLSL jsem nikdy nedělal, takže nevím jak to přesně řeší. |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 8. září 2009, 13:47:07 Předmět: |
|
|
a to si prepisal na SH4 alebo si len apliaciu ktora bezu na geforce 7 pustil na geforce 8 a uz nefunguje? _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 8. září 2009, 20:22:06 Předmět: |
|
|
Constant (uniform) buffery nejsou v OpenGL povinné ani v SM4.0. Dále, v OpenGL se myslím SM přímo neurčuje, určuje se jenom GLSL verze (1.3 a víc je SM4.0, constant buffery má ale až 1.4). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 8. září 2009, 23:15:46 Předmět: |
|
|
nou napsal: |
a to si prepisal na SH4 alebo si len apliaciu ktora bezu na geforce 7 pustil na geforce 8 a uz nefunguje? |
Nikde nenastavuji pro jakej SM je aplikace určena. Ona aplikace na GeForce 8xxx a víš funguje, jen se jinak chová předávání uniform proměnných.
Eosie napsal: |
Constant (uniform) buffery nejsou v OpenGL povinné ani v SM4.0. Dále, v OpenGL se myslím SM přímo neurčuje, určuje se jenom GLSL verze (1.3 a víc je SM4.0, constant buffery má ale až 1.4). |
Asi jsem sto let za opicema, ale jak se nastavuje u OpenGL kterou verzi GLSL chci použít? Tohle mě asi nějak přeskočilo. |
|
Návrat nahoru |
|
 |
JohnyDog

Založen: 17. 08. 2007 Příspěvky: 66
|
Zaslal: 8. září 2009, 23:21:37 Předmět: |
|
|
klapauciusk napsal: |
Asi jsem sto let za opicema, ale jak se nastavuje u OpenGL kterou verzi GLSL chci použít? Tohle mě asi nějak přeskočilo. |
na zacatku shaderu
_________________
 |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 9. září 2009, 08:32:48 Předmět: |
|
|
#version 140 by som prilis neodporucal kedze to nie je pisane pre shader4. skor by som nechal tak mala by to byt potom verzia 1.10. popripade by som pouzil len #version 120
a len tak mimochodom. ako nastavujes uniform polia?
vertex shader
kód: |
uniform vec4 bone[10];
|
kód: |
float bone[40];
GLint loc = glGetUniformLocation(shader, "bone");
glUniform4fv(loc, 10, bone);//pozor 10 nie 40
|
_________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 9. září 2009, 08:55:38 Předmět: |
|
|
Díky moc, hledal jsem to porad v aplikaci:-/
nou napsal: |
ako nastavujes uniform polia?
vertex shader
kód: |
uniform vec4 bone[10];
|
kód: |
float bone[40];
GLint loc = glGetUniformLocation(shader, "bone");
glUniform4fv(loc, 10, bone);//pozor 10 nie 40
|
|
Jj, takto pole predavam. Mam v shaderu pole o velikosti sto prvku a v aplikaci si hlidam, aby jich tam neslo vic. Do pole pak také neindexuji určitě špatně.
Jdu vyzkoušet tu verzi, snad to je tím, díky. Stejně by mě zajímalo jak se tohle v glsl 1.4 resi:-/ |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 9. září 2009, 13:10:13 Předmět: |
|
|
Tak jsem narazil na problém, že když na tvrdo nadefinuji verzi 120, přijdu o podporu celých číslel předávaných přes uniform.
Nedoporučil by mi někdo literaturu, kde jsou řešeny problémy kompatibility mezi jednotlivými GLSL verzemi a omezení jednotlivých verzí.? |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 9. září 2009, 15:38:40 Předmět: |
|
|
Celá čísla jsou jenom v SM4.0, tedy v GLSL 1.3 a výš. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 9. září 2009, 17:32:45 Předmět: |
|
|
Eosie napsal: |
Celá čísla jsou jenom v SM4.0, tedy v GLSL 1.3 a výš. |
Do teď jsem aplikaci dělal na NVIDIA QForce Quatro 1500M, která je založena na sedmičkové řadě a tam mi celá čísla v GLSL fungují, tedy do okamžiku než přesně nadefinuji verzi shaderů.
Začínám být čím dál tím víc zmaten. No řídit shader FLOATama, místo INTama je to nejmenší  |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 9. září 2009, 17:56:09 Předmět: |
|
|
Na starších myslím můžeš mít int na vstupu a indexovat s ním pole ve vertex shaderu, ale nemáš tam pro něj aritmetické instrukce. S intem se dá pak pracovat jen během překladu (tedy psát takový kód, který závisí jen na literálech). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 13. září 2009, 14:17:27 Předmět: |
|
|
Chtěl bych všem poděkovat. Problém kompatibility jednotlivých verzí opravdu vyřešilo přesné určení verze:
Přišel jsem sice o podporu celých čísel předávaných přes attribute, ale podpora celých čísel v shaderech zůstala, takže stačí jen předávat intové parametry přes float a pak jej v shaderu zkonvertovat na int.
Podpora celých čísel je krom atributů v GLSL 1.2 plná, takže např. přes uniform jdou předávat. Podpora aritmetických operací a konverzí s intama je v GLSL 1.2 taktéž plná.
Naposledy upravil klapauciusk dne 13. září 2009, 15:17:25, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
|