xwayland/eglstream: Check framebuffer status
The EGLStream backend would sometime generate GL errors trying to draw to the framebuffer, which gives an invalid buffer, which in turn would generate a Wayland error from the compositor which is fatal to the client. Check the framebuffer status and bail out early if it's not complete, to avoid getting into trouble later. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> https://gitlab.freedesktop.org/xorg/xserver/-/issues/1156
This commit is contained in:
parent
252cbad316
commit
85244d2a20
|
@ -619,6 +619,7 @@ xwl_glamor_eglstream_post_damage(struct xwl_window *xwl_window,
|
|||
box->x2 - box->x1, box->y2 - box->y1
|
||||
};
|
||||
GLint saved_vao;
|
||||
int status;
|
||||
|
||||
if (xwl_pixmap->type != XWL_PIXMAP_EGLSTREAM)
|
||||
/* This can happen if a client does X11 rendering on a
|
||||
|
@ -652,6 +653,13 @@ xwl_glamor_eglstream_post_damage(struct xwl_window *xwl_window,
|
|||
glUniform1i(xwl_eglstream->blit_is_rgba_pos,
|
||||
pixmap->drawable.depth >= 32);
|
||||
|
||||
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||
ErrorF("eglstream: Framebuffer incomplete 0x%X, not posting damage\n", status);
|
||||
status = FALSE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Blit rendered image into EGLStream surface */
|
||||
glDrawBuffer(GL_BACK);
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
|
@ -662,14 +670,16 @@ xwl_glamor_eglstream_post_damage(struct xwl_window *xwl_window,
|
|||
else
|
||||
eglSwapBuffers(xwl_screen->egl_display, xwl_pixmap->surface);
|
||||
|
||||
/* hang onto the pixmap until the compositor has released it */
|
||||
pixmap->refcnt++;
|
||||
status = TRUE;
|
||||
|
||||
out:
|
||||
/* Restore previous state */
|
||||
glBindVertexArray(saved_vao);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
/* hang onto the pixmap until the compositor has released it */
|
||||
pixmap->refcnt++;
|
||||
|
||||
return TRUE;
|
||||
return status;
|
||||
}
|
||||
|
||||
static Bool
|
||||
|
|
Loading…
Reference in New Issue