wayland: Add zwp_linux_dmabuf_v1 support
https://bugzilla.gnome.org/show_bug.cgi?id=785262 Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:

committed by
Jonas Ådahl

parent
1455c402b9
commit
b7b5fb293d
@ -25,11 +25,18 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "meta-wayland-buffer.h"
|
||||
#include "meta-wayland-dma-buf.h"
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include <cogl/cogl-egl.h>
|
||||
#include <meta/util.h>
|
||||
|
||||
#include <drm_fourcc.h>
|
||||
|
||||
#ifndef DRM_FORMAT_MOD_INVALID
|
||||
#define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
|
||||
#endif
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
|
||||
enum
|
||||
@ -97,6 +104,7 @@ meta_wayland_buffer_realize (MetaWaylandBuffer *buffer)
|
||||
CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend);
|
||||
EGLDisplay egl_display = cogl_egl_context_get_egl_display (cogl_context);
|
||||
MetaWaylandEglStream *stream;
|
||||
MetaWaylandDmaBufBuffer *dma_buf;
|
||||
|
||||
if (wl_shm_buffer_get (buffer->resource) != NULL)
|
||||
{
|
||||
@ -120,6 +128,14 @@ meta_wayland_buffer_realize (MetaWaylandBuffer *buffer)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
dma_buf = meta_wayland_dma_buf_from_buffer (buffer);
|
||||
if (dma_buf)
|
||||
{
|
||||
buffer->dma_buf.dma_buf = dma_buf;
|
||||
buffer->type = META_WAYLAND_BUFFER_TYPE_DMA_BUF;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -341,6 +357,8 @@ meta_wayland_buffer_attach (MetaWaylandBuffer *buffer,
|
||||
return egl_image_buffer_attach (buffer, error);
|
||||
case META_WAYLAND_BUFFER_TYPE_EGL_STREAM:
|
||||
return egl_stream_buffer_attach (buffer, error);
|
||||
case META_WAYLAND_BUFFER_TYPE_DMA_BUF:
|
||||
return meta_wayland_dma_buf_buffer_attach (buffer, error);
|
||||
case META_WAYLAND_BUFFER_TYPE_UNKNOWN:
|
||||
g_assert_not_reached ();
|
||||
return FALSE;
|
||||
@ -430,6 +448,7 @@ meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer,
|
||||
res = process_shm_buffer_damage (buffer, region, &error);
|
||||
case META_WAYLAND_BUFFER_TYPE_EGL_IMAGE:
|
||||
case META_WAYLAND_BUFFER_TYPE_EGL_STREAM:
|
||||
case META_WAYLAND_BUFFER_TYPE_DMA_BUF:
|
||||
res = TRUE;
|
||||
break;
|
||||
case META_WAYLAND_BUFFER_TYPE_UNKNOWN:
|
||||
@ -453,6 +472,7 @@ meta_wayland_buffer_finalize (GObject *object)
|
||||
|
||||
g_clear_pointer (&buffer->texture, cogl_object_unref);
|
||||
g_clear_object (&buffer->egl_stream.stream);
|
||||
g_clear_object (&buffer->dma_buf.dma_buf);
|
||||
|
||||
G_OBJECT_CLASS (meta_wayland_buffer_parent_class)->finalize (object);
|
||||
}
|
||||
|
Reference in New Issue
Block a user