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)