| 
									
										
										
										
											2018-07-13 08:40:56 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * This an unstable interface of wlroots. No guarantees are made regarding the | 
					
						
							|  |  |  |  * future consistency of this API. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef WLR_USE_UNSTABLE
 | 
					
						
							|  |  |  | #error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-23 10:26:01 +02:00
										 |  |  | #ifndef WLR_BACKEND_H
 | 
					
						
							|  |  |  | #define WLR_BACKEND_H
 | 
					
						
							| 
									
										
										
										
											2017-04-25 15:06:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-27 11:53:54 +03:00
										 |  |  | #include <wayland-server-core.h>
 | 
					
						
							| 
									
										
										
										
											2022-09-14 10:43:27 +02:00
										 |  |  | #include <wlr/types/wlr_output.h>
 | 
					
						
							| 
									
										
										
										
											2017-05-07 10:00:23 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-23 14:32:06 +01:00
										 |  |  | struct wlr_session; | 
					
						
							| 
									
										
										
										
											2017-05-07 10:00:23 -04:00
										 |  |  | struct wlr_backend_impl; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-14 10:43:27 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Per-output state for wlr_backend_test() and wlr_backend_commit(). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct wlr_backend_output_state { | 
					
						
							|  |  |  | 	struct wlr_output *output; | 
					
						
							|  |  |  | 	struct wlr_output_state base; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-24 18:46:59 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * A backend provides a set of input and output devices. | 
					
						
							| 
									
										
										
										
											2024-12-25 18:44:17 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Buffer capabilities and features can change over the lifetime of a backend, | 
					
						
							|  |  |  |  * for instance when a child backend is added to a multi-backend. | 
					
						
							| 
									
										
										
										
											2022-05-24 18:46:59 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-05-07 10:00:23 -04:00
										 |  |  | struct wlr_backend { | 
					
						
							|  |  |  | 	const struct wlr_backend_impl *impl; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-29 19:18:18 +01:00
										 |  |  | 	// Bitfield of supported buffer capabilities (see enum wlr_buffer_cap)
 | 
					
						
							|  |  |  | 	uint32_t buffer_caps; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-10 16:23:49 +02:00
										 |  |  | 	struct { | 
					
						
							|  |  |  | 		// Whether wait/signal timelines are supported in output commits
 | 
					
						
							|  |  |  | 		bool timeline; | 
					
						
							|  |  |  | 	} features; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 10:00:23 -04:00
										 |  |  | 	struct { | 
					
						
							| 
									
										
										
										
											2022-05-24 18:46:59 +02:00
										 |  |  | 		/** Raised when destroyed */ | 
					
						
							| 
									
										
										
										
											2017-12-19 18:14:47 -05:00
										 |  |  | 		struct wl_signal destroy; | 
					
						
							| 
									
										
										
										
											2022-05-24 18:46:59 +02:00
										 |  |  | 		/** Raised when new inputs are added, passed the struct wlr_input_device */ | 
					
						
							| 
									
										
										
										
											2018-02-12 10:36:43 +01:00
										 |  |  | 		struct wl_signal new_input; | 
					
						
							| 
									
										
										
										
											2022-05-24 18:46:59 +02:00
										 |  |  | 		/** Raised when new outputs are added, passed the struct wlr_output */ | 
					
						
							| 
									
										
										
										
											2018-02-12 10:36:43 +01:00
										 |  |  | 		struct wl_signal new_output; | 
					
						
							| 
									
										
										
										
											2017-05-07 10:00:23 -04:00
										 |  |  | 	} events; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Automatically initializes the most suitable backend given the environment. | 
					
						
							| 
									
										
										
										
											2022-05-24 18:46:59 +02:00
										 |  |  |  * Will always return a multi-backend. The backend is created but not started. | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  |  * Returns NULL on failure. | 
					
						
							| 
									
										
										
										
											2022-11-03 18:25:05 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * If session_ptr is not NULL, it's populated with the session which has been | 
					
						
							|  |  |  |  * created with the backend, if any. | 
					
						
							| 
									
										
										
										
											2023-11-23 14:53:06 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * The multi-backend will be destroyed if one of the primary underlying | 
					
						
							|  |  |  |  * backends is destroyed (e.g. if the primary DRM device is unplugged). | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2023-11-23 14:17:39 +01:00
										 |  |  | struct wlr_backend *wlr_backend_autocreate(struct wl_event_loop *loop, | 
					
						
							| 
									
										
										
										
											2022-11-03 18:25:05 +01:00
										 |  |  | 	struct wlr_session **session_ptr); | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Start the backend. This may signal new_input or new_output immediately, but | 
					
						
							| 
									
										
										
										
											2025-01-11 22:40:21 +03:00
										 |  |  |  * may also wait until the event loop is started. Returns false on failure. | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-08-13 09:59:14 -04:00
										 |  |  | bool wlr_backend_start(struct wlr_backend *backend); | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Destroy the backend and clean up all of its resources. Normally called | 
					
						
							| 
									
										
										
										
											2025-01-11 22:40:21 +03:00
										 |  |  |  * automatically when the event loop is destroyed. | 
					
						
							| 
									
										
										
										
											2018-03-19 15:46:28 -04:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-05-07 10:00:23 -04:00
										 |  |  | void wlr_backend_destroy(struct wlr_backend *backend); | 
					
						
							| 
									
										
										
										
											2021-04-12 10:39:51 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Returns the DRM node file descriptor used by the backend's underlying | 
					
						
							|  |  |  |  * platform. Can be used by consumers for additional rendering operations. | 
					
						
							|  |  |  |  * The consumer must not close the file descriptor since the backend continues | 
					
						
							|  |  |  |  * to have ownership of it. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int wlr_backend_get_drm_fd(struct wlr_backend *backend); | 
					
						
							| 
									
										
										
										
											2017-04-25 15:06:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-14 10:43:27 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Atomically test a new configuration for multiple outputs. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Some backends (e.g. DRM) have global backend-wide limitations. This function | 
					
						
							|  |  |  |  * can be used to check whether changes across multiple outputs are supported by | 
					
						
							|  |  |  |  * the backend. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool wlr_backend_test(struct wlr_backend *backend, | 
					
						
							|  |  |  | 	const struct wlr_backend_output_state *states, size_t states_len); | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * Atomically apply a new configuration for multiple outputs. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * There is no guarantee that the changes will be applied atomically. Users | 
					
						
							|  |  |  |  * should call wlr_backend_test() first to check that the new state is supported | 
					
						
							|  |  |  |  * by the backend. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool wlr_backend_commit(struct wlr_backend *backend, | 
					
						
							|  |  |  | 	const struct wlr_backend_output_state *states, size_t states_len); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-25 15:06:58 -04:00
										 |  |  | #endif
 |