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