Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Unified Diff: components/exo/wayland/server.cc

Issue 2846203002: exo: no-roundtrip dmabuf import (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/exo/wayland/server.cc
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index 0d27ff60d55be550aef2945f2011f1ee3685a9be..aae71272ec346aa50273e3f760705016722064c4 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -646,12 +646,13 @@ void linux_buffer_params_add(wl_client* client,
}
}
-void linux_buffer_params_create(wl_client* client,
- wl_resource* resource,
- int32_t width,
- int32_t height,
- uint32_t format,
- uint32_t flags) {
+void linux_buffer_params_create_impl(wl_client* client,
reveman 2017/04/28 17:21:24 I think the code will be easier to read if you did
+ wl_resource* resource,
+ uint32_t buffer_id,
+ int32_t width,
+ int32_t height,
+ uint32_t format,
+ uint32_t flags) {
if (width <= 0 || height <= 0) {
wl_resource_post_error(resource,
ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_DIMENSIONS,
@@ -712,25 +713,57 @@ void linux_buffer_params_create(wl_client* client,
gfx::Size(width, height), supported_format->buffer_format, planes,
std::move(fds));
if (!buffer) {
- zwp_linux_buffer_params_v1_send_failed(resource);
- return;
+ // buffer_id != 0 indicates a create_immed request. on import failure
+ // in that case, the protocol allows us to raise a fatal error from
+ // zwp_linux_dmabuf_v1 version 2+.
+ if (buffer_id == 0)
+ zwp_linux_buffer_params_v1_send_failed(resource);
+ else {
+ wl_resource_post_error(resource,
+ ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_WL_BUFFER,
+ "dmabuf import failed");
+ return;
+ }
}
wl_resource* buffer_resource =
- wl_resource_create(client, &wl_buffer_interface, 1, 0);
+ wl_resource_create(client, &wl_buffer_interface, 1, buffer_id);
buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback,
base::Unretained(buffer_resource)));
SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer));
- zwp_linux_buffer_params_v1_send_created(resource, buffer_resource);
+ // for a create_immed request, no event is triggered.
+ if (buffer_id == 0)
+ zwp_linux_buffer_params_v1_send_created(resource, buffer_resource);
+}
+
+void linux_buffer_params_create(wl_client* client,
+ wl_resource* resource,
+ int32_t width,
+ int32_t height,
+ uint32_t format,
+ uint32_t flags) {
+ linux_buffer_params_create_impl(client, resource, 0, width, height, format,
+ flags);
+}
+
+void linux_buffer_params_create_immed(wl_client* client,
+ wl_resource* resource,
+ uint32_t buffer_id,
+ int32_t width,
+ int32_t height,
+ uint32_t format,
+ uint32_t flags) {
+ linux_buffer_params_create_impl(client, resource, buffer_id, width, height,
+ format, flags);
}
const struct zwp_linux_buffer_params_v1_interface
- linux_buffer_params_implementation = {linux_buffer_params_destroy,
- linux_buffer_params_add,
- linux_buffer_params_create};
+ linux_buffer_params_implementation = {
+ linux_buffer_params_destroy, linux_buffer_params_add,
+ linux_buffer_params_create, linux_buffer_params_create_immed};
////////////////////////////////////////////////////////////////////////////////
// linux_dmabuf_interface:
@@ -746,7 +779,7 @@ void linux_dmabuf_create_params(wl_client* client,
base::MakeUnique<LinuxBufferParams>(GetUserDataAs<Display>(resource));
wl_resource* linux_buffer_params_resource =
- wl_resource_create(client, &zwp_linux_buffer_params_v1_interface, 1, id);
+ wl_resource_create(client, &zwp_linux_buffer_params_v1_interface, 2, id);
SetImplementation(linux_buffer_params_resource,
&linux_buffer_params_implementation,
@@ -761,7 +794,7 @@ void bind_linux_dmabuf(wl_client* client,
uint32_t version,
uint32_t id) {
wl_resource* resource =
- wl_resource_create(client, &zwp_linux_dmabuf_v1_interface, 1, id);
+ wl_resource_create(client, &zwp_linux_dmabuf_v1_interface, version, id);
wl_resource_set_implementation(resource, &linux_dmabuf_implementation, data,
nullptr);
@@ -3853,7 +3886,7 @@ Server::Server(Display* display)
#if defined(USE_OZONE)
wl_global_create(wl_display_.get(), &wl_drm_interface, drm_version, display_,
bind_drm);
- wl_global_create(wl_display_.get(), &zwp_linux_dmabuf_v1_interface, 1,
+ wl_global_create(wl_display_.get(), &zwp_linux_dmabuf_v1_interface, 2,
display_, bind_linux_dmabuf);
#endif
wl_global_create(wl_display_.get(), &wl_subcompositor_interface, 1, display_,

Powered by Google App Engine
This is Rietveld 408576698