Set loader caps indicating that wayland can handle both rgba ordering and fp16 formats.
NOTE: This requries libwayland to provide definitions for WL_SHM_FORMAT_XBGR16161616F and WL_SHM_FORMAT_ABGR16161616F Signed-off-by: Kevin Strasser <[email protected]> --- src/egl/drivers/dri2/platform_wayland.c | 30 ++++++++++++++++++++++++++++- src/egl/wayland/wayland-drm/wayland-drm.c | 6 ++++++ src/egl/wayland/wayland-drm/wayland-drm.xml | 2 ++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 4b5f9b7..31734a3 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -64,6 +64,20 @@ static const struct dri2_wl_visual { bool is_float; } dri2_wl_visuals[] = { { + "XBGR16161616F", + WL_DRM_FORMAT_XBGR16161616F, WL_SHM_FORMAT_XBGR16161616F, + __DRI_IMAGE_FORMAT_XBGR16161616F, 64, + { 0, 16, 32, -1 }, + true + }, + { + "ABGR16161616F", + WL_DRM_FORMAT_ABGR16161616F, WL_SHM_FORMAT_ABGR16161616F, + __DRI_IMAGE_FORMAT_ABGR16161616F, 64, + { 0, 16, 32, 48 }, + true + }, + { "XRGB2101010", WL_DRM_FORMAT_XRGB2101010, WL_SHM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010, 32, @@ -755,12 +769,26 @@ dri2_wl_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate) (void) loaderPrivate; } +static unsigned +dri2_wl_get_capability(void *loaderPrivate, enum dri_loader_cap cap) +{ + /* Note: loaderPrivate is _EGLDisplay* */ + switch (cap) { + case DRI_LOADER_CAP_RGBA_ORDERING: + case DRI_LOADER_CAP_FP16: + return 1; + default: + return 0; + } +} + static const __DRIdri2LoaderExtension dri2_loader_extension = { - .base = { __DRI_DRI2_LOADER, 3 }, + .base = { __DRI_DRI2_LOADER, 4 }, .getBuffers = dri2_wl_get_buffers, .flushFrontBuffer = dri2_wl_flush_front_buffer, .getBuffersWithFormat = dri2_wl_get_buffers_with_format, + .getCapability = dri2_wl_get_capability, }; static const __DRIimageLoaderExtension image_loader_extension = { diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c index 3c6696d..9dd7fd3 100644 --- a/src/egl/wayland/wayland-drm/wayland-drm.c +++ b/src/egl/wayland/wayland-drm/wayland-drm.c @@ -117,6 +117,8 @@ drm_create_buffer(struct wl_client *client, struct wl_resource *resource, case WL_DRM_FORMAT_XRGB8888: case WL_DRM_FORMAT_YUYV: case WL_DRM_FORMAT_RGB565: + case WL_DRM_FORMAT_ABGR16161616F: + case WL_DRM_FORMAT_XBGR16161616F: break; default: wl_resource_post_error(resource, @@ -220,6 +222,10 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id) WL_DRM_FORMAT_XRGB8888); wl_resource_post_event(resource, WL_DRM_FORMAT, WL_DRM_FORMAT_RGB565); + wl_resource_post_event(resource, WL_DRM_FORMAT, + WL_DRM_FORMAT_ABGR16161616F); + wl_resource_post_event(resource, WL_DRM_FORMAT, + WL_DRM_FORMAT_XBGR16161616F); wl_resource_post_event(resource, WL_DRM_FORMAT, WL_DRM_FORMAT_YUV410); wl_resource_post_event(resource, WL_DRM_FORMAT, WL_DRM_FORMAT_YUV411); wl_resource_post_event(resource, WL_DRM_FORMAT, WL_DRM_FORMAT_YUV420); diff --git a/src/egl/wayland/wayland-drm/wayland-drm.xml b/src/egl/wayland/wayland-drm/wayland-drm.xml index 83aa561..b180ded 100644 --- a/src/egl/wayland/wayland-drm/wayland-drm.xml +++ b/src/egl/wayland/wayland-drm/wayland-drm.xml @@ -80,6 +80,8 @@ <entry name="abgr2101010" value="0x30334241"/> <entry name="rgba1010102" value="0x30334152"/> <entry name="bgra1010102" value="0x30334142"/> + <entry name="xbgr16161616f" value="0x48344258" /> + <entry name="abgr16161616f" value="0x48344241" /> <entry name="yuyv" value="0x56595559"/> <entry name="yvyu" value="0x55595659"/> <entry name="uyvy" value="0x59565955"/> -- 2.7.4 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
