tests/wayland-test-clients: Try simple dma-buf alloc first and fall back
to the complex one. If a driver supports allocating linear YCbCr formats we can use that instead of constructing our own compatible buffer. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3371>
This commit is contained in:
parent
ff3b8197fd
commit
628f12a48b
@ -1097,8 +1097,8 @@ alloc_dmabuf_simple (WaylandBuffer *buffer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
alloc_dmabuf_ycbcr (WaylandBuffer *buffer,
|
alloc_dmabuf_complex (WaylandBuffer *buffer,
|
||||||
uint32_t bo_flags)
|
uint32_t bo_flags)
|
||||||
{
|
{
|
||||||
WaylandBufferDmabuf *dmabuf = WAYLAND_BUFFER_DMABUF (buffer);
|
WaylandBufferDmabuf *dmabuf = WAYLAND_BUFFER_DMABUF (buffer);
|
||||||
WaylandBufferPrivate *priv = wayland_buffer_get_instance_private (buffer);
|
WaylandBufferPrivate *priv = wayland_buffer_get_instance_private (buffer);
|
||||||
@ -1151,6 +1151,8 @@ alloc_dmabuf_ycbcr (WaylandBuffer *buffer,
|
|||||||
vsub[1] = 2;
|
vsub[1] = 2;
|
||||||
hsub[2] = 2;
|
hsub[2] = 2;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wl_params = zwp_linux_dmabuf_v1_create_params (wl_dmabuf);
|
wl_params = zwp_linux_dmabuf_v1_create_params (wl_dmabuf);
|
||||||
@ -1240,6 +1242,9 @@ wayland_buffer_dmabuf_allocate (WaylandBuffer *buffer,
|
|||||||
GUINT_TO_POINTER (priv->format));
|
GUINT_TO_POINTER (priv->format));
|
||||||
g_assert_nonnull (dma_buf_format);
|
g_assert_nonnull (dma_buf_format);
|
||||||
|
|
||||||
|
if (alloc_dmabuf_simple (buffer, n_modifiers, modifiers, bo_flags))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
may_alloc_linear = !modifiers;
|
may_alloc_linear = !modifiers;
|
||||||
for (i = 0; i < n_modifiers; i++)
|
for (i = 0; i < n_modifiers; i++)
|
||||||
{
|
{
|
||||||
@ -1251,23 +1256,10 @@ wayland_buffer_dmabuf_allocate (WaylandBuffer *buffer,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (priv->format)
|
if (!may_alloc_linear)
|
||||||
{
|
return FALSE;
|
||||||
case DRM_FORMAT_ARGB8888:
|
|
||||||
case DRM_FORMAT_XRGB8888:
|
|
||||||
return alloc_dmabuf_simple (buffer, n_modifiers, modifiers, bo_flags);
|
|
||||||
case DRM_FORMAT_YUYV:
|
|
||||||
case DRM_FORMAT_NV12:
|
|
||||||
case DRM_FORMAT_P010:
|
|
||||||
case DRM_FORMAT_YUV420:
|
|
||||||
if (!may_alloc_linear)
|
|
||||||
return FALSE;
|
|
||||||
return alloc_dmabuf_ycbcr (buffer, bo_flags);
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return alloc_dmabuf_complex (buffer, bo_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
|
Loading…
Reference in New Issue
Block a user