View previous topic :: View next topic |
Author |
Message |
snauts Indago Uzvarētājs
Joined: 18 Sep 2007 Posts: 37
|
Posted: Thu Oct 22, 2009 10:14 pm Post subject: glsl šeideri |
|
Vobšem uz ATI kartes šitais strādā, bet uz NVIDIA nē:
Code: |
float i = 1.0;
while (i < 256.0) {
i *= 2.0;
}
|
Vot nez kāpēc, lai strādātu uz NVIDIA vajag kaut kā tā:
Code: |
float i = 1.0;
float j = 1.0;
while (j < 8.0) {
i *= 2.0;
j += 1.0;
} |
Kāpēc tas varētu būt tā?
P.S. Es lietoju linux |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Oct 22, 2009 10:51 pm Post subject: |
|
Ņemot vērā mūsdienu šausmīgās kvalitātes videokaršu draiverus, iesaku ne par ko vairs nebrīnīties.. Ir redzēti visādi joki uz abu veidu videokartēm.
Anyway, kā tas ir - nestrādā? Šeideri neļauj uzstādīt / nekompilē / dod nepareizus rezultātus šeideris? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
snauts Indago Uzvarētājs
Joined: 18 Sep 2007 Posts: 37
|
Posted: Thu Oct 22, 2009 11:07 pm Post subject: |
|
Šeideris nokompilējas bez problēmām, bet proga nokrašo ar FLOATING-POINT-INVALID-OPERATION brīdī, kad izsauc glLinkProgram funkciju. Es pamēģināju NVIDIAs gan 185, gan 173 versijas draiverus, tas pats.
GLSLam gadījumā nav kaut kādi ierobežojumi uz cikliem? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Oct 23, 2009 12:09 am Post subject: |
|
Ja pareizi atceros, tad vecajos šeideru modeļos (<=SM2.0 vai pat līdz SM3.0) vispār cikli neeksistē. Viņu darbības tiek automātiski šeiderī saliktas tā, kā izpildītos un šeiderus ar šeiderī ierakstītiem bezgalīgajiem cikliem vispār nenokompilē.
Bet šeit izskatās, ka problēma ir ar koda optimizētāju. Vienkārši neredzu neko tādu, kas varētu izsaukt šādu error'u.
Btw, kā izskatās viss šeideris un uz kādām videokartēm testēji? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
snauts Indago Uzvarētājs
Joined: 18 Sep 2007 Posts: 37
|
Posted: Fri Oct 23, 2009 12:25 am Post subject: |
|
HD4600 un 9800GTX+
Nu es jau to šeideri pārakstīju kā nākas, tagad viss strādā, bet grābeklis jau baigais. Nez vai arī zem windows GLSL+NVIDIA tāpat uzvedas? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Oct 23, 2009 8:06 am Post subject: |
|
Jā, uzvedas tāpat. Gan ATI, gan Nvidia GLSL šeideru kompilētāji regulāri taisa visādas nejaucības. Pirmais, ko jādara, noteikti ir uzlikt jaunākos un pēdējos dravierus.
GLSL ierobežojumi uz cikliem ir tik daudz, cik ļauj konkrētās videokartes iespējas. Aizvēsturiskas videokartes ciklus nemāk un neļauj rakstīt. Kompilējot GLSL ar mainīga garuma ciklu dabūsi kļūdu. Ar konstanta garuma cikliem nevajadzētu būt problēmām, ja vien netiek pārsniegts ģenerēto instrukciju skaita limits.
Var pamēģināt lietot for, nevis while ciklu. Iespējams der arī pamēģināt int tipa cikla skaitītāju, nevis float'u - float'i kā nekā ir neprecīzi. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Oct 23, 2009 12:42 pm Post subject: |
|
Quote: | float'i kā nekā ir neprecīzi |
Tā neprecizitāte jau nav tik liela.. (ATI kartēm laikam bija 24 biti, kuru dēļ kaut kas var nestrādāt - http://snake5.wordpress.com/2009/10/07/d3d9-un-ati-joki/ , bet šeit ir nVidia problēmas..) Bet, ja tā nebūtu kompilēšanas problēma, varētu pamēģināt
while (i < 256.0)
vietā lietot
while (i < 255.5)
P.S. Varbūt ir kāda iespēja pačekot to optimizēto šeidera ASM kodu un apskatīties, kura darbība tieši ir nepareizi pārveidota / ar ko varētu galā netikt kompilētājs? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Oct 23, 2009 2:10 pm Post subject: |
|
24bit'i ir tikai SM3 paaudzes kartēm. SM4 paaudzei tie jau ir pilnvērtīgi 32-bit'i. Nvidiai savukārt bija 16-bit'i uz 32-biti pāreja SM2->SM3 paaudzei. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Oct 23, 2009 3:27 pm Post subject: |
|
Quote: | SM4 paaudzei tie jau ir pilnvērtīgi 32-bit'i. |
Oh, skaidrs.. bet tad es pavisam nesaprotu, kāpēc manai videokartei (SM4) tādi gļuki rādījās tur, kur tiem nevajadzēja būt.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
EDDY
Joined: 07 Oct 2005 Posts: 1610 Location: Dzimtā zeme, Latvija
|
Posted: Fri Oct 23, 2009 3:31 pm Post subject: |
|
Man gan likās, ka tikai G200 modeļiem bija 32 biti, pārējiem ne.
A varbūt liekās... _________________ Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday |
|
Back to top |
|
|
|