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