Use linux-dmabuf protocol from wayland-protocols

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mariusz Ceier <mceier+wayland@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
Jonas Ådahl
2015-11-17 16:00:28 +08:00
committed by Pekka Paalanen
parent 496adb3bb3
commit 57e48f023c
5 changed files with 63 additions and 338 deletions
+3 -3
View File
@@ -41,7 +41,7 @@
#include "gl-renderer.h"
#include "vertex-clipping.h"
#include "linux-dmabuf.h"
#include "linux-dmabuf-server-protocol.h"
#include "linux-dmabuf-unstable-v1-server-protocol.h"
#include "shared/helpers.h"
#include "weston-egl-ext.h"
@@ -1514,7 +1514,7 @@ gl_renderer_import_dmabuf(struct weston_compositor *ec,
}
/* reject all flags we do not recognize or handle */
if (dmabuf->flags & ~ZLINUX_BUFFER_PARAMS_FLAGS_Y_INVERT)
if (dmabuf->flags & ~ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT)
return false;
image = import_dmabuf(gr, dmabuf);
@@ -1563,7 +1563,7 @@ gl_renderer_attach_dmabuf(struct weston_surface *surface,
buffer->width = dmabuf->width;
buffer->height = dmabuf->height;
buffer->y_inverted =
!!(dmabuf->flags & ZLINUX_BUFFER_PARAMS_FLAGS_Y_INVERT);
!!(dmabuf->flags & ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT);
for (i = 0; i < gs->num_images; i++)
egl_image_unref(gs->images[i]);
+24 -24
View File
@@ -28,7 +28,7 @@
#include "compositor.h"
#include "linux-dmabuf.h"
#include "linux-dmabuf-server-protocol.h"
#include "linux-dmabuf-unstable-v1-server-protocol.h"
static void
linux_dmabuf_buffer_destroy(struct linux_dmabuf_buffer *buffer)
@@ -78,7 +78,7 @@ params_add(struct wl_client *client,
buffer = wl_resource_get_user_data(params_resource);
if (!buffer) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_ALREADY_USED,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ALREADY_USED,
"params was already used to create a wl_buffer");
close(name_fd);
return;
@@ -89,7 +89,7 @@ params_add(struct wl_client *client,
if (plane_idx >= MAX_DMABUF_PLANES) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_PLANE_IDX,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_IDX,
"plane index %u is too high", plane_idx);
close(name_fd);
return;
@@ -97,7 +97,7 @@ params_add(struct wl_client *client,
if (buffer->dmabuf_fd[plane_idx] != -1) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_PLANE_SET,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_SET,
"a dmabuf has already been added for plane %u",
plane_idx);
close(name_fd);
@@ -153,7 +153,7 @@ params_create(struct wl_client *client,
if (!buffer) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_ALREADY_USED,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ALREADY_USED,
"params was already used to create a wl_buffer");
return;
}
@@ -169,7 +169,7 @@ params_create(struct wl_client *client,
if (!buffer->n_planes) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_INCOMPLETE,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE,
"no dmabuf has been added to the params");
goto err_out;
}
@@ -178,7 +178,7 @@ params_create(struct wl_client *client,
for (i = 0; i < buffer->n_planes; i++) {
if (buffer->dmabuf_fd[i] == -1) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_INCOMPLETE,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE,
"no dmabuf has been added for plane %i", i);
goto err_out;
}
@@ -191,7 +191,7 @@ params_create(struct wl_client *client,
if (width < 1 || height < 1) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_INVALID_DIMENSIONS,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_DIMENSIONS,
"invalid width %d or height %d", width, height);
goto err_out;
}
@@ -201,7 +201,7 @@ params_create(struct wl_client *client,
if ((uint64_t) buffer->offset[i] + buffer->stride[i] > UINT32_MAX) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_OUT_OF_BOUNDS,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS,
"size overflow for plane %i", i);
goto err_out;
}
@@ -210,7 +210,7 @@ params_create(struct wl_client *client,
(uint64_t) buffer->offset[i] +
(uint64_t) buffer->stride[i] * height > UINT32_MAX) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_OUT_OF_BOUNDS,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS,
"size overflow for plane %i", i);
goto err_out;
}
@@ -223,7 +223,7 @@ params_create(struct wl_client *client,
if (buffer->offset[i] >= size) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_OUT_OF_BOUNDS,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS,
"invalid offset %i for plane %i",
buffer->offset[i], i);
goto err_out;
@@ -231,7 +231,7 @@ params_create(struct wl_client *client,
if (buffer->offset[i] + buffer->stride[i] > size) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_OUT_OF_BOUNDS,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS,
"invalid stride %i for plane %i",
buffer->stride[i], i);
goto err_out;
@@ -242,7 +242,7 @@ params_create(struct wl_client *client,
if (i == 0 &&
buffer->offset[i] + buffer->stride[i] * height > size) {
wl_resource_post_error(params_resource,
ZLINUX_BUFFER_PARAMS_ERROR_OUT_OF_BOUNDS,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS,
"invalid buffer stride or height for plane %i", i);
goto err_out;
}
@@ -269,8 +269,8 @@ params_create(struct wl_client *client,
&linux_dmabuf_buffer_implementation,
buffer, destroy_linux_dmabuf_wl_buffer);
zlinux_buffer_params_send_created(params_resource,
buffer->buffer_resource);
zwp_linux_buffer_params_v1_send_created(params_resource,
buffer->buffer_resource);
return;
@@ -279,14 +279,14 @@ err_buffer:
buffer->user_data_destroy_func(buffer);
err_failed:
zlinux_buffer_params_send_failed(params_resource);
zwp_linux_buffer_params_v1_send_failed(params_resource);
err_out:
linux_dmabuf_buffer_destroy(buffer);
}
static const struct zlinux_buffer_params_interface
zlinux_buffer_params_implementation = {
static const struct zwp_linux_buffer_params_v1_interface
zwp_linux_buffer_params_implementation = {
params_destroy,
params_add,
params_create
@@ -321,13 +321,13 @@ linux_dmabuf_create_params(struct wl_client *client,
buffer->compositor = compositor;
buffer->params_resource =
wl_resource_create(client,
&zlinux_buffer_params_interface,
&zwp_linux_buffer_params_v1_interface,
version, params_id);
if (!buffer->params_resource)
goto err_dealloc;
wl_resource_set_implementation(buffer->params_resource,
&zlinux_buffer_params_implementation,
&zwp_linux_buffer_params_implementation,
buffer, destroy_params);
return;
@@ -411,7 +411,7 @@ linux_dmabuf_buffer_get_user_data(struct linux_dmabuf_buffer *buffer)
return buffer->user_data;
}
static const struct zlinux_dmabuf_interface linux_dmabuf_implementation = {
static const struct zwp_linux_dmabuf_v1_interface linux_dmabuf_implementation = {
linux_dmabuf_destroy,
linux_dmabuf_create_params
};
@@ -423,7 +423,7 @@ bind_linux_dmabuf(struct wl_client *client,
struct weston_compositor *compositor = data;
struct wl_resource *resource;
resource = wl_resource_create(client, &zlinux_dmabuf_interface,
resource = wl_resource_create(client, &zwp_linux_dmabuf_v1_interface,
version, id);
if (resource == NULL) {
wl_client_post_no_memory(client);
@@ -440,7 +440,7 @@ bind_linux_dmabuf(struct wl_client *client,
/** Advertise linux_dmabuf support
*
* Calling this initializes the zlinux_dmabuf protocol support, so that
* Calling this initializes the zwp_linux_dmabuf protocol support, so that
* the interface will be advertised to clients. Essentially it creates a
* global. Do not call this function multiple times in the compositor's
* lifetime. There is no way to deinit explicitly, globals will be reaped
@@ -453,7 +453,7 @@ WL_EXPORT int
linux_dmabuf_setup(struct weston_compositor *compositor)
{
if (!wl_global_create(compositor->wl_display,
&zlinux_dmabuf_interface, 1,
&zwp_linux_dmabuf_v1_interface, 1,
compositor, bind_linux_dmabuf))
return -1;