Skip to content
  • Erik Kurzinger's avatar
    platforms/drm: check wl_eglstream buffers before attaching · 9056eccd
    Erik Kurzinger authored and Xaver Hugl's avatar Xaver Hugl committed
    If a wl_eglstream buffer is attached to a surface, but then later a different
    type of buffer, such as a dmabuf, is attached to the same surface, kwin will
    mistakenly keep trying to acquire frames from the EGLStream associated with the
    previous buffer. This can happen if an Xwayland window is made full-screen
    causing it to switch to the flipping presentation path, for instance. The
    result is that the window contents will no longer be updated.
    
    Instead, the eglstream backend's loadTexture and updateTexture functions should
    first pass the buffer to eglCreateStreamAttribNV. If it fails with
    EGL_BAD_STREAM_KHR, that indicates it is indeed a wl_eglstream, and that we've
    already associated a server-side EGLStream with it in attachStreamConsumer, so
    we can proceed as usual. If it fails with EGL_BAD_ACCESS, though, that
    indicates it is not a wl_eglstream and we should fall back to the parent class
    which handles attaching other buffer types. If it doesn't fail at all, that
    means the client tried to attach a new wl_eglstream to a surface without first
    attaching the stream consumer. There's not really a great way to handle this,
    so just re-use the previous EGLStream.
    
    BUG: 440852
    
    (cherry picked from commit 770875a7)
    9056eccd