mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
egl/wayland: Add a fallback when fourcc query isn't supported
When queryImage doesn't support __DRI_IMAGE_ATTRIB_FOURCC wayland clients
will die with a NULL derefence in wl_proxy_add_listener.
Attempt to provide a simple fallback to keep ancient systems working.
Fixes: 6595c69951 ("egl/wayland: Remove more surface specifics from
create_wl_buffer")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103519
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Acked-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
This commit is contained in:
parent
89e669d2fd
commit
0db36caa19
1 changed files with 30 additions and 2 deletions
|
|
@ -671,6 +671,35 @@ static const struct wl_callback_listener throttle_listener = {
|
|||
.done = wayland_throttle_callback
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
get_fourcc(struct dri2_egl_display *dri2_dpy,
|
||||
__DRIimage *image, int *fourcc)
|
||||
{
|
||||
EGLBoolean query;
|
||||
uint32_t dri_format;
|
||||
|
||||
query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC,
|
||||
fourcc);
|
||||
if (query)
|
||||
return true;
|
||||
|
||||
query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT,
|
||||
&dri_format);
|
||||
if (!query)
|
||||
return false;
|
||||
|
||||
switch (dri_format) {
|
||||
case __DRI_IMAGE_FORMAT_ARGB8888:
|
||||
*fourcc = __DRI_IMAGE_FOURCC_ARGB8888;
|
||||
return true;
|
||||
case __DRI_IMAGE_FORMAT_XRGB8888:
|
||||
*fourcc = __DRI_IMAGE_FOURCC_XRGB8888;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static struct wl_buffer *
|
||||
create_wl_buffer(struct dri2_egl_display *dri2_dpy,
|
||||
struct dri2_egl_surface *dri2_surf,
|
||||
|
|
@ -684,8 +713,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
|
|||
query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_WIDTH, &width);
|
||||
query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_HEIGHT,
|
||||
&height);
|
||||
query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC,
|
||||
&fourcc);
|
||||
query &= get_fourcc(dri2_dpy, image, &fourcc);
|
||||
if (!query)
|
||||
return NULL;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue