Created attachment 31007 [details]
Under certain circumstances, objects aren't rendered into the bound framebuffer. Everything works fine with the software rasterizer.
gcc -g -std=c99 main.c -o testcase -lGL -lGLEW -lSDL
LIBGL_ALWAYS_SOFTWARE=1 ./testcase # expected behavior
./testcase # actual behavior
Well the behavior changed while i switched from an external texture to a smaller testcase-conform inline-texture. With the external texture asd3.bmp after rendering in hardware was all black, with the new smaller texture asd3.bmp has the same colors as the input texture. (which is still wrong behavior, the correct result as rendered in software would be the original texture with some added blue).
Works fine for me on Mesa 7.5, 7.6, and master on GM45. I'm going to need more details. What hardware? What version of Mesa? Also, could you make this into a piglit test (http://people.freedesktop.org/~nh/piglit/) so that it can report pass/fail and I can tell when behavior deviates from expected?
Created attachment 31258 [details]
testcase with pass/deviation output to stdout
The testcase outputs a deviation in the third and fourth extracted texture if run in hardware(thinkpad t500's gma 4500) and mesa git (since 3 weeks or so ago).
Still couldn't reproduce it even with your testcase before my change:
libGL: OpenDriver: trying /home/anholt/src/mesa-7.7/lib/i965_dri.so
first bitmap passed
second bitmap passed
third bitmap passed
fourth bitmap passed
But my guess is that it's fixed by this commit in mesa 7.7 branch:
Author: Eric Anholt <email@example.com>
Date: Wed Dec 9 11:36:45 2009 -0800
intel: Flush the render/texture cache when finishing render to texture.
Back when we were flushing the entire batch at BindFramebuffer, the kernel
would notice the domain transition when someone went to texture from it and
flush for us. We no longer do the batch flushing every time, so we get to
do aggressive flushing until we move batchbuffer handling to libdrm.
Fixes piglit fbo-flushing. Bug #25377. No noticeable performance loss
on cairo-gl (so this is better than batch flushing).
Please reopen if the problem continues with that fix.