pb_buffer_fenced.h revision a6d866f72c88d48d2bcfb3e3c882fdb639b5a8ce
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/************************************************************************** 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * All Rights Reserved. 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * copy of this software and associated documentation files (the 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * "Software"), to deal in the Software without restriction, including 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * without limitation the rights to use, copy, modify, merge, publish, 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * distribute, sub license, and/or sell copies of the Software, and to 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * permit persons to whom the Software is furnished to do so, subject to 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * the following conditions: 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The above copyright notice and this permission notice (including the 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * next paragraph) shall be included in all copies or substantial portions 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * of the Software. 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) **************************************************************************/ 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * \file 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Buffer fencing. 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * "Fenced buffers" is actually a misnomer. They should be referred as 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * "fenceable buffers", i.e, buffers that can be fenced, but I couldn't find 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * the word "fenceable" in the dictionary. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A "fenced buffer" is a decorator around a normal buffer, which adds two 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * special properties: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * - the ability for the destruction to be delayed by a fence; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * - reference counting. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Usually DMA buffers have a life-time that will extend the life-time of its 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * handle. The end-of-life is dictated by the fence signalling. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Between the handle's destruction, and the fence signalling, the buffer is 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * stored in a fenced buffer list. 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * \author Jose Fonseca <jrfonseca@tungstengraphics.com> 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef PB_BUFFER_FENCED_H_ 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PB_BUFFER_FENCED_H_ 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "pipe/p_debug.h" 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifdef __cplusplus 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern "C" { 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct pipe_winsys; 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct pipe_buffer; 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct pipe_fence_handle; 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * List of buffers which are awaiting fence signalling. 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct fenced_buffer_list; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Create a fenced buffer list. 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * See also fenced_bufmgr_create for a more convenient way to use this. 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct fenced_buffer_list * 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)fenced_buffer_list_create(struct pipe_winsys *winsys); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Walk the fenced buffer list to check and free signalled buffers. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list, 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int wait); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Wrap a buffer in a fenced buffer. 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * NOTE: this will not increase the buffer reference count. 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct pb_buffer * 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)fenced_buffer_create(struct fenced_buffer_list *fenced, 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) struct pb_buffer *buffer); 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifdef __cplusplus 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif /*PB_BUFFER_FENCED_H_*/ 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)