https://bugs.freedesktop.org/show_bug.cgi?id=28341
--- Comment #20 from Mario Kleiner mario.kleiner@tuebingen.mpg.de 2010-07-25 08:26:41 PDT --- Created an attachment (id=37368) View: https://bugs.freedesktop.org/attachment.cgi?id=37368 Review: https://bugs.freedesktop.org/review?bug=28341&attachment=37368
Proof of concept "fix" for R600/R700. Act on dri2InvalidateDrawable().
This patch together with the previous patch applied to current mesa git master eliminates the flicker problem on my tested apps with a R600 card.
A new function radeon_prepare_render() checks the timestamps that get updated by dri2InvalidateDrawable() to find out if a swap is in progress / buffers are invalidated. If so, it uses radeon_update_buffers() to get "new" buffers. That function will also throttle the client if a swap is still in progress. We'd need to add a call to radeon_prepare_render() to various places in the driver. This is what the intel driver does with intel_prepare_render() to avoid artifacts.
I've only added a check to r700DrawPrims() to see if it works at all. I don't know at which other locations such calls would be needed (and i'm a bloody beginner), so this is a pretty sketchy start.
-mario