A patch series that deals with dri3 correctness- and performance fixes. The corectness fixes attempts to deal with the fact that we need to wait for all pending swapbuffers before we touch the front buffer. Otherwise a front buffer change may be overwritten by a pending swapbuffer when it was actually intended to be drawn *after* the swapbuffer. Also a post swapbuffer front read could actually occur *before* the swapbuffer.
Patch 1 deals with the dri3 internal synchronization. All frontbuffer accesses introduce a "swapbuffer barrier" to order with respect to pending swapbuffers. The exception is _WaitX because if we call _WaitX we're ordering with respect to X rendering and if there are pending swapbuffers, an application would already have called _WaitGL to be able to do the X rendering correctly, and _WaitGL is ordering with respect to pending swapbuffers. This patch fixes the piglit copysubbuffer test. Patch 2 to 4 deals with having glFinish() order with respect to pending swapbuffers. The behaviour is actually not correct in that it doesn't wait for the pending swapbuffers to complete, but a user shouldn't be able to tell the difference. This patch series is motivated by the fact that the glXWaitGL man page states that glFinish() can be used instead of glXWaitGL, and without this series it can't. The functionality is only implemented for gallium. Other drivers need to provide their own implementation. Ideally we should have accomplished this without the dri interface changes by calling an unconditional flush_frontbuffer, but at least the gallium flush_frontbuffer implementation is relying on us having a fake front which is not always the case. Patch 5 replaces the back-to-fake-front full buffer copies with a swap during swapbuffers. Should be saving a lot of work when we actually have a fake front. There were some conserns raised when this was posted as an RFC that the separate-server-gpu case would be broken as well as the buffer age functionality. I've audited the code and I think that's not the case. The piglit buffer age test still reports a pass after this change. The separate-server-gpu case I guess needs additional testing. Tested wih piglit -quick without regressions. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev