Skip to content
  • Mario Kleiner's avatar
    loader_dri3: Handle mismatched depth 30 formats for Prime renderoffload. · 9bd8b0f7
    Mario Kleiner authored and Eric Engestrom's avatar Eric Engestrom committed
    
    
    Detect if the display (X-Server) gpu and Prime renderoffload gpu prefer
    different channel ordering for color depth 30 formats ([X/A]BGR2101010
    vs. [X/A]RGB2101010) and perform format conversion during the blitImage()
    detiling op from tiled backbuffer -> linear buffer.
    
    For this we need to find the visual (= red channel mask) for the
    X-Drawable used to display on the server gpu. We use the same proven
    logic for finding that visual as in commit "egl/x11: Handle both depth
    30 formats for eglCreateImage()".
    
    This is mostly to allow "NVidia Optimus" at depth 30, as Intel/AMD
    gpu's prefer xRGB2101010 ordering, whereas NVidia gpu's prefer
    xBGR2101010 ordering, so we can offload to nouveau without getting
    funky colors.
    
    Tested on Intel single gpu, NVidia single gpu, Intel + NVidia prime
    offload with DRI3/Present.
    
    Note: An unintended but pleasant surprise of this patch is that it also
    seems to make the modesetting-ddx of server 1.20.0 work at depth 30
    on nouveau, at least with unredirected "classic" X rendering, and
    with redirected desktop compositing under XRender accel, and with OpenGL
    compositing under GLX. Only X11 compositing via OpenGL + EGL still gives
    funky colors. modesetting-ddx + glamor are not yet ready to deal with
    nouveau's ABGR2101010 format, and treat it as ARGB2101010, also exposing
    X-visuals with ARGB2101010 style channel masks. Seems somehow this triggers
    the logic in this patch on modesetting-ddx + depth 30 + DRI3 buffer sharing
    and does the "wrong" channel swizzling that then cancels out the "wrong"
    swizzling of glamor and we end up with the proper pixel formatting in
    the scanout buffer :). This so far tested on a NVA5 Tesla card under KDE5
    Plasma as shipping with Ubuntu 16.04.4 LTS.
    
    Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
    Cc: Ilia Mirkin <imirkin@alum.mit.edu>
    Reviewed-by: default avatarEric Engestrom <eric.engestrom@intel.com>
    9bd8b0f7