dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

glsl šeideri

 
dev.gamez.lv Forum Index -> OpenGL
View previous topic :: View next topic  
Author Message
snauts
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 18 Sep 2007
Posts: 37

PostPosted: 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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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.. Very Happy 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
View user's profile Visit poster's website
snauts
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 18 Sep 2007
Posts: 37

PostPosted: 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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
snauts
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 18 Sep 2007
Posts: 37

PostPosted: 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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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.. Very Happy
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
EDDY



Joined: 07 Oct 2005
Posts: 1610
Location: Dzimtā zeme, Latvija

PostPosted: 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
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> OpenGL All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group