1b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen/**************************************************************************
2b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen *
3b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * Copyright 2010 Younes Manton.
4b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * All Rights Reserved.
5b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen *
6b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * Permission is hereby granted, free of charge, to any person obtaining a
7b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * copy of this software and associated documentation files (the
8b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * "Software"), to deal in the Software without restriction, including
9b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * without limitation the rights to use, copy, modify, merge, publish,
10b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * distribute, sub license, and/or sell copies of the Software, and to
11b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * permit persons to whom the Software is furnished to do so, subject to
12b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * the following conditions:
13b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen *
14b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * The above copyright notice and this permission notice (including the
15b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * next paragraph) shall be included in all copies or substantial portions
16b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * of the Software.
17b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen *
18b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen *
26b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen **************************************************************************/
27b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen
288bc7ccede1e126329c371e22b6d462edd21720d0Kai Wasserbäch#include "util/u_handle_table.h"
298bc7ccede1e126329c371e22b6d462edd21720d0Kai Wasserbäch#include "os/os_thread.h"
30b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen
315e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König#include "va_private.h"
32501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen
33b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#ifdef VL_HANDLES
34b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensenstatic struct handle_table *htab = NULL;
35b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensenpipe_static_mutex(htab_lock);
36b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#endif
37b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen
385e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian Königbool vlCreateHTAB(void)
39b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen{
40b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#ifdef VL_HANDLES
415e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   bool ret;
425e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   /* Make sure handle table handles match VAAPI handles. */
435e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   assert(sizeof(unsigned) <= sizeof(VAGenericID));
44b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_lock(htab_lock);
45b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   if (!htab)
46b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen      htab = handle_table_create();
47b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   ret = htab != NULL;
48b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_unlock(htab_lock);
49b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   return ret;
50b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#else
51b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   return TRUE;
52b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#endif
53b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen}
54b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen
55b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensenvoid vlDestroyHTAB(void)
56b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen{
57b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#ifdef VL_HANDLES
58b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_lock(htab_lock);
59b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   if (htab) {
60b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen      handle_table_destroy(htab);
61b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen      htab = NULL;
62b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   }
63b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_unlock(htab_lock);
64b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#endif
65b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen}
66b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen
675e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian KönigVAGenericID vlAddDataHTAB(void *data)
68b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen{
69b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   assert(data);
70b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#ifdef VL_HANDLES
715e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   VAGenericID handle = 0;
72b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_lock(htab_lock);
73b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   if (htab)
74b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen      handle = handle_table_add(htab, data);
75b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_unlock(htab_lock);
76b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   return handle;
77b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#else
785e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   return (VAGenericID)data;
79b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#endif
80b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen}
81b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen
825e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian Königvoid* vlGetDataHTAB(VAGenericID handle)
83b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen{
84b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   assert(handle);
85b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#ifdef VL_HANDLES
86b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   void *data = NULL;
87b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_lock(htab_lock);
88b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   if (htab)
89b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen      data = handle_table_get(htab, handle);
90b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   pipe_mutex_unlock(htab_lock);
91b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   return data;
92b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#else
93b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen   return (void*)handle;
94b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen#endif
95b122e50c3eabf157f8b7a3647590a37abd276c5cThomas Balling Sørensen}
96