- backport from stable "xserver-1.20-branch" up to commit ad7364d8d (for mutter fullscreen unredirect on Wayland) - Update videodrv minor ABI as 1.20.7 changed the minor ABI version (backward compatible, API addition in glamor) - Rebase Xwayland randr resolution change emulation support patches
67 lines
2.5 KiB
Diff
67 lines
2.5 KiB
Diff
From a7b165d994d74131778a5a9bcffec957f1d1cacb Mon Sep 17 00:00:00 2001
|
|
From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
|
|
Date: Mon, 10 Feb 2020 10:20:04 +0100
|
|
Subject: [PATCH xserver 09/22] glamor: Error out on out-of-memory when
|
|
allocating PBO for FBO access
|
|
|
|
Packed buffer allocation (which happens at glBufferData time with the
|
|
buffer bound) can fail when there is no GL memory left.
|
|
|
|
Pick up the error when it happens, print a proper error message, do
|
|
some cleanup and bail.
|
|
|
|
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
|
|
(cherry picked from commit bc2e12239f86e5a4acd220744f42eb83ba55d328)
|
|
---
|
|
glamor/glamor_prepare.c | 17 +++++++++++++++++
|
|
glamor/glamor_priv.h | 1 +
|
|
2 files changed, 18 insertions(+)
|
|
|
|
diff --git a/glamor/glamor_prepare.c b/glamor/glamor_prepare.c
|
|
index 5a73e6c7d..6b35936fc 100644
|
|
--- a/glamor/glamor_prepare.c
|
|
+++ b/glamor/glamor_prepare.c
|
|
@@ -88,10 +88,27 @@ glamor_prep_pixmap_box(PixmapPtr pixmap, glamor_access_t access, BoxPtr box)
|
|
|
|
gl_usage = GL_STREAM_READ;
|
|
|
|
+ glamor_priv->suppress_gl_out_of_memory_logging = true;
|
|
+
|
|
glBindBuffer(GL_PIXEL_PACK_BUFFER, priv->pbo);
|
|
glBufferData(GL_PIXEL_PACK_BUFFER,
|
|
pixmap->devKind * pixmap->drawable.height, NULL,
|
|
gl_usage);
|
|
+
|
|
+ glamor_priv->suppress_gl_out_of_memory_logging = false;
|
|
+
|
|
+ if (glGetError() == GL_OUT_OF_MEMORY) {
|
|
+ if (!glamor_priv->logged_any_pbo_allocation_failure) {
|
|
+ LogMessageVerb(X_WARNING, 0, "glamor: Failed to allocate %d "
|
|
+ "bytes PBO due to GL_OUT_OF_MEMORY.\n",
|
|
+ pixmap->devKind * pixmap->drawable.height);
|
|
+ glamor_priv->logged_any_pbo_allocation_failure = true;
|
|
+ }
|
|
+ glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
|
|
+ glDeleteBuffers(1, &priv->pbo);
|
|
+ priv->pbo = 0;
|
|
+ return FALSE;
|
|
+ }
|
|
} else {
|
|
pixmap->devPrivate.ptr = xallocarray(pixmap->devKind,
|
|
pixmap->drawable.height);
|
|
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
|
|
index 661c11d90..1686ef5a4 100644
|
|
--- a/glamor/glamor_priv.h
|
|
+++ b/glamor/glamor_priv.h
|
|
@@ -289,6 +289,7 @@ typedef struct glamor_screen_private {
|
|
|
|
Bool suppress_gl_out_of_memory_logging;
|
|
Bool logged_any_fbo_allocation_failure;
|
|
+ Bool logged_any_pbo_allocation_failure;
|
|
|
|
/* xv */
|
|
glamor_program xv_prog;
|
|
--
|
|
2.24.1
|
|
|