summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/oml_sync.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2019-06-30 00:28:46 +0200
committerJames Ross-Gowan <rossy@jrg.systems>2019-09-08 23:23:43 +1000
commit8d7960f6efff3d5c1d9c82ea9bd16f016e71ea24 (patch)
tree94dfa38a861699897639ddb86c56d16ad7da1d80 /video/out/opengl/oml_sync.h
parent4b25ec3a9d43638812adab38fe6177a57f81785a (diff)
downloadmpv-8d7960f6efff3d5c1d9c82ea9bd16f016e71ea24.tar.bz2
mpv-8d7960f6efff3d5c1d9c82ea9bd16f016e71ea24.tar.xz
vo_gpu: glx: move OML sync code to an independent file
So the next commit can make EGL use it. EGL has a quite similar function, that practically works the same. Although it's relatively trivial, it's still tricky, and probably shouldn't end up as duplicated code. There are no functional changes, except initialization, and how failure of the glXGetSyncValues call is handled. Also, some comments mention the EGL extension. Note that there's no intention for this code to handle anything else than the very specific OML sync extension (and its EGL equivalent). This is just too weirdly specific to the weird idiosyncrasies of the extension, and it makes no sense to extend it to handle anything else. (Such as Wayland or DXGI presentation feedback.)
Diffstat (limited to 'video/out/opengl/oml_sync.h')
-rw-r--r--video/out/opengl/oml_sync.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/video/out/opengl/oml_sync.h b/video/out/opengl/oml_sync.h
new file mode 100644
index 0000000000..e27ccb943f
--- /dev/null
+++ b/video/out/opengl/oml_sync.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdint.h>
+
+// Must be initialized to {0} by user.
+struct oml_sync {
+ bool state_ok;
+ int64_t last_ust;
+ int64_t last_msc;
+ int64_t last_sbc;
+ int64_t last_sbc_mp_time;
+ int64_t user_sbc;
+ int64_t vsync_duration;
+ int64_t last_skipped_vsyncs;
+ int64_t last_queue_display_time;
+};
+
+struct vo_vsync_info;
+
+// This must be called on every SwapBuffer call. Pass the ust/msc/sbc values
+// returned by a successful GetSyncValues call. Pass -1 for all these 3 values
+// if GetSyncValues returned failure (but note that you need to set them to -1
+// manually).
+void oml_sync_swap(struct oml_sync *oml, int64_t ust, int64_t msc, int64_t sbc);
+
+// Can be called any time; returns state determined by last oml_sync_swap() call.
+void oml_sync_get_info(struct oml_sync *oml, struct vo_vsync_info *info);