13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2009 VMware, Inc. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * All Rights Reserved. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions: 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software. 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 29760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#ifndef LP_FENCE_H 30760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define LP_FENCE_H 31760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 32760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 33760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "os/os_thread.h" 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "pipe/p_state.h" 35760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "util/u_inlines.h" 36760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 38760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstruct pipe_screen; 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 40760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 41760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstruct lp_fence 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 43760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct pipe_reference reference; 44760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned id; 45760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 46760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org pipe_mutex mutex; 47760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org pipe_condvar signalled; 48760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 49760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org boolean issued; 50760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned rank; 51760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org unsigned count; 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 55760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstruct lp_fence * 56760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_create(unsigned rank); 57760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 59760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgvoid 60760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_signal(struct lp_fence *fence); 61760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 62760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgboolean 63760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_signalled(struct lp_fence *fence); 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 66760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_wait(struct lp_fence *fence); 67760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 68760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgvoid 69760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgllvmpipe_init_screen_fence_funcs(struct pipe_screen *screen); 70760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 71760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 72760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgvoid 73760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_destroy(struct lp_fence *fence); 74760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 75760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE void 76760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_reference(struct lp_fence **ptr, 77760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct lp_fence *f) 78760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 79760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct lp_fence *old = *ptr; 80760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 81760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (pipe_reference(&old->reference, &f->reference)) { 82760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org lp_fence_destroy(old); 83760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org } 84760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 85760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org *ptr = f; 86760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 87760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 88760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE boolean 89760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orglp_fence_issued(const struct lp_fence *fence) 90760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 91760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return fence->issued; 92760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 95760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#endif /* LP_FENCE_H */ 96