device.c revision 725e4ada3062c80623abf51477dfdc73fe294f3f
1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/************************************************************************** 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Copyright 2010 Younes Manton. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * All Rights Reserved. 5b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Permission is hereby granted, free of charge, to any person obtaining a 7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * copy of this software and associated documentation files (the 8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * "Software"), to deal in the Software without restriction, including 9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * without limitation the rights to use, copy, modify, merge, publish, 10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * distribute, sub license, and/or sell copies of the Software, and to 11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * permit persons to whom the Software is furnished to do so, subject to 12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * the following conditions: 13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * The above copyright notice and this permission notice (including the 15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * next paragraph) shall be included in all copies or substantial portions 16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of the Software. 17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato **************************************************************************/ 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <vdpau/vdpau_x11.h> 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <pipe/p_compiler.h> 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <vl_winsys.h> 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <util/u_memory.h> 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include "vdpau_private.h" 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoVdpDeviceCreateX11 vdp_imp_device_create_x11; 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoPUBLIC VdpStatus 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratovdp_imp_device_create_x11(Display *display, int screen, VdpDevice *device, VdpGetProcAddress **get_proc_address) 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato VdpStatus ret; 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato vlVdpDevice *dev = NULL; 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato struct vl_screen *vlscreen = NULL; 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!(display && device && get_proc_address)) 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_INVALID_POINTER; 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!vlCreateHTAB()) { 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ret = VDP_STATUS_RESOURCES; 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato goto no_htab; 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato dev = CALLOC(1, sizeof(vlVdpDevice)); 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!dev) { 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ret = VDP_STATUS_RESOURCES; 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato goto no_dev; 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato dev->display = display; 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato dev->screen = screen; 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *device = vlAddDataHTAB(dev); 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (*device == 0) { 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ret = VDP_STATUS_ERROR; 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato goto no_handle; 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *get_proc_address = &vlVdpGetProcAddress; 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_OK; 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratono_handle: 71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato FREE(dev); 72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratono_dev: 73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato vlDestroyHTAB(); 74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratono_htab: 75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return ret; 76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoVdpStatus vlVdpDeviceDestroy(VdpDevice device) 79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato vlVdpDevice *dev = vlGetDataHTAB(device); 81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!dev) 82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_INVALID_HANDLE; 83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato FREE(dev); 84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato vlDestroyHTAB(); 85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_OK; 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoVdpStatus vlVdpGetProcAddress(VdpDevice device, VdpFuncId function_id, void **function_pointer) 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato vlVdpDevice *dev = vlGetDataHTAB(device); 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!dev) 93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_INVALID_HANDLE; 94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!function_pointer) 96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_INVALID_POINTER; 97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (!vlGetFuncFTAB(function_id, function_pointer)) 99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_INVALID_FUNC_ID; 100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return VDP_STATUS_OK; 102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato