diff options
author | Aaron Plattner | 2016-03-23 15:26:21 -0700 |
---|---|---|
committer | Aaron Plattner | 2016-03-23 15:39:38 -0700 |
commit | 57673850b273dcf3db6c85abe9bc1d45d090eaf4 (patch) | |
tree | d2c8d2c105402dc8c1508a8a902658207d9e2e0c /0005-compositor-drm-Gracefully-handle-vblank-and-flip-inv.patch | |
parent | fe7908b6f16617ee43b0ea601c738ff4ed760b7a (diff) | |
download | aur-57673850b273dcf3db6c85abe9bc1d45d090eaf4.tar.gz |
Apply Miguel's patches to add support for EGLStreams
See https://lists.freedesktop.org/archives/wayland-devel/2016-March/027547.html
Use
weston-launch -- --use-egldevice
to start.
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Diffstat (limited to '0005-compositor-drm-Gracefully-handle-vblank-and-flip-inv.patch')
-rw-r--r-- | 0005-compositor-drm-Gracefully-handle-vblank-and-flip-inv.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/0005-compositor-drm-Gracefully-handle-vblank-and-flip-inv.patch b/0005-compositor-drm-Gracefully-handle-vblank-and-flip-inv.patch new file mode 100644 index 000000000000..3c98a74abc15 --- /dev/null +++ b/0005-compositor-drm-Gracefully-handle-vblank-and-flip-inv.patch @@ -0,0 +1,82 @@ +From 851f5b55210835e6e7c5699d87e18e09cbbe69e3 Mon Sep 17 00:00:00 2001 +From: "Miguel A. Vico" <mvicomoya@nvidia.com> +Date: Mon, 21 Mar 2016 17:37:35 +0100 +Subject: [PATCH 5/7] compositor-drm: Gracefully handle vblank and flip invalid + timestamps +X-NVConfidentiality: public + +Instant query for vblank timestamp may always fail, resulting in +never scheduling a full repaint in drm_output_start_repaint_loop(). + +Additionally, timestamp provided in page_flip_handler() may also be +invalid. + +This change makes both drm_output_start_repaint_loop() and +page_flip_handler() to schedule a full repaint in any of the +situations above. + +Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> +Reviewed-by: Andy Ritger <aritger@nvidia.com> +--- + src/compositor-drm.c | 24 +++++++++++++++++++++--- + 1 file changed, 21 insertions(+), 3 deletions(-) + +diff --git a/src/compositor-drm.c b/src/compositor-drm.c +index ded15f83c3e6..a6d4573a922f 100644 +--- a/src/compositor-drm.c ++++ b/src/compositor-drm.c +@@ -1,6 +1,7 @@ + /* + * Copyright © 2008-2011 Kristian Høgsberg + * Copyright © 2011 Intel Corporation ++ * Copyright © 2016 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the +@@ -761,8 +762,16 @@ drm_output_start_repaint_loop(struct weston_output *output_base) + vbl.request.type |= drm_waitvblank_pipe(output); + ret = drmWaitVBlank(backend->drm.fd, &vbl); + +- /* Error ret or zero timestamp means failure to get valid timestamp */ +- if ((ret == 0) && (vbl.reply.tval_sec > 0 || vbl.reply.tval_usec > 0)) { ++ if (ret) { ++ /* Immediate query failed. It may always fail so we'll never get a valid ++ * timestamp to update msc and call into finish frame. Hence, jump to ++ * finish frame here. ++ */ ++ goto finish_frame; ++ } ++ ++ /* Zero timestamp means failure to get valid timestamp */ ++ if (vbl.reply.tval_sec > 0 || vbl.reply.tval_usec > 0) { + ts.tv_sec = vbl.reply.tval_sec; + ts.tv_nsec = vbl.reply.tval_usec * 1000; + +@@ -783,7 +792,7 @@ drm_output_start_repaint_loop(struct weston_output *output_base) + } + } + +- /* Immediate query didn't provide valid timestamp. ++ /* Immediate query succeeded, but didn't provide valid timestamp. + * Use pageflip fallback. + */ + fb_id = output->current->fb_id; +@@ -869,6 +878,15 @@ page_flip_handler(int fd, unsigned int frame, + else if (!output->vblank_pending) { + ts.tv_sec = sec; + ts.tv_nsec = usec * 1000; ++ ++ /* Zero timestamp means failure to get valid timestamp, so immediately ++ * finish frame */ ++ if (ts.tv_sec == 0 && ts.tv_nsec == 0) { ++ weston_compositor_read_presentation_clock(output->base.compositor, ++ &ts); ++ flags = PRESENTATION_FEEDBACK_INVALID; ++ } ++ + weston_output_finish_frame(&output->base, &ts, flags); + + /* We can't call this from frame_notify, because the output's +-- +2.7.4 + |