aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/present/present_fence.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-11-04 12:08:23 +0100
committermarha <marha@users.sourceforge.net>2013-11-04 12:08:23 +0100
commit31fd4c5654595a4763e492e4ec26f66ca3a8a405 (patch)
tree8d6b249c93725e838676e26af171a167f6f20903 /xorg-server/present/present_fence.c
parente4ef724e06621be9325fc41ed886fd404467fdc0 (diff)
downloadvcxsrv-31fd4c5654595a4763e492e4ec26f66ca3a8a405.tar.gz
vcxsrv-31fd4c5654595a4763e492e4ec26f66ca3a8a405.tar.bz2
vcxsrv-31fd4c5654595a4763e492e4ec26f66ca3a8a405.zip
libxtrans fontconfig mesa xserver pixman xkbcomp git update 4 nov 2013
xserver commit 33c85beed521c9db140cadd8c5aa9992398ee1fe xkbcomp commit e3e6e938535532bfad175c1635256ab7fb3ac943 pixman commit 8cbc7da4e525c96a8e089e4c1baee75dc8315218 libxtrans commit 1fb0fd555a16dd8fce4abc6d3fd22b315f46762a fontconfig commit 767108aa1327cf0156dfc6f024dbc8fb783ae067 mesa commit 2f896627175384fd5943f21804700a155ba4e8a0
Diffstat (limited to 'xorg-server/present/present_fence.c')
-rw-r--r--xorg-server/present/present_fence.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/xorg-server/present/present_fence.c b/xorg-server/present/present_fence.c
new file mode 100644
index 000000000..db5efcaad
--- /dev/null
+++ b/xorg-server/present/present_fence.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright © 2013 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include "present_priv.h"
+#include <gcstruct.h>
+#include <misync.h>
+#include <misyncstr.h>
+
+/*
+ * Wraps SyncFence objects so we can add a SyncTrigger to find out
+ * when the SyncFence gets destroyed and clean up appropriately
+ */
+
+struct present_fence {
+ SyncTrigger trigger;
+ SyncFence *fence;
+};
+
+/*
+ * SyncTrigger callbacks
+ */
+static Bool
+present_fence_sync_check_trigger(SyncTrigger *trigger, XSyncValue oldval)
+{
+ return FALSE;
+}
+
+static void
+present_fence_sync_trigger_fired(SyncTrigger *trigger)
+{
+}
+
+static void
+present_fence_sync_counter_destroyed(SyncTrigger *trigger)
+{
+ struct present_fence *present_fence = container_of(trigger, struct present_fence, trigger);
+
+ present_fence->fence = NULL;
+}
+
+struct present_fence *
+present_fence_create(SyncFence *fence)
+{
+ struct present_fence *present_fence;
+
+ present_fence = calloc (1, sizeof (struct present_fence));
+ if (!present_fence)
+ return NULL;
+
+ present_fence->fence = fence;
+ present_fence->trigger.pSync = (SyncObject *) fence;
+ present_fence->trigger.CheckTrigger = present_fence_sync_check_trigger;
+ present_fence->trigger.TriggerFired = present_fence_sync_trigger_fired;
+ present_fence->trigger.CounterDestroyed = present_fence_sync_counter_destroyed;
+
+ if (SyncAddTriggerToSyncObject(&present_fence->trigger) != Success) {
+ free (present_fence);
+ return NULL;
+ }
+ return present_fence;
+}
+
+void
+present_fence_destroy(struct present_fence *present_fence)
+{
+ if (present_fence) {
+ if (present_fence->fence)
+ SyncDeleteTriggerFromSyncObject(&present_fence->trigger);
+ free(present_fence);
+ }
+}
+
+void
+present_fence_set_triggered(struct present_fence *present_fence)
+{
+ if (present_fence)
+ if (present_fence->fence)
+ (*present_fence->fence->funcs.SetTriggered) (present_fence->fence);
+}
+
+XID
+present_fence_id(struct present_fence *present_fence)
+{
+ if (!present_fence)
+ return None;
+ if (!present_fence->fence)
+ return None;
+ return present_fence->fence->sync.id;
+}