wayland: Always realize buffers at surface commit time

Clients using EGLStream-backed buffers will expect the stream to be
functional after wl_surface::attach(). That means the compositor-side
stream must be created and a consumer attached to it.

To resolve the above, this change realizes buffers even when the attach
operation is deferred (e.g. synchronized subsurfaces).

https://bugzilla.gnome.org/show_bug.cgi?id=782575
This commit is contained in:
Miguel A. Vico
2017-05-05 18:41:51 -07:00
parent edd3634bb5
commit 22723ca371
3 changed files with 15 additions and 12 deletions

View File

@ -94,13 +94,13 @@ meta_wayland_buffer_get_resource (MetaWaylandBuffer *buffer)
return buffer->resource;
}
static gboolean
gboolean
meta_wayland_buffer_is_realized (MetaWaylandBuffer *buffer)
{
return buffer->type != META_WAYLAND_BUFFER_TYPE_UNKNOWN;
}
static gboolean
gboolean
meta_wayland_buffer_realize (MetaWaylandBuffer *buffer)
{
EGLint format;
@ -131,13 +131,12 @@ meta_wayland_buffer_realize (MetaWaylandBuffer *buffer)
{
CoglTexture2D *texture;
buffer->egl_stream.stream = stream;
buffer->type = META_WAYLAND_BUFFER_TYPE_EGL_STREAM;
texture = meta_wayland_egl_stream_create_texture (stream, NULL);
if (!texture)
return FALSE;
buffer->egl_stream.stream = stream;
buffer->type = META_WAYLAND_BUFFER_TYPE_EGL_STREAM;
buffer->texture = COGL_TEXTURE (texture);
buffer->is_y_inverted = meta_wayland_egl_stream_is_y_inverted (stream);
@ -344,13 +343,11 @@ meta_wayland_buffer_attach (MetaWaylandBuffer *buffer,
if (!meta_wayland_buffer_is_realized (buffer))
{
if (!meta_wayland_buffer_realize (buffer))
{
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
"Unknown buffer type");
return FALSE;
}
/* The buffer should have been realized at surface commit time */
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
"Unknown buffer type");
return FALSE;
}
switch (buffer->type)