1 /*
2  * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 #ifndef VA_GLX_H
26 #define VA_GLX_H
27 
28 #include <va/va.h>
29 #include <GL/glx.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 /**
36  * Return a suitable VADisplay for VA API
37  *
38  * @param[in] dpy the X11 display
39  * @return a VADisplay
40  */
41 VADisplay vaGetDisplayGLX(
42     Display *dpy
43 );
44 
45 /**
46  * Create a surface used for display to OpenGL
47  *
48  * The application shall maintain the live GLX context itself.
49  * Implementations are free to use glXGetCurrentContext() and
50  * glXGetCurrentDrawable() functions for internal purposes.
51  *
52  * @param[in]  dpy        the VA display
53  * @param[in]  target     the GL target to which the texture needs to be bound
54  * @param[in]  texture    the GL texture
55  * @param[out] gl_surface the VA/GLX surface
56  * @return VA_STATUS_SUCCESS if successful
57  */
58 VAStatus vaCreateSurfaceGLX(
59     VADisplay dpy,
60     GLenum    target,
61     GLuint    texture,
62     void    **gl_surface
63 );
64 
65 /**
66  * Destroy a VA/GLX surface
67  *
68  * The application shall maintain the live GLX context itself.
69  * Implementations are free to use glXGetCurrentContext() and
70  * glXGetCurrentDrawable() functions for internal purposes.
71  *
72  * @param[in]  dpy        the VA display
73  * @param[in]  gl_surface the VA surface
74  * @return VA_STATUS_SUCCESS if successful
75  */
76 VAStatus vaDestroySurfaceGLX(
77     VADisplay dpy,
78     void     *gl_surface
79 );
80 
81 /**
82  * Copy a VA surface to a VA/GLX surface
83  *
84  * This function will not return until the copy is completed. At this
85  * point, the underlying GL texture will contain the surface pixels
86  * in an RGB format defined by the user.
87  *
88  * The application shall maintain the live GLX context itself.
89  * Implementations are free to use glXGetCurrentContext() and
90  * glXGetCurrentDrawable() functions for internal purposes.
91  *
92  * @param[in]  dpy        the VA display
93  * @param[in]  gl_surface the VA/GLX destination surface
94  * @param[in]  surface    the VA source surface
95  * @param[in]  flags      the PutSurface flags
96  * @return VA_STATUS_SUCCESS if successful
97  */
98 VAStatus vaCopySurfaceGLX(
99     VADisplay    dpy,
100     void        *gl_surface,
101     VASurfaceID  surface,
102     unsigned int flags
103 );
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif /* VA_GLX_H */
110