GLSL: What is better? const or inline?

Started by
4 comments, last by Slavik81 12 years ago
I tend to write GLSL code like this:

>>>
const vec2 somethingConstant = vec2( 2.0 );
...
bla = blu * somethingConstant;
<<<

Hence I move constants out to a common place using the const keyword and using them even if they are used only one. Now with ATI and texelFetchOffset I ran into a crash when I used such a const constant as offset. Using it directly it worked without crashing (hence texelFetchOffset( sampler, tc, lod, ivec2(0,1) ) for example). There I had to turn the constant inline to prevent the crash. Hence the above example would look like this in the inline version:

>>>
bla = blu * vec2( 2.0 );
<<<

Which version is better? Is it better to do all "const" or all "inline"? Does one version require more ALU instructions or are they more or less equal? Is one more "resistent" towards broken compilers like in the above mentioned ATI case?

Life's like a Hydra... cut off one problem just to have two more popping out.
Leader and Coder: Project Epsylon | Drag[en]gine Game Engine

Advertisement
That's not called an inline. It is called a immediate value. The compiler may or may not make it as part of the instruction. If it can't, then it would put the value in a register and reference it.

As for the crash, a driver should never crash.
You can post your problem at the OpenGL Driver forum
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=postlist&Board=13&page=1
Sig: http://glhlib.sourceforge.net
an open source GLU replacement library. Much more modern than GLU.
float matrix[16], inverse_matrix[16];
glhLoadIdentityf2(matrix);
glhTranslatef2(matrix, 0.0, 0.0, 5.0);
glhRotateAboutXf2(matrix, angleInRadians);
glhScalef2(matrix, 1.0, 1.0, -1.0);
glhQuickInvertMatrixf2(matrix, inverse_matrix);
glUniformMatrix4fv(uniformLocation1, 1, FALSE, matrix);
glUniformMatrix4fv(uniformLocation2, 1, FALSE, inverse_matrix);

That's not called an inline. It is called a immediate value. The compiler may or may not make it as part of the instruction. If it can't, then it would put the value in a register and reference it.

So both versions should be the same or does one always use a register and the other not?

As for the crash, a driver should never crash.
You can post your problem at the OpenGL Driver forum
http://www.opengl.or...Board=13&page=1
[/quote]
It's a known bug over there but ATI doesn't give a damn about it nor doesn't want to fix it so hack-time it is.

Life's like a Hydra... cut off one problem just to have two more popping out.
Leader and Coder: Project Epsylon | Drag[en]gine Game Engine

(...) it nor doesn't want to fix it (...)

nor does it want to fit it...

why the hell is there no edit button anymore? How I hate "verschlimmbesserungen" U_U

Life's like a Hydra... cut off one problem just to have two more popping out.
Leader and Coder: Project Epsylon | Drag[en]gine Game Engine


why the hell is there no edit button anymore?

Wut?

edit: i do see the edit button :/. Did i miss some funky forum functionality that disables it at some point?
After posting, the edit button doesn't appear until you refresh the page.

This topic is closed to new replies.

Advertisement