mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-12-22 09:59:48 +01:00
backend/drm: Track page flips in list
This commit is contained in:
parent
3b53d1cbf1
commit
3aed24b8d4
3 changed files with 16 additions and 2 deletions
|
@ -207,6 +207,7 @@ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display,
|
|||
drm->session = session;
|
||||
wl_list_init(&drm->fbs);
|
||||
wl_list_init(&drm->connectors);
|
||||
wl_list_init(&drm->page_flips);
|
||||
|
||||
drm->dev = dev;
|
||||
drm->fd = dev->fd;
|
||||
|
|
|
@ -420,6 +420,15 @@ static void drm_connector_set_pending_page_flip(struct wlr_drm_connector *conn,
|
|||
conn->pending_page_flip = page_flip;
|
||||
}
|
||||
|
||||
static void page_flip_destroy(struct wlr_drm_page_flip *page_flip) {
|
||||
if (!page_flip) {
|
||||
return;
|
||||
}
|
||||
|
||||
wl_list_remove(&page_flip->link);
|
||||
free(page_flip);
|
||||
}
|
||||
|
||||
static bool drm_crtc_commit(struct wlr_drm_connector *conn,
|
||||
const struct wlr_drm_connector_state *state,
|
||||
uint32_t flags, bool test_only) {
|
||||
|
@ -433,6 +442,7 @@ static bool drm_crtc_commit(struct wlr_drm_connector *conn,
|
|||
return false;
|
||||
}
|
||||
page_flip->conn = conn;
|
||||
wl_list_insert(&conn->backend->page_flips, &page_flip->link);
|
||||
}
|
||||
|
||||
struct wlr_drm_backend *drm = conn->backend;
|
||||
|
@ -466,7 +476,7 @@ static bool drm_crtc_commit(struct wlr_drm_connector *conn,
|
|||
drm_fb_clear(&layer->pending_fb);
|
||||
}
|
||||
|
||||
free(page_flip);
|
||||
page_flip_destroy(page_flip);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
@ -1686,7 +1696,7 @@ static void handle_page_flip(int fd, unsigned seq,
|
|||
if (conn != NULL) {
|
||||
conn->pending_page_flip = NULL;
|
||||
}
|
||||
free(page_flip);
|
||||
page_flip_destroy(page_flip);
|
||||
|
||||
if (conn == NULL) {
|
||||
return;
|
||||
|
|
|
@ -104,6 +104,8 @@ struct wlr_drm_backend {
|
|||
struct wl_list fbs; // wlr_drm_fb.link
|
||||
struct wl_list connectors; // wlr_drm_connector.link
|
||||
|
||||
struct wl_list page_flips; // wlr_drm_page_flip.link
|
||||
|
||||
/* Only initialized on multi-GPU setups */
|
||||
struct wlr_drm_renderer mgpu_renderer;
|
||||
|
||||
|
@ -142,6 +144,7 @@ struct wlr_drm_connector_state {
|
|||
* that it's been superseded.
|
||||
*/
|
||||
struct wlr_drm_page_flip {
|
||||
struct wl_list link; // wlr_drm_connector.page_flips
|
||||
struct wlr_drm_connector *conn;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue