aboutsummaryrefslogtreecommitdiff
path: root/backend/noop
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2019-07-18 21:38:12 +0300
committerDrew DeVault <sir@cmpwn.com>2019-08-02 10:01:29 -0400
commitee5f98ad49fed0439f3313ec685307831d1d1d05 (patch)
tree13df7c4d845fd586e62e39a47e0af6bf60376a0d /backend/noop
parentd20aee6c9de12c8949b4ce7775b53dbc5f3896a6 (diff)
output: atomic mode, enabled, scale and transform
This commit makes more output properties (mode, enabled, scale and transform) atomic. This means that they are double-buffered and only applied on commit. Compositors now need to call wlr_output_commit after setting any of those properties. Internally, backends still apply properties sequentially. The behaviour should be exactly the same as before. Future commits will update some backends to take advantage of the atomic interface. Some backends are non-atomic by design, e.g. the X11 backend or the legacy DRM backend. Updates: https://github.com/swaywm/wlroots/issues/1640
Diffstat (limited to 'backend/noop')
-rw-r--r--backend/noop/output.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/backend/noop/output.c b/backend/noop/output.c
index 1022ac6f..15c84941 100644
--- a/backend/noop/output.c
+++ b/backend/noop/output.c
@@ -12,19 +12,30 @@ static struct wlr_noop_output *noop_output_from_output(
return (struct wlr_noop_output *)wlr_output;
}
-static bool output_set_custom_mode(struct wlr_output *wlr_output,
- int32_t width, int32_t height, int32_t refresh) {
- wlr_output_update_custom_mode(wlr_output, width, height, refresh);
- return true;
-}
-
static bool output_attach_render(struct wlr_output *wlr_output,
int *buffer_age) {
return false;
}
static bool output_commit(struct wlr_output *wlr_output) {
- return false;
+ if (wlr_output->pending.committed & WLR_OUTPUT_STATE_ENABLED) {
+ wlr_log(WLR_DEBUG, "Cannot disable a noop output");
+ return false;
+ }
+
+ if (wlr_output->pending.committed & WLR_OUTPUT_STATE_MODE) {
+ assert(wlr_output->pending.mode_type == WLR_OUTPUT_STATE_MODE_CUSTOM);
+ wlr_output_update_custom_mode(wlr_output,
+ wlr_output->pending.custom_mode.width,
+ wlr_output->pending.custom_mode.height,
+ wlr_output->pending.custom_mode.refresh);
+ }
+
+ if (wlr_output->pending.committed & WLR_OUTPUT_STATE_BUFFER) {
+ return false;
+ }
+
+ return true;
}
static void output_destroy(struct wlr_output *wlr_output) {
@@ -37,7 +48,6 @@ static void output_destroy(struct wlr_output *wlr_output) {
}
static const struct wlr_output_impl output_impl = {
- .set_custom_mode = output_set_custom_mode,
.destroy = output_destroy,
.attach_render = output_attach_render,
.commit = output_commit,