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