[RFC PATCH xserver 0/5] Check glamor-xv usability

Olivier Fourdan ofourdan at redhat.com
Thu Apr 20 15:35:39 UTC 2017


It appears that on some hardware/diver combo such as nv30/nouveau, using
GL_ALPHA as format for 8-bit depth will cause an incomplete attachment 
error (GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT) when trying to bind the
texture.

As a result, the FBO is NULL and glamor segfaults when trying to access
the FBO width/height in pixmap_priv_get_scale().

This happens with glamor-xv which uses a 8bit pixmap, meaning that on such
hardware/driver, trying to play a video using Xv will lead to a crash of
the Xserver. This affects Xwayland, Xephyr and modesetting driver with
glamor accel:

  https://bugs.freedesktop.org/show_bug.cgi?id=100710
  https://bugzilla.redhat.com/1412814

So this series of RFC patches consist of 3 things:

 1. Check if using a 8bit pixmap causes a incomplete attachment error as
    soon as glamor_xv_core_init() and return a boolean value indicating
    the caller whether or not glamor-xv is usable.
 2. Modify each callers, namely ephyr, modesetting and xwayland to take
    advantage of this boolean value and do not enable xv if not usable.
    One difficulty here is that to check FBO usability, one has to have
    the screen resources created, which means that the changes also
    include moving glamor_xv_core_init() to CreateScreenResources()
    instead of screen init.
 3. Last patch is problably even more controversial, as I found that
    using GL_RGBA for those 8bit format actually works for this hardware,
    even though this is a clear waste of resources. Thins is, though,
    it makes glamor-xv perfectly usable, not only it doesn't crash but
    is's also reasonably fast even on this old hardware. Other thing to
    consider here is that modern hardware won't use than anyway and prefer
    GL_RED and texture swizzle, so for those, this patch makes no difference.
    Now, I am not sure who that flies with other "older" hardware, but
    given point 1. and 2. even if it doesn't work, it won't crash (at 
    least)...

Cheers,
Olivier


Olivier Fourdan (5):
  glamor-xv: Check that FBO is usable
  modesetting: Check that glamor-xv is usable
  Xephyr: Check that glamor-xv is usable
  Xwayland: Check that glamor-xv is usable
  glamor: Use GL_RGBA format for 8-bit depth

 glamor/glamor.c                         |  2 ++
 glamor/glamor_priv.h                    |  3 ++-
 glamor/glamor_utils.h                   | 11 ++++++-----
 glamor/glamor_xv.c                      | 23 ++++++++++++++++++++++-
 hw/kdrive/ephyr/ephyr.c                 | 16 ++++++++++++++--
 hw/kdrive/ephyr/ephyr.h                 |  5 +++--
 hw/kdrive/ephyr/ephyr_glamor_xv.c       |  7 ++++---
 hw/xfree86/drivers/modesetting/driver.c | 26 +++++++++++++-------------
 hw/xfree86/glamor_egl/glamor_xf86_xv.c  |  3 ++-
 hw/xwayland/xwayland-glamor-xv.c        |  3 ++-
 hw/xwayland/xwayland-glamor.c           | 11 ++++++-----
 11 files changed, 76 insertions(+), 34 deletions(-)

-- 
2.9.3



More information about the xorg-devel mailing list