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