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