[Mesa-dev] [PATCH 14/22] egl/wayland: Add Wayland dmabuf support for RGB10 winsys buffers. (v2)
Successfully tested under Weston 3.0. Photometer confirms 10 rgb bits from rendering to display. v2: Rebased onto master for dri2_teardown_wayland(). Signed-off-by: Mario Kleiner Reviewed-by: Marek Olšák --- src/egl/drivers/dri2/egl_dri2.h | 2 ++ src/egl/drivers/dri2/platform_wayland.c | 18 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index ef375b6..cc76c73 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -212,6 +212,8 @@ struct dri2_egl_display struct wl_event_queue*wl_queue; struct zwp_linux_dmabuf_v1 *wl_dmabuf; struct { + struct u_vectorxrgb2101010; + struct u_vectorargb2101010; struct u_vectorxrgb; struct u_vectorargb; struct u_vectorrgb565; diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 3633c83..7451027 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -354,9 +354,13 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) switch (dri2_surf->format) { case WL_DRM_FORMAT_ARGB2101010: dri_image_format = __DRI_IMAGE_FORMAT_ARGB2101010; + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.argb2101010); + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.argb2101010); break; case WL_DRM_FORMAT_XRGB2101010: dri_image_format = __DRI_IMAGE_FORMAT_XRGB2101010; + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.xrgb2101010); + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.xrgb2101010); break; case WL_DRM_FORMAT_ARGB: dri_image_format = __DRI_IMAGE_FORMAT_ARGB; @@ -1143,6 +1147,14 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, return; switch (format) { + case WL_DRM_FORMAT_ARGB2101010: + mod = u_vector_add(&dri2_dpy->wl_modifiers.argb2101010); + dri2_dpy->formats |= HAS_ARGB2101010; + break; + case WL_DRM_FORMAT_XRGB2101010: + mod = u_vector_add(&dri2_dpy->wl_modifiers.xrgb2101010); + dri2_dpy->formats |= HAS_XRGB2101010; + break; case WL_DRM_FORMAT_ARGB: mod = u_vector_add(&dri2_dpy->wl_modifiers.argb); dri2_dpy->formats |= HAS_ARGB; @@ -1314,7 +1326,9 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp) dri2_dpy->wl_dpy = disp->PlatformDisplay; } - if (!u_vector_init(&dri2_dpy->wl_modifiers.xrgb, sizeof(uint64_t), 32) || + if (!u_vector_init(&dri2_dpy->wl_modifiers.xrgb2101010, sizeof(uint64_t), 32) || + !u_vector_init(&dri2_dpy->wl_modifiers.argb2101010, sizeof(uint64_t), 32) || + !u_vector_init(&dri2_dpy->wl_modifiers.xrgb, sizeof(uint64_t), 32) || !u_vector_init(&dri2_dpy->wl_modifiers.argb, sizeof(uint64_t), 32) || !u_vector_init(&dri2_dpy->wl_modifiers.rgb565, sizeof(uint64_t), 32)) { goto cleanup; @@ -2055,6 +2069,8 @@ dri2_teardown_wayland(struct dri2_egl_display *dri2_dpy) wl_event_queue_destroy(dri2_dpy->wl_queue); if (dri2_dpy->wl_dpy_wrapper) wl_proxy_wrapper_destroy(dri2_dpy->wl_dpy_wrapper); + u_vector_finish(&dri2_dpy->wl_modifiers.argb2101010); + u_vector_finish(&dri2_dpy->wl_modifiers.xrgb2101010); u_vector_finish(&dri2_dpy->wl_modifiers.argb); u_vector_finish(&dri2_dpy->wl_modifiers.xrgb); u_vector_finish(&dri2_dpy->wl_modifiers.rgb565); -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 14/22] egl/wayland: Add Wayland dmabuf support for RGB10 winsys buffers. (v2)
Successfully tested under Weston 3.0. Photometer confirms 10 rgb bits from rendering to display. v2: Rebased onto master for dri2_teardown_wayland(). Signed-off-by: Mario Kleiner --- src/egl/drivers/dri2/egl_dri2.h | 2 ++ src/egl/drivers/dri2/platform_wayland.c | 18 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index ef375b6..cc76c73 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -212,6 +212,8 @@ struct dri2_egl_display struct wl_event_queue*wl_queue; struct zwp_linux_dmabuf_v1 *wl_dmabuf; struct { + struct u_vectorxrgb2101010; + struct u_vectorargb2101010; struct u_vectorxrgb; struct u_vectorargb; struct u_vectorrgb565; diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 3633c83..7451027 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -354,9 +354,13 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) switch (dri2_surf->format) { case WL_DRM_FORMAT_ARGB2101010: dri_image_format = __DRI_IMAGE_FORMAT_ARGB2101010; + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.argb2101010); + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.argb2101010); break; case WL_DRM_FORMAT_XRGB2101010: dri_image_format = __DRI_IMAGE_FORMAT_XRGB2101010; + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.xrgb2101010); + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.xrgb2101010); break; case WL_DRM_FORMAT_ARGB: dri_image_format = __DRI_IMAGE_FORMAT_ARGB; @@ -1143,6 +1147,14 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, return; switch (format) { + case WL_DRM_FORMAT_ARGB2101010: + mod = u_vector_add(&dri2_dpy->wl_modifiers.argb2101010); + dri2_dpy->formats |= HAS_ARGB2101010; + break; + case WL_DRM_FORMAT_XRGB2101010: + mod = u_vector_add(&dri2_dpy->wl_modifiers.xrgb2101010); + dri2_dpy->formats |= HAS_XRGB2101010; + break; case WL_DRM_FORMAT_ARGB: mod = u_vector_add(&dri2_dpy->wl_modifiers.argb); dri2_dpy->formats |= HAS_ARGB; @@ -1314,7 +1326,9 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp) dri2_dpy->wl_dpy = disp->PlatformDisplay; } - if (!u_vector_init(&dri2_dpy->wl_modifiers.xrgb, sizeof(uint64_t), 32) || + if (!u_vector_init(&dri2_dpy->wl_modifiers.xrgb2101010, sizeof(uint64_t), 32) || + !u_vector_init(&dri2_dpy->wl_modifiers.argb2101010, sizeof(uint64_t), 32) || + !u_vector_init(&dri2_dpy->wl_modifiers.xrgb, sizeof(uint64_t), 32) || !u_vector_init(&dri2_dpy->wl_modifiers.argb, sizeof(uint64_t), 32) || !u_vector_init(&dri2_dpy->wl_modifiers.rgb565, sizeof(uint64_t), 32)) { goto cleanup; @@ -2055,6 +2069,8 @@ dri2_teardown_wayland(struct dri2_egl_display *dri2_dpy) wl_event_queue_destroy(dri2_dpy->wl_queue); if (dri2_dpy->wl_dpy_wrapper) wl_proxy_wrapper_destroy(dri2_dpy->wl_dpy_wrapper); + u_vector_finish(&dri2_dpy->wl_modifiers.argb2101010); + u_vector_finish(&dri2_dpy->wl_modifiers.xrgb2101010); u_vector_finish(&dri2_dpy->wl_modifiers.argb); u_vector_finish(&dri2_dpy->wl_modifiers.xrgb); u_vector_finish(&dri2_dpy->wl_modifiers.rgb565); -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev