aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-02-06 17:54:13 +0100
committerSimon Ser <contact@emersion.fr>2023-02-20 18:38:57 +0100
commite1335a792aff0dfbe3d95389e3a576297906b700 (patch)
tree5e62c2f38d0047fa5adfca54e69fc02bc6885ea6
parent4d6fbb2289ae5a6fcf2061a00ff49a9850c5198f (diff)
output-layer: add feedback event
-rw-r--r--include/wlr/types/wlr_output_layer.h17
-rw-r--r--types/wlr_output_layer.c1
2 files changed, 18 insertions, 0 deletions
diff --git a/include/wlr/types/wlr_output_layer.h b/include/wlr/types/wlr_output_layer.h
index e9b899a9..9f787e2c 100644
--- a/include/wlr/types/wlr_output_layer.h
+++ b/include/wlr/types/wlr_output_layer.h
@@ -9,6 +9,7 @@
#ifndef WLR_TYPES_WLR_OUTPUT_LAYER_H
#define WLR_TYPES_WLR_OUTPUT_LAYER_H
+#include <wlr/render/drm_format_set.h>
#include <wlr/types/wlr_output.h>
#include <wlr/util/addon.h>
@@ -36,6 +37,10 @@ struct wlr_output_layer {
struct wl_list link; // wlr_output.layers
struct wlr_addon_set addons;
+ struct {
+ struct wl_signal feedback; // struct wlr_output_layer_feedback_event
+ } events;
+
void *data;
};
@@ -57,6 +62,18 @@ struct wlr_output_layer_state {
};
/**
+ * Feedback for an output layer.
+ *
+ * After an output commit, if the backend is not able to display a layer, it
+ * can send feedback events. These events can be used to re-allocate the
+ * layer's buffers so that they have a higher chance to get displayed.
+ */
+struct wlr_output_layer_feedback_event {
+ dev_t target_device;
+ const struct wlr_drm_format_set *formats;
+};
+
+/**
* Create a new output layer.
*/
struct wlr_output_layer *wlr_output_layer_create(struct wlr_output *output);
diff --git a/types/wlr_output_layer.c b/types/wlr_output_layer.c
index f50e6854..7624846f 100644
--- a/types/wlr_output_layer.c
+++ b/types/wlr_output_layer.c
@@ -9,6 +9,7 @@ struct wlr_output_layer *wlr_output_layer_create(struct wlr_output *output) {
wl_list_insert(&output->layers, &layer->link);
wlr_addon_set_init(&layer->addons);
+ wl_signal_init(&layer->events.feedback);
return layer;
}