Hi All,

I've run into an interesting problem after upgrading from NVidia driver 280.26 to 301.42 on a GTX 460. I've got a glsl shader performing a texture lookup in a nested loop, somewhat along these lines:

Code :
uniform int maxCurGMM;
uniform int maxCurMean;
 
float result = -1.0;
float minDistanceSq = 1000.0;
 
for (int i = 0; i < maxCurGMM; i++) 
{
    for (int j = 0; j < maxCurMean; j++) 
    {
        vec3 val = texture2D(sGMMTex, vec2((j+0.5)/maxCurMean, (i+0.5)/maxCurGMM)).xyz;
        float colDist = <some function of val>
 
        if (colDist < minDistanceSq) 
        {
                minDistanceSq = colDist;
                result = i;
        }
    }
}
 
if (result == 0.0) 
{
    gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
} 
else 
{
    gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
}

Note that I set maxCurGMM to 2 and maxCurMean to 12 via glUniform1i before invoking the shader.

With the old driver the output looks fine, but the new driver always returns [1.0, 0.0, 1.0, 1.0] indicating that something in the loop is going wrong. Interestingly enough: If I replace maxCurGMM by the constant value 2 in the for statement, the output looks fine again. Same goes for maxCurMean and the value 12. sGMMTex is a TEXTURE_2D with an internal format of GL_RGB32F_ARB. Min and Mag filters are set to nearest and wrap mode is set to clamp. The texture has no mipmaps. Replacing texture2D by texture2DLod with a mipmap level of 0 didn't help. I am also not getting any opengl errors/warnings.

I am kind of stuck here, any help would be greatly appreciated.

Regards,
Theodor