2015-07-21 16:44:00 +01:00
|
|
|
/*
|
|
|
|
* Copyright © 2015 Boyan Ding
|
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
|
|
|
* documentation for any purpose is hereby granted without fee, provided that
|
|
|
|
* the above copyright notice appear in all copies and that both that copyright
|
|
|
|
* notice and this permission notice appear in supporting documentation, and
|
|
|
|
* that the name of the copyright holders not be used in advertising or
|
|
|
|
* publicity pertaining to distribution of the software without specific,
|
|
|
|
* written prior permission. The copyright holders make no representations
|
|
|
|
* about the suitability of this software for any purpose. It is provided "as
|
|
|
|
* is" without express or implied warranty.
|
|
|
|
*
|
|
|
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
|
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
|
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
|
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
|
|
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
|
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
|
|
|
* OF THIS SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef EGL_X11_DRI3_INCLUDED
|
|
|
|
#define EGL_X11_DRI3_INCLUDED
|
|
|
|
|
|
|
|
#include "egl_dri2.h"
|
|
|
|
|
|
|
|
_EGL_DRIVER_TYPECAST(dri3_egl_surface, _EGLSurface, obj)
|
|
|
|
|
|
|
|
struct dri3_egl_surface {
|
2017-09-15 18:32:41 +01:00
|
|
|
struct dri2_egl_surface surf;
|
2015-07-21 16:44:00 +01:00
|
|
|
struct loader_dri3_drawable loader_drawable;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const __DRIimageLoaderExtension dri3_image_loader_extension;
|
|
|
|
extern struct dri2_egl_display_vtbl dri3_x11_display_vtbl;
|
|
|
|
|
|
|
|
EGLBoolean
|
|
|
|
dri3_x11_connect(struct dri2_egl_display *dri2_dpy);
|
|
|
|
|
2018-05-17 16:16:34 +01:00
|
|
|
uint32_t
|
egl/x11: Handle both depth 30 formats for eglCreateImage(). (v4)
We need to distinguish if the backing storage of a pixmap
is XRGB2101010 or XBGR2101010, as different gpu hw supports
different formats. NVidia hw prefers XBGR, whereas AMD and
Intel are happy with XRGB.
Use the red channel mask of the first depth 30 visual of
the x-screen to distinguish which hw format to choose.
This fixes desktop composition of color depth 30 windows
when the X11 compositor uses EGL.
v2: Switch from using the visual of the root window to simply
using the first depth 30 visual for the x-screen, as testing
shows that each driver only exports either xrgb ordering or
xbgr ordering for the channel masks of its depth 30 visuals,
so this should be unambiguous and avoid trouble if X ever
supports depth 30 pixmaps on screens with a non-depth 30 root
window visual. This per Michels suggestion.
v3: No change to v2, but spent some time testing this more on
AMD hw, with my software hacked up to intentionally choose
pixel formats/visual with the non-preferred xBGR2101010
ordering on the ati-ddx, also with a standard non-OpenGL
X-Window with depth 30 visual, to make sure that things show
up properly with the right colors on the screen when going
through EGL+OpenGL based compositing on KDE-5. Iow. to confirm
that my explanation to the v2 patch on the mailing list of why
it should work and the actual practice agree (or possibly that
i am good at fooling myself during testing ;).
v4: Drop the local `red_mask` and just `return visual->red_mask`/
`return 0`, as suggested by Eric Engestrom.
Rebased onto current master, to take the cleanup via the new
function dri2_format_for_depth() into account.
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
2018-06-13 05:04:13 +01:00
|
|
|
dri2_format_for_depth(struct dri2_egl_display *dri2_dpy, uint32_t depth);
|
2018-05-17 16:16:34 +01:00
|
|
|
|
2015-07-21 16:44:00 +01:00
|
|
|
#endif
|