[ defufna @ 23.03.2006. 21:51 ] @
imam uzasnih problema sa GLSL-om na nVidiji FX6500 kartici, konkretno imam problema sa pristupanjem nizovima evo sledi i moj test primer koji me pati

Code:

attribute vec4 v;

void main(void)
{
   vec2 test[3];
   vec4 result;
   
   test[0] = vec2(sin(v));
   test[1] = vec2(2.0);   
   test[2] = vec2(2.0);   
   
   result = vec4(test[v.x],0.0,0.0);
   
   gl_Position = gl_ModelViewProjectionMatrix * result;
}


i dobjiam ovu gresku "fatal error C9999: *** exception during compilation ***"
probao sam svasta i uglavnom ako ne indexiram niz dinamicki radi ok, ili recimo ako umesto

Code:

 test[0] = vec2(sin(v));

stavim
Code:

 test[0] = vec2(v);

onda radi, takodje takve primere sa pristupanjem nizova nekada sam pisao sa GL_ARB_vertex_program i radio je besprekorno, takodje sam probao iste primere da napisem u DirectX-u i radili su, evo okacio sam i svoj primer u RenderMonkey-ju ( sadrzi i DirectX i OpenGL sample ) pa bih molio jos nekoga da proba

da molio bih i one koji ne znaju sta je u pitanju da mi cisto jave kako je proslo kompajliranje koda u rendermonkey-ju ja sam ovo generalno testirao na mojoj gore pomenutoj FX6500 i na drugovoj FX5200 u oba slucaja ista greska, zanima me kako prolazi na atiju i na jos kojoj nvidiji ako neko zna sta se desava.. bicu mu vecito zahvalan

[Ovu poruku je menjao defufna dana 23.03.2006. u 22:55 GMT+1]
[ Angel_of_Dark @ 24.03.2006. 02:59 ] @
Meni ovo izgleda, po onome sto znam, kao da se radi u bug-u... cini se da je GLSL jos uvek prepun bagova koji ga cine neupotrebljivim.
[ defufna @ 24.03.2006. 14:48 ] @
I meni tako izgleda, aj ako neko moze da proba da li ovo radi na ATi-ju pa cu na nvidi-ji da probam da se iskobeljam sa CG-om a na atiju ako radi sa GLSL-om ako ne radi..... onda sam stvarno zaglibio

Evo upravo sam probao isti kod u linuxu i pravi iste probleme ovde cak i pukne sa segmentation fault-om, prosto ne mogu da verujem da je nvidija ovolko neodgovorna

[Ovu poruku je menjao defufna dana 24.03.2006. u 17:55 GMT+1]
[ yooyo @ 24.03.2006. 20:21 ] @
Koji driver koristis.. ovaj code kod mene prolazi, ali je besmislen:

Code:

attribute vec4 v;

void main(void)
{
   vec2 test[3];
   vec4 result;
   
   test[0] = vec2(sin(v));
   test[1] = vec2(2.0);   
   test[2] = vec2(2.0);   
   
   result = vec4(test[int(v.x)],0.0,0.0);
   
   gl_Position = gl_ModelViewProjectionMatrix * result;
}


Ja imam 6800 ultra + fw 81.98.

sin vraca rez od -1 do 1 kao realan broj i nemozes ocekivati da ce nesto da se desi ako indeksiras npr -0.5.

Jos da dodam, NV GLSL kompajler jos radi najbolje od svih ostalih (ATI & 3DLabs)

yooyo
[ defufna @ 25.03.2006. 01:30 ] @
slazem se da je skroz besmislan takodje koristim 81.98 a probao sam i sa drugim( cak sam i betu probao ) i kao sto rekoh pada i na 5200 i na 6500 inace pada i ako recimo zamenim test[0] = vec2(sin(v)); sa test[0] = vec2(v+vec4(1.0)); ili pak sa test[0] = vec2(abs(sin(v))); plus sto ne indeksiram -0.5 ni u onom primeru indexiram sa v.x koji komotno moze biti 1.0 a u test[0] se nalazi sin(v) sto naravno treba da je ok, e da btw yooyo meni ga kompajlira skroz ok puca na linkovanju na windowsu javlja onaj gore pomenuti C9999 a na linuxu pukne ceo program kad udje glLinkProgramARB

[Ovu poruku je menjao defufna dana 25.03.2006. u 02:38 GMT+1]

[Ovu poruku je menjao defufna dana 25.03.2006. u 20:38 GMT+1]
[ defufna @ 26.03.2006. 15:48 ] @
Testirao sam ovo kod druga na 6800LE sa 71.94 driverima.. i radi ok.. ima li neko ideju zasto ovo ne radi?
[ yooyo @ 27.03.2006. 10:41 ] @
6500 je iz NV4x serije i podrzava SM3.0. I ja sam zbunjen zasto ti to ne radi...
Provalio sam da postoji izvesna razlika izmedju drivera (serije 70/75) i novih drivera (serija 80). Kod starih drivera, kompajler je radio pravo kompajliranje tek u link fazi, a sada kompajlira kada mu prosledis program string. Posto je GLSL prilicno slican po sintaksi sa CG-om ili HLSL-om, NVidia je napravila UCA (unified compiler architecture), tako da koriste isti compiler za kompajliranje GLSL-a, CG-a ili HLSL-a. Moguce je da su nesto promenili pa su zabrljali.

Predlazem ti da uninstaliras taj driver i instaliras neki sveziji pa pokusaj ponovo.


yooyo
[ defufna @ 27.03.2006. 13:54 ] @
e hvala na pomoci yooyo ali mislim da mi nema pomoci :) ja na ovom mom GF6500 koristim 81.98 drivere i sa njima ne radi bilo koje drivere starije od 77 nece ni da instalira a na 6800LE radi sa 71.94 i da stvar bude jos cudnija na mojoj kartici radi iz HLSL-a probao sam ovde i 84 beta drivere.. ista prica.. tako da mi preostaju dve mogucnosti da probam sa cg-om.. ili da napisem shader koji ne koristi dinamicko indexiranje nizova.. no o tom cu jos videti.. hvala na pomoci

[Ovu poruku je menjao defufna dana 27.03.2006. u 14:58 GMT+1]
[ yooyo @ 27.03.2006. 15:27 ] @
Ajde okaci kompletan vertex i fragment shader. Cim puca u link fazi onda nesto nije u redu izmedju vertex i fragment shadera.
Imam pristup nvdev strani, pa mogu da tamo okacim problem. Mozda neko iz nvidie odgovori.

yooyo
[ defufna @ 27.03.2006. 20:48 ] @
pa bio sam dao gore render monkey primer, no evo dacu ga jos jednom ( jos malko sam ga uprostio ) a i pasteovacu ovde kod

dakle vertex shader

Code:

attribute vec4 v;

void main(void)
{
   vec2 test[3];
   vec4 result;
   
   test[0] = vec2(sin(v));   
   test[1] = vec2(2.0);   
   test[2] = vec2(2.0);   
   
   result = vec4(test[v],0.0,0.0);
   
   gl_Position = gl_ModelViewProjectionMatrix * result;
}


fragment shader

Code:

void main(void)
{
   gl_FragColor = vec4( 0.4, 0.0, 0.9, 1.0 );
}


probao sam i u monkey-ju i da rucno ucitam kod u svom programu ista greska ista prica
hvala na svoj pomoci yooyo
[ yooyo @ 27.03.2006. 21:10 ] @
Cekaj malo... sta treba da znaci sledeca linija:

Code:

result = vec4(test[v],0.0,0.0);


Sta ocekujes od test[v] ako je v tipa vec4? test[int(v.x)] bi imalo smisla i trebalo bi da vrati vrednost tipa vec2.
Cak i genericki GLSL kompajler se buni na tvoj code...

Code:

Compiling Vertex Shaders... 
Compiling... 
defufna.vert
ERROR: 0: 12:  '[]' :  integer expression required 
ERROR: 0
 
Compiling Fragment Shaders... 
Compiling... 
defufna.frag
No errors
 
Link...
ERROR: Not all shaders have valid object code.
[ defufna @ 27.03.2006. 22:42 ] @
au sorry kad sam ga pojednostavljavao napravio sam gresku, posto je i dalje javljao istu linkersku gresku nisam obratio paznju na kompajlerske greske, evo sta je meni javio za tu varijantu

OpenGL Preview Window: Compiling vertex shader API(OpenGL) /Effect Group 1/Test1/Pass 0/Vertex Program/ ... success
(12) : warning C7011: implicit cast from "float4" to "int"

OpenGL Preview Window: Compiling fragment shader API(OpenGL) /Effect Group 1/Test1/Pass 0/Fragment Program/ ... success
OpenGL Preview Window: Linking program .. failure
Vertex info
-----------
(12) : warning C7011: implicit cast from "float4" to "int"
(0) : fatal error C9999: *** exception during compilation ***


sorry jos jednom ali ne prolazi ni sa v.x

evo cak i varijanta bez warninga

Code:

attribute vec4 v;

void main(void)
{
   vec2 test[3];
   vec4 result;
   
   int i;
   
   i = int(v.x);
   
   test[0] = vec2(sin(v));   
   test[1] = vec2(2.0);   
   test[2] = vec2(2.0);   
   
   result = vec4(test[i],0.0,0.0);
   
   gl_Position = gl_ModelViewProjectionMatrix * result;
}


ovaj kod mi daje ovu gresku ( upravo kompajlirano i provereno )

OpenGL Preview Window: Compiling vertex shader API(OpenGL) /Effect Group 1/Test1/Pass 0/Vertex Program/ ... success
OpenGL Preview Window: Compiling fragment shader API(OpenGL) /Effect Group 1/Test1/Pass 0/Fragment Program/ ... success
OpenGL Preview Window: Linking program .. failure
Vertex info
-----------
(0) : fatal error C9999: *** exception during compilation ***
[ defufna @ 25.04.2006. 19:22 ] @
Evo upravo mi je drug kupio GForce 6600 pa sam probao i kod njega i dobio sam jako zanimljivu gresku

dakle shader code

Code:

attribute vec4 v;

void main(void)
{
   vec2 test[3];
   vec4 result;
   
   int i;
   
   i = int(v.x);
   
   test[0] = vec2(sin(v));   
   test[1] = vec2(2.0);   
   test[2] = vec2(2.0);   
   
   result = vec4(test[i],0.0,0.0);
   
   gl_Position = gl_ModelViewProjectionMatrix * result;
}


greska:

Code:

OpenGL Preview Window: Compiling vertex shader API(OpenGL) /Effect Group 1/Test1/Pass 0/Vertex Program/ ... success
OpenGL Preview Window: Compiling fragment shader API(OpenGL) /Effect Group 1/Test1/Pass 0/Fragment Program/ ... success
OpenGL Preview Window: Linking program .. failure
Vertex info
-----------
Internal error: assembly compile error for vertex shader at offset 652:
-- error message --
line 26, column 30:  error: address register-relative offset is too large
line 28, column 30:  error: address register-relative offset is too large
-- internal assembly text --
!!ARBvp1.0
OPTION NV_vertex_program3;
# cgc version 1.5.0000, build date Nov 11 2005 14:12:07
# command line args: 
#vendor NVIDIA Corporation
#version 1.0.02
#profile vp40
#program main
#semantic gl_ModelViewProjectionMatrix
#var float4 gl_Position : $vout.POSITION : HPOS : -1 : 1
#var float4x4 gl_ModelViewProjectionMatrix :  : c[0], 4 : -1 : 1
#var float4 v : $vin.ATTR0 : ATTR0 : -1 : 1
#const c[4] = 2 0
PARAM c[5] = { program.local[0..3],
      { 2, 0 } };
TEMP R0;
TEMP R1;
TEMP R2;
TEMP CC;
ADDRESS A0;
BB1:
MOV   R0, c[1];
ARL   A0.x, vertex.attrib[0];
SIN   R1.y, vertex.attrib[0].y;
SIN   R1.x, vertex.attrib[0].x;
MUL   R1, c[A0.x + 2044870676].y, R0;
MOV   R0, c[0];
MAD   R0, c[A0.x + 2044870676].x, R0, R1;
ADD   result.position, R0, c[4].y;
END
# 8 instructions, 3 R-regs


dakle yooyo bio si skroz u pravu on to kompajlira sa nekom varijantom CG-a, ali pogresno kompajlira, jel uopste ne znam odakle je on iscupao onih 2044870676 no ako neko sazna nesto o ovom bugu neka javi ako ne nema veze, meni to vise nije potrebno problem sam resio jednsotavnim ne koriscenjem indexiranja ali bilo bi lepo da se ovo razresi
[ yooyo @ 26.04.2006. 09:56 ] @
Evo, okacio sam pitanje na nvdev sajtu.. valjda ce neko iz nvidie da pogleda...

yooyo
[ defufna @ 26.04.2006. 11:08 ] @
hvala yooyo :)