Since upgrading to Ubuntu 10.04 (hardware details below), I can trigger
this behavior in an OpenGL app I'm developing, and I've narrowed it down
to very specific bits of fragment shader code.

In the fragment shader code below, if the GLSL uniform variable
'rgb_separation' is 0.0, this code runs normally (fast), if it's >0.0,
it outputs the "Error setting memory domains" error, runs at about 1
fps, and will eventually crash if left above 0.0 for a few seconds.

void main(void)
{
  vec4 color = gl_Color;
  vec2 tcoords = gl_TexCoord[0].st;
...
  if(rgb_separation > 0.0) {
    vec2 offset = vec2(rgb_separation, 0.0);

    vec4 left_pixel = texture2D(tex, tcoords - offset);
    vec4 center_pixel = texture2D(tex, tcoords);
    vec4 right_pixel = texture2D(tex, tcoords + offset);

    color *= vec4(left_pixel.r, center_pixel.g, right_pixel.b, (left_pixel.a + 
center_pixel.a + right_pixel.a) / 3.0);
  }
  else {
    vec4 texture_color = texture2D(tex, tcoords);
    color *= texture_color;
  }
...
  gl_FragColor = color;
}

(Other parts of the shader use texture2D(tex, ...) to successfully read
from the set texture.)

(This happens both when 'tex' is a normal GL texture loaded from disk,
and when it is an image attached to a FrameBufferObject.)

So I've experimented a bit with this, and found that if I comment out
the "color *= vec4(...)" line then it does NOT exhibit the problem.

I've also tried splitting that line into individual expressions, to see
if that changed anything.  The code is below.  Oddly, if I uncomment any
line below besides the first, it then exhibits the problem.  With just
the red channel it runs fast (although it doesn't look correct).

                                        color.r = color.r * left_pixel.r;
                                        //color.g = color.g * left_pixel.g;
                                        //color.b = color.b * left_pixel.b;
                                        //color.a = color.a * ((left_pixel.a + 
center_pixel.a + right_pixel.a) / 3.0);

I'm not sure what to make of that-- but maybe it rings a bell for
someone.

Hardware details:

Laptop is a T61.

$ lspci | grep Display
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated 
Graphics Controller (rev 0c)

$ glxinfo | grep OpenGL
OpenGL vendor string: Tungsten Graphics, Inc
OpenGL renderer string: Mesa DRI Intel(R) 965GM GEM 20091221 2009Q4 x86/MMX/SSE2
OpenGL version string: 2.1 Mesa 7.7.1
OpenGL shading language version string: 1.20

-- 
[i965gm] X often crashes when starting xmoto levels (i915 GPU hung)
https://bugs.launchpad.net/bugs/580449
You received this bug notification because you are a member of Ubuntu-X,
which is subscribed to xserver-xorg-video-intel in ubuntu.

_______________________________________________
Mailing list: https://launchpad.net/~ubuntu-x-swat
Post to     : ubuntu-x-swat@lists.launchpad.net
Unsubscribe : https://launchpad.net/~ubuntu-x-swat
More help   : https://help.launchpad.net/ListHelp

Reply via email to