[Mesa-dev] Proper implemtation of glFinish

Bob Gleitsmann rjgleits at bellsouth.net
Sat Jan 1 13:35:18 PST 2011


Hello everyone,

When trying the demo program copytex for the first time recently, I noticed 
pathological behavior: after running for a long time it asserted out and 
locked up X. Investigation showed this to be due to the glFinish function 
acting like glFlush and not waiting as it is supposed to for completion of 
whatever commands had been issued. I took up the task of remedying this. There 
are, as usual, a variety of different ways of doing so. Influenced by the 
current gallium code, I planned a separate call to the kernel to wait for the 
fence created by the pushbuf flush ioctl to complete. After completing the 
implementation in this way, it occurred to me that it would be more economical 
to modify the pushbuf flush ioctl call with a flag to indicate whether it should 
wait for completion or not. This would require modifying the FIRE_RING inline 
which appears in numerous places. Perhaps my original plan is adequate. 
The code changes required for the original plan involve mesa, drm, and the 
kernel. This forum seems like the best starting point to solicit feedback, 
since the whole thing is motivated by mesa. The Xorg nouveau driver does not 
seem to need anything of this nature. I have tested on my current hardware, 
x86-64 dual opteron and 7300 GT card. 

The assert out noted in the beginning was due to timeout in the 
__nouveau_fence_wait function in the kernel. Unfortunately, it does not exit 
gracefully. The patches that I came up with eliminate the timeout in the case 
of copytex, but this is clearly a flaw that someday should have a more complete 
fix. 
Please let me know if I should send the kernel and drm patches to another 
forum (like dri-devel). For now I will post them here. 

Best Wishes,

Bob


More information about the mesa-dev mailing list