Commit 3b4f6d6a authored by Eliot Courtney's avatar Eliot Courtney Committed by Commit Bot

[ozone/wayland] Add zwp_linux_explicit_synchronization interface.

This interface lets a wayland client provide in-fences to a wayland
server and receive out-fences (or an immediate release) back.

Adding this interface to ozone/wayland is a required step for adding
support for passing in-fences and out-fences between Chrome (wayland
client) and the wayland server.

Passing fences around lets buffers be used more efficiently by:
1. Moving the wait on a buffer to be available for scan-out closer to
the place where it is scanned out.
2. Letting clients know when they can re-use buffers more quickly
(rather than via IPC).

Bug: 1120244
Test: compiles
Change-Id: Ib864255f2d30e5b9c515f071e8336a4e62a6c916
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2368932
Commit-Queue: Eliot Courtney <edcourtney@chromium.org>
Reviewed-by: default avatarMaksim Sisov (GMT+3) <msisov@igalia.com>
Reviewed-by: default avatarRobert Kroeger <rjkroege@chromium.org>
Reviewed-by: default avatarKramer Ge <fangzhoug@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801272}
parent 3ed7301e
......@@ -150,6 +150,7 @@ source_set("wayland") {
"//third_party/wayland-protocols:gtk_primary_selection_protocol",
"//third_party/wayland-protocols:keyboard_extension_protocol",
"//third_party/wayland-protocols:linux_dmabuf_protocol",
"//third_party/wayland-protocols:linux_explicit_synchronization_protocol",
"//third_party/wayland-protocols:presentation_time_protocol",
"//third_party/wayland-protocols:text_input_protocol",
"//third_party/wayland-protocols:wayland_drm_protocol",
......
......@@ -8,6 +8,7 @@
#include <gtk-primary-selection-client-protocol.h>
#include <keyboard-extension-unstable-v1-client-protocol.h>
#include <linux-dmabuf-unstable-v1-client-protocol.h>
#include <linux-explicit-synchronization-unstable-v1-client-protocol.h>
#include <presentation-time-client-protocol.h>
#include <text-input-unstable-v1-client-protocol.h>
#include <wayland-client.h>
......@@ -215,6 +216,25 @@ const wl_interface* ObjectTraits<zwp_linux_dmabuf_v1>::interface =
void (*ObjectTraits<zwp_linux_dmabuf_v1>::deleter)(zwp_linux_dmabuf_v1*) =
&zwp_linux_dmabuf_v1_destroy;
const wl_interface* ObjectTraits<zwp_linux_buffer_release_v1>::interface =
&zwp_linux_buffer_release_v1_interface;
void (*ObjectTraits<zwp_linux_buffer_release_v1>::deleter)(
zwp_linux_buffer_release_v1*) = &zwp_linux_buffer_release_v1_destroy;
const wl_interface*
ObjectTraits<zwp_linux_explicit_synchronization_v1>::interface =
&zwp_linux_explicit_synchronization_v1_interface;
void (*ObjectTraits<zwp_linux_explicit_synchronization_v1>::deleter)(
zwp_linux_explicit_synchronization_v1*) =
&zwp_linux_explicit_synchronization_v1_destroy;
const wl_interface*
ObjectTraits<zwp_linux_surface_synchronization_v1>::interface =
&zwp_linux_surface_synchronization_v1_interface;
void (*ObjectTraits<zwp_linux_surface_synchronization_v1>::deleter)(
zwp_linux_surface_synchronization_v1*) =
&zwp_linux_surface_synchronization_v1_destroy;
const wl_interface* ObjectTraits<zxdg_shell_v6>::interface =
&zxdg_shell_v6_interface;
void (*ObjectTraits<zxdg_shell_v6>::deleter)(zxdg_shell_v6*) =
......
......@@ -44,6 +44,9 @@ struct zaura_surface;
struct zcr_keyboard_extension_v1;
struct zcr_extended_keyboard_v1;
struct zwp_linux_dmabuf_v1;
struct zwp_linux_buffer_release_v1;
struct zwp_linux_explicit_synchronization_v1;
struct zwp_linux_surface_synchronization_v1;
struct zxdg_shell_v6;
struct zxdg_surface_v6;
struct zxdg_toplevel_v6;
......@@ -279,6 +282,24 @@ struct ObjectTraits<zwp_linux_dmabuf_v1> {
static void (*deleter)(zwp_linux_dmabuf_v1*);
};
template <>
struct ObjectTraits<zwp_linux_buffer_release_v1> {
static const wl_interface* interface;
static void (*deleter)(zwp_linux_buffer_release_v1*);
};
template <>
struct ObjectTraits<zwp_linux_explicit_synchronization_v1> {
static const wl_interface* interface;
static void (*deleter)(zwp_linux_explicit_synchronization_v1*);
};
template <>
struct ObjectTraits<zwp_linux_surface_synchronization_v1> {
static const wl_interface* interface;
static void (*deleter)(zwp_linux_surface_synchronization_v1*);
};
template <>
struct ObjectTraits<zxdg_shell_v6> {
static const wl_interface* interface;
......
......@@ -52,6 +52,7 @@ constexpr uint32_t kMaxXdgShellVersion = 1;
constexpr uint32_t kMaxDeviceManagerVersion = 3;
constexpr uint32_t kMaxWpPresentationVersion = 1;
constexpr uint32_t kMaxTextInputManagerVersion = 1;
constexpr uint32_t kMaxExplicitSyncVersion = 2;
constexpr uint32_t kMinAuraShellVersion = 10;
constexpr uint32_t kMinWlDrmVersion = 2;
constexpr uint32_t kMinWlOutputVersion = 2;
......@@ -331,6 +332,12 @@ void WaylandConnection::Global(void* data,
connection->primary_selection_device_manager_ =
std::make_unique<GtkPrimarySelectionDeviceManager>(manager.release(),
connection);
} else if (!connection->linux_explicit_synchronization_ &&
(strcmp(interface, "zwp_linux_explicit_synchronization_v1") ==
0)) {
connection->linux_explicit_synchronization_ =
wl::Bind<zwp_linux_explicit_synchronization_v1>(
registry, name, std::min(version, kMaxExplicitSyncVersion));
} else if (!connection->zwp_dmabuf_ &&
(strcmp(interface, "zwp_linux_dmabuf_v1") == 0)) {
wl::Object<zwp_linux_dmabuf_v1> zwp_linux_dmabuf =
......
......@@ -60,6 +60,10 @@ class WaylandConnection {
zwp_text_input_manager_v1* text_input_manager_v1() const {
return text_input_manager_v1_.get();
}
zwp_linux_explicit_synchronization_v1* linux_explicit_synchronization_v1()
const {
return linux_explicit_synchronization_.get();
}
void set_serial(uint32_t serial) { serial_ = serial; }
uint32_t serial() const { return serial_; }
......@@ -167,6 +171,8 @@ class WaylandConnection {
wl::Object<zcr_keyboard_extension_v1> keyboard_extension_v1_;
wl::Object<zwp_text_input_manager_v1> text_input_manager_v1_;
wl::Object<zaura_shell> aura_shell_;
wl::Object<zwp_linux_explicit_synchronization_v1>
linux_explicit_synchronization_;
// Event source instance. Must be declared before input objects so it
// outlives them so thus being able to properly handle their destruction.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment