Home | History | Annotate | Download | only in glx
      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