1946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/**************************************************************************
2edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul *
3edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul * Copyright 2009 VMware, Inc.
4946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * All Rights Reserved.
5edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul *
6946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
7946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * copy of this software and associated documentation files (the
8946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * "Software"), to deal in the Software without restriction, including
9946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * without limitation the rights to use, copy, modify, merge, publish,
10946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * distribute, sub license, and/or sell copies of the Software, and to
11946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * permit persons to whom the Software is furnished to do so, subject to
12946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * the following conditions:
13edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul *
14946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * The above copyright notice and this permission notice (including the
15946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * next paragraph) shall be included in all copies or substantial portions
16946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * of the Software.
17edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul *
18946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul *
26946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca **************************************************************************/
27946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca
28946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca
29edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul#ifndef LP_FENCE_H
30edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul#define LP_FENCE_H
31946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca
32946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca
33a1af8eec66c5f7ec421e8011b41c1a7c36319f9fJosé Fonseca#include "os/os_thread.h"
34a1af8eec66c5f7ec421e8011b41c1a7c36319f9fJosé Fonseca#include "pipe/p_state.h"
353bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell#include "util/u_inlines.h"
36946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca
37946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca
38edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paulstruct pipe_screen;
39edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
40edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
41edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paulstruct lp_fence
42edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul{
43edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul   struct pipe_reference reference;
44b6e03eafe3311142445ca42c1574d3f6998eecc3Keith Whitwell   unsigned id;
45edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
46edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul   pipe_mutex mutex;
47edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul   pipe_condvar signalled;
48edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
495a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwell   boolean issued;
50edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul   unsigned rank;
51edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul   unsigned count;
52edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul};
53edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
54edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
55edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paulstruct lp_fence *
56edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paullp_fence_create(unsigned rank);
57edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
58edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
59edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paulvoid
60331729c8c877fd8ddde0a83cbe0fcdd5df4b1f1fBrian Paullp_fence_signal(struct lp_fence *fence);
61331729c8c877fd8ddde0a83cbe0fcdd5df4b1f1fBrian Paul
625a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwellboolean
635a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwelllp_fence_signalled(struct lp_fence *fence);
645a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwell
655a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwellvoid
665a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwelllp_fence_wait(struct lp_fence *fence);
67331729c8c877fd8ddde0a83cbe0fcdd5df4b1f1fBrian Paul
68331729c8c877fd8ddde0a83cbe0fcdd5df4b1f1fBrian Paulvoid
69edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paulllvmpipe_init_screen_fence_funcs(struct pipe_screen *screen);
70edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
71edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul
723bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwellvoid
733bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwelllp_fence_destroy(struct lp_fence *fence);
743bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell
753bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwellstatic INLINE void
763bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwelllp_fence_reference(struct lp_fence **ptr,
773bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell                   struct lp_fence *f)
783bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell{
793bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell   struct lp_fence *old = *ptr;
803bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell
813bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell   if (pipe_reference(&old->reference, &f->reference)) {
823bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell      lp_fence_destroy(old);
833bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell   }
843bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell
853bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell   *ptr = f;
863bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell}
873bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell
885a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwellstatic INLINE boolean
895a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwelllp_fence_issued(const struct lp_fence *fence)
905a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwell{
915a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwell   return fence->issued;
925a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwell}
935a45e53df4419fde1fe7696f3a9459893363f7c5Keith Whitwell
943bd9aedbac79eec16bfe6f5fc6f6a021eebe769aKeith Whitwell
95edbaca6fd14dace44637d994bbddad3cb0a5fafeBrian Paul#endif /* LP_FENCE_H */
96