PDA

View Full Version : ATI s*x, b*e, Part II


bubu
03-20-07, 23:33
Turpinājums šim te: http://www.eoz.lv/forum/showthread.php?t=3838

Ja jūs zinātu kā man riebjas ATI...
Rakstu atkal kārtējo šeiderīti - bump/parallax mappings, soft shadows, un tamlīdzīgus niekus.
Uz Nvidias iet tā ka prieks (pat uz 5200fx). Taču uz ATI (Mobility Radeon X1600) ēnu nav.. Vispār nav. Nulle. Viss ir gaišs kā dienā.
Nesaprotu. Skatos, skatos. Ilgi skatos. Veselas 2.5 h skatījos.

Beigās atradu vainu GLSL vertex šeiderī. Šo te:
gl_TexCoord[2] = ecPosition * mat4( gl_EyePlaneS[2],
gl_EyePlaneT[2],
gl_EyePlaneR[2],
gl_EyePlaneQ[2] );
vajadzēja aizstāt ar: gl_TexCoord[2].x = dot( ecPosition, gl_EyePlaneS[2] );
gl_TexCoord[2].y = dot( ecPosition, gl_EyePlaneT[2] );
gl_TexCoord[2].z = dot( ecPosition, gl_EyePlaneR[2] );
gl_TexCoord[2].w = dot( ecPosition, gl_EyePlaneQ[2] );
Kautgan pēc OpenGL Shading Language 1.10 specifikācijas (varat paši gūglē uziet, par brīvu piejama) par matricu un vektoru reizināšanu ir rakstīts:
ja m ir mat4 tipa matrica (manā gadījumā tā ir uzkonstruēta pirmajā koda piemērā ņemot tos gl_EyePlanesX kā matricas kolonnas) un
v ir vec4 tipa vektors (manā gadījumā ecPosition) un
g ir vec4 tipa vektors (manā gadījumā gl_TexCoord[2]), tad g = v * m pieraksts ir ekvivalents ar:
g.x = dot (v, m[0]);
g.y = dot (v, m[1]);
g.z = dot (v, m[2]);
g.w = dot (v, m[3]);
m[i] - šādi dabū matricas m i-to kolonnu (i=0,1,2,3). Tās kolonnas var padot matricas uzkonstruēšanai mat4 argumentos - tas ir tā kā es daru pirmajā koda piemērā.
Nu un vai es kautko nepareizi daru/saprotu/izprotu?? Kur ir atšķirība?! m?

Nesaprotu kādi developeri tur ATI strādā.. Un apbrīnoju game-developerus pie lielām spēlēm. Kādi viņiem tur ir čakari ar šeideru rakstīšanu ATI videokartēm. Uh..

Draiveri jaunākie - Catalyst v7.2

Ienīstu ati.
Nepērciet ati videokartes. Tad nebūs čakara ar šeideru rakstīšanu.

kiwi
03-20-07, 23:57
A tu uz dekstop kartem megjinaji, tas pats?

bubu
03-21-07, 00:04
Pēc maniem uzskatiem tā nav kartes fīča. Tā ir draiveru fīča. Šeiderus kompilē viena draivera daļa, kura ir neatkarīga no kartes. Tb pats šeidera kompilētājs no augsta līmeņa valodas (glsl) uz zema līmeņa asmu ir visām kartēm vienāds. Nebūtu prātīgi katrai kartei individuālu augsta līmeņa valodas kompilatoru rakstīt.

Bet pamēģināšu arī uz desktopa kartes.

Taču specifikācija ir un paliek specifikācija. Tas ir muļķīgi, ja ATI saka, ka 1+1=3

brx
03-21-07, 00:17
Pēc maniem uzskatiem tā nav kartes fīča. Tā ir draiveru fīča. Šeiderus kompilē viena draivera daļa, kura ir neatkarīga no kartes. Tb pats šeidera kompilētājs no augsta līmeņa valodas (glsl) uz zema līmeņa asmu ir visām kartēm vienāds. Nebūtu prātīgi katrai kartei individuālu augsta līmeņa valodas kompilatoru rakstīt.

Bet pamēģināšu arī uz desktopa kartes.

Taču specifikācija ir un paliek specifikācija. Tas ir muļķīgi, ja ATI saka, ka 1+1=3
bet dazreiz gadas arii ka iznak 3 :D

kiwi
03-21-07, 00:47
Vel var pamegjinat Omegas draiverus. Lai gan prieksh Mobility radeon nezinu vai tie iet. Parasti ar omega draiveriem vismazak problemu

bubu
03-21-07, 01:32
Vai tad tie Omegas draiveri nav prosta apcirpti un pietvīkoti oriģinālie draiveri? Nedomāju, ka viņi (kas piedāvā omegas draiverus) raksta draiverus pa savam.

josi
03-21-07, 13:19
Beigās atradu vainu GLSL vertex šeiderī. Šo te:
gl_TexCoord[2] = ecPosition * mat4( gl_EyePlaneS[2],
gl_EyePlaneT[2],
gl_EyePlaneR[2],
gl_EyePlaneQ[2] );

Nebūdams pazīstams ar šeideru valodu, tomēr minēšu - vai mat4() konstruktors nostrādā pareizi?
Vismaz no C++ veidokļa g = v * m nav gluži tas pats, kā g = v * new m.

bubu
03-21-07, 21:27
Jā nostrādā pareizi. GLSL valodā nav pointeru. Sintaktiskas kļūdas es čekoju kārtīgi (tb tiek izmests kļūdas paziņojums pie kompilēšanas un programma nobeidzās).

Tu arī neizlasīji uzmanīgi manis rakstīto - es rakstīju, ka uz Nvidia's viss strāda kā vajag.

josi
03-21-07, 21:39
Varbūt nVidia draiveri vienkārši ir muļķu drošāki? :D Pēc analoģijas - līks kods arī zem IE var strādāt kā vajag, kamer zem Firefox nē.

kiwi
03-21-07, 22:02
Vai tad tie Omegas draiveri nav prosta apcirpti un pietvīkoti oriģinālie draiveri? Nedomāju, ka viņi (kas piedāvā omegas draiverus) raksta draiverus pa savam.

Jaa tiesa, bet ja njem veraa, ka parasti mazaak problemu (ja tadas ir) ar tiem, tad ei nu sazin :)

bubu
03-21-07, 22:58
josi, tu arī neizlasīji, ko es teicu. Specifikācijā ir teikts - A ir ekvivalents ar B. Es rakstu A un tikai uz ATI neiet. Es rakstu B, un tas iet. Kur ir tava analoģija?

josi
03-22-07, 10:08
Es visu izlasīju, tā kā nekasies :p
GLSL specifikācijā ir skaidri un gaiši rakstīts, ka "All variables and functions must be declared before being used." Taču spriežot pēc tava koda, tu gribi reizināt vektoru ar iepriekš nedeklarētu mat4. Ja kodu pārraksta, tipa

mat4 m;

m = ....;
g = v * m;

tad arī tas nestrādā kā vajag?

bubu
03-22-07, 10:36
Tas teikums attiecās uz šādu te kodu:
float x = 4* y;
float y = 5;
Tb pirmajā rindā y nav deklarēts, bet ir tikai otrajā. Ir jāapmaina rindas otrādi. Nedrīkst izmantot mainīgos, kurus tu deklarē kodā zemāk. "..variables.. must be declared before being used." Manā kodā jau nav mainīgā, kuru es lietoju. Tādus "anonīmos" mainīgos, kā man tur mat4 uzkonstruē, drīkst izmantot. Piemēram, tajā pašā šeiderī man ir šāds te kods (un vairāki citi diezgan līdzīgi):
float s1 = shadow2D(texShadow, corner + vec3(-0.5, -0.5, 0.0) * invMapsize).x;
strādā tā ka prieks gan uz ati, gan nvidia.

Tavs variants arī nestrādā.

bornbad
03-22-07, 23:14
hmm....puikas runā ķīniešu valodā vai arī mana end usera sapratne ir tālu no tā par ko jūs tur runājat! :confused: :rolleyes:

bubu
03-22-07, 23:18
Galvenais ir saprast šo:
Ja jūs zinātu kā man riebjas ATI...
un šo:
Ienīstu ati.
un šo:
Nepērciet ati videokartes. Tad nebūs čakara ar šeideru rakstīšanu.
kā arī šo:
Specifikācijā ir teikts - A ir ekvivalents ar B. Es rakstu A un tikai uz ATI neiet. Es rakstu B, un tas iet.