mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 01:50:10 +01:00
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 <mario.kleiner.de@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
84fd5151cd
commit
859ccd2096
2 changed files with 19 additions and 1 deletions
|
|
@ -212,6 +212,8 @@ struct dri2_egl_display
|
|||
struct wl_event_queue *wl_queue;
|
||||
struct zwp_linux_dmabuf_v1 *wl_dmabuf;
|
||||
struct {
|
||||
struct u_vector xrgb2101010;
|
||||
struct u_vector argb2101010;
|
||||
struct u_vector xrgb8888;
|
||||
struct u_vector argb8888;
|
||||
struct u_vector rgb565;
|
||||
|
|
|
|||
|
|
@ -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_ARGB8888:
|
||||
dri_image_format = __DRI_IMAGE_FORMAT_ARGB8888;
|
||||
|
|
@ -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_ARGB8888:
|
||||
mod = u_vector_add(&dri2_dpy->wl_modifiers.argb8888);
|
||||
dri2_dpy->formats |= HAS_ARGB8888;
|
||||
|
|
@ -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.xrgb8888, 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.xrgb8888, sizeof(uint64_t), 32) ||
|
||||
!u_vector_init(&dri2_dpy->wl_modifiers.argb8888, 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.argb8888);
|
||||
u_vector_finish(&dri2_dpy->wl_modifiers.xrgb8888);
|
||||
u_vector_finish(&dri2_dpy->wl_modifiers.rgb565);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue