Skip to content
  • Ville Syrjälä's avatar
    gallium/dri: Handle xserver that doesn't send needless DRI2 invalidate events · 0fcc5189
    Ville Syrjälä authored
    
    
    Ever since xserver commit 531869448d07e00ae241120b59f3aaaa5709d59c,
    the server no longer sends invalidate events to clients, unless they
    have performed a GetBuffers request since the drawable was last
    invalidated.
    
    If the drawable gets invalidated immediately after the GetBuffers
    request was processed by the X server, it's possible that Xlib
    will process the invalidate event while waiting for the GetBuffers
    reply. So the server, thinking the client knows that the buffers
    are invalid, is waiting for another GetBuffers request before
    sending any more invalidate events. The client, on the other hand,
    believes the buffers to be valid, and thus is expecting to receive
    another invalidate event before it has to send another GetBuffers
    request. The end result is that the client never again sends
    a GetBuffers request.
    
    To avoid this problem, take a snapshot of the lastStamp before
    doing GetBuffers, and retry if the snapshot and the current
    lastStamp no longer match after the GetBuffers reply has been
    processed.
    
    Signed-off-by: default avatarVille Syrjälä <syrjala@sci.fi>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    0fcc5189