[PATCH xserver 1/5] glamor-xv: Check that FBO is usable
Olivier Fourdan
ofourdan at redhat.com
Thu Apr 20 15:35:40 UTC 2017
On some hardware/driver such as nouveau with nv30, using GL_ALPHA for
8-bit depth pixmaps will raise an incomplete attachment error when
binding the FBO, which will cause a segfault later on when trying to
access the FBO from the glamor pixmap in glamor_xv_put_image().
Check early in glamor_xv_core_init() that FBO binding works and return
TRUE if so, or FALSE otherwise so that callers can tell early if
glamor-xv is usable.
Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100710
---
glamor/glamor_priv.h | 2 +-
glamor/glamor_xv.c | 23 ++++++++++++++++++++++-
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index 7b92f35..66a870f 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -907,7 +907,7 @@ int glamor_xv_put_image(glamor_port_private *port_priv,
short height,
Bool sync,
RegionPtr clipBoxes);
-void glamor_xv_core_init(ScreenPtr screen);
+Bool glamor_xv_core_init(ScreenPtr screen);
void glamor_xv_render(glamor_port_private *port_priv);
#include "glamor_utils.h"
diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index 3bcf909..20495c3 100644
--- a/glamor/glamor_xv.c
+++ b/glamor/glamor_xv.c
@@ -522,13 +522,34 @@ glamor_xv_init_port(glamor_port_private *port_priv)
REGION_NULL(pScreen, &port_priv->clip);
}
-void
+Bool
glamor_xv_core_init(ScreenPtr screen)
{
+ PixmapPtr pixmap;
+ glamor_pixmap_private *pixmap_priv;
+ Bool ret = TRUE;
+
+ /* Create a pixmap with depth 8 to see if this is supported by the
+ * driver/hardware or if that causes an incomplete attachment when
+ * creating the fbo...
+ */
+ pixmap = glamor_create_pixmap(screen, 1, 1, 8, 0);
+ pixmap_priv = glamor_get_pixmap_private(pixmap);
+
+ if (pixmap_priv == NULL || pixmap_priv->fbo == NULL) {
+ /* Something is wrong with pixmaps */
+ ret = FALSE;
+ goto done;
+ }
+
glamorBrightness = MAKE_ATOM("XV_BRIGHTNESS");
glamorContrast = MAKE_ATOM("XV_CONTRAST");
glamorSaturation = MAKE_ATOM("XV_SATURATION");
glamorHue = MAKE_ATOM("XV_HUE");
glamorGamma = MAKE_ATOM("XV_GAMMA");
glamorColorspace = MAKE_ATOM("XV_COLORSPACE");
+
+done:
+ glamor_destroy_pixmap(pixmap);
+ return ret;
}
--
2.9.3
More information about the xorg-devel
mailing list