dri_interface.h revision 5f1ba3e21b62cee1a4f900a2e6964728f3eeea9b
1192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/* 2192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 3192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * (C) Copyright IBM Corporation 2004 4192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * All Rights Reserved. 5192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 6192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 7192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * copy of this software and associated documentation files (the "Software"), 8192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * to deal in the Software without restriction, including without limitation 9192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * on the rights to use, copy, modify, merge, publish, distribute, sub 10192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * license, and/or sell copies of the Software, and to permit persons to whom 11192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the Software is furnished to do so, subject to the following conditions: 12192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 13192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The above copyright notice and this permission notice (including the next 14192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * paragraph) shall be included in all copies or substantial portions of the 15192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Software. 16192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 17192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 21192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 22192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 23192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * USE OR OTHER DEALINGS IN THE SOFTWARE. 24192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 25192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 26192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 27192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \file dri_interface.h 28192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 29192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * This file contains all the types and functions that define the interface 30192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * between a DRI driver and driver loader. Currently, the most common driver 31192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * loader is the XFree86 libGL.so. However, other loaders do exist, and in 32192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the future the server-side libglx.a will also be a loader. 33192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 34192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \author Kevin E. Martin <kevin@precisioninsight.com> 35192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \author Ian Romanick <idr@us.ibm.com> 36192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 37192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 3874d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#ifndef DRI_INTERFACE_H 3974d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#define DRI_INTERFACE_H 4074d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 4160b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick#ifndef DRI_NEW_INTERFACE_ONLY 42318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick# include <X11/X.h> 43318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick# include <GL/glx.h> 44318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick# include "GL/glxint.h" 45192c988c7360d026a6f345b21acc2cdf41977915Brian Paul#endif 46192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 47192c988c7360d026a6f345b21acc2cdf41977915Brian Paul#include <GL/internal/glcore.h> 48192c988c7360d026a6f345b21acc2cdf41977915Brian Paul#include <xf86drm.h> 49fabe2b9ba38e95bd21a35b265bfc403fa3cb2883Ian Romanick#include <drm.h> 50192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 51192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 52192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name DRI interface structures 53192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 54192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The following structures define the interface between the GLX client 55192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * side library and the DRI (direct rendering infrastructure). 56192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 57192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 58192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIdisplayRec __DRIdisplay; 59192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIscreenRec __DRIscreen; 60192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIcontextRec __DRIcontext; 61192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIdrawableRec __DRIdrawable; 62192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIdriverRec __DRIdriver; 63192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIframebufferRec __DRIframebuffer; 64192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef struct __DRIversionRec __DRIversion; 655f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanicktypedef struct __DRIinterfaceMethodsRec __DRIinterfaceMethods; 66192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef unsigned long __DRIid; 6760b0e12830310e7c05b4043857ed277b28b1c781Ian Romanicktypedef void __DRInativeDisplay; 68192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 69192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 70192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 71192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 72192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name Functions provided by the driver loader. 73192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 74192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 7560b0e12830310e7c05b4043857ed277b28b1c781Ian Romanickextern __DRIscreen *__glXFindDRIScreen(__DRInativeDisplay *dpy, int scrn); 76192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 77192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 78192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 79192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 80192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Type of a pointer to \c glXGetScreenDriver, as returned by 81192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c glXGetProcAddress. This function is used to get the name of the DRI 82192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * driver for the specified screen of the specified display. The driver 83192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * name is typically used with \c glXGetDriverConfig. 84192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 85192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa glXGetScreenDriver, glXGetProcAddress, glXGetDriverConfig 86192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 8760b0e12830310e7c05b4043857ed277b28b1c781Ian Romanicktypedef const char * (* PFNGLXGETSCREENDRIVERPROC) (__DRInativeDisplay *dpy, int scrNum); 88192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 89192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 90192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Type of a pointer to \c glXGetDriverConfig, as returned by 91192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c glXGetProcAddress. This function is used to get the XML document 92192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * describing the configuration options available for the specified driver. 93192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 94192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa glXGetDriverConfig, glXGetProcAddress, glXGetScreenDriver 95192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 96192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef const char * (* PFNGLXGETDRIVERCONFIGPROC) (const char *driverName); 97192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 98192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 99192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Type of a pointer to \c __glXScrEnableExtension, as returned by 100192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c glXGetProcAddress. This function is used to enable a GLX extension 101192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * on the specified screen. 102192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 103192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa __glXScrEnableExtension, glXGetProcAddress 104192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 105192c988c7360d026a6f345b21acc2cdf41977915Brian Paultypedef void (* PFNGLXSCRENABLEEXTENSIONPROC) ( void *psc, const char * name ); 106192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 107318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick 10886356155018fce96ba3367fd1a48a18cd6db3c40Alan Hourihane/* Test for the xf86dri.h header file */ 10986356155018fce96ba3367fd1a48a18cd6db3c40Alan Hourihane#ifndef _XF86DRI_H_ 110749e842953a9ea6e1c9070af7f7211bfc48aa1fdIan Romanickextern GLboolean XF86DRIDestroyContext( __DRInativeDisplay *dpy, int screen, 111318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick __DRIid context_id ); 112318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick 113749e842953a9ea6e1c9070af7f7211bfc48aa1fdIan Romanickextern GLboolean XF86DRICreateDrawable( __DRInativeDisplay *dpy, int screen, 114318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick __DRIid drawable, drm_drawable_t *hHWDrawable ); 115318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick 116749e842953a9ea6e1c9070af7f7211bfc48aa1fdIan Romanickextern GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay *dpy, int screen, 117318aa8409983f3292b4919196df2ca42f4de6a16Ian Romanick __DRIid drawable); 11886356155018fce96ba3367fd1a48a18cd6db3c40Alan Hourihane#endif 119192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 120192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 121192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 122192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 123192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name Functions and data provided by the driver. 124192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 125192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 126192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 127c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirltypedef void *(CREATENEWSCREENFUNC)(__DRInativeDisplay *dpy, int scrn, 128c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl __DRIscreen *psc, const __GLcontextModes * modes, 129c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl const __DRIversion * ddx_version, const __DRIversion * dri_version, 130c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer, 131c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl void * pSAREA, int fd, int internal_api_version, 1325f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick const __DRIinterfaceMethods * interface, 133c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl __GLcontextModes ** driver_modes); 134c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirltypedef CREATENEWSCREENFUNC* PFNCREATENEWSCREENFUNC; 1355f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanickextern CREATENEWSCREENFUNC __driCreateNewScreen_20050725; 136192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 137192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 138192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 139192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * XML document describing the configuration options supported by the 140192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * driver. 141192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 142192c988c7360d026a6f345b21acc2cdf41977915Brian Paulextern const char __driConfigOptions[]; 143192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 144192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 145192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 146192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 147192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 148192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Stored version of some component (i.e., server-side DRI module, kernel-side 149192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * DRM, etc.). 150192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 151192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \todo 152192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * There are several data structures that explicitly store a major version, 153192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * minor version, and patch level. These structures should be modified to 154192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * have a \c __DRIversionRec instead. 155192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 156192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIversionRec { 157192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int major; /**< Major version number. */ 158192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int minor; /**< Minor version number. */ 159192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int patch; /**< Patch-level. */ 160192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 161192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 1625f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1635f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanicktypedef void (*__DRIfuncPtr)(void); 1645f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1655f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanickstruct __DRIinterfaceMethodsRec { 1665f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 1675f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get pointer to named function. 1685f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 1695f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __DRIfuncPtr (*getProcAddress)( const char * proc_name ); 1705f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1715f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 1725f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Create a list of \c __GLcontextModes structures. 1735f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 1745f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __GLcontextModes * (*createContextModes)(unsigned count, 1755f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick size_t minimum_bytes_per_struct); 1765f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1775f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 1785f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Destroy a list of \c __GLcontextModes structures. 1795f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 1805f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \todo 1815f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Determine if the drivers actually need to call this. 1825f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 1835f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick void (*destroyContextModes)( __GLcontextModes * modes ); 1845f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1855f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 1865f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the \c __DRIscreen for a given display and screen number. 1875f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 1885f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __DRIscreen *(*getScreen)(__DRInativeDisplay *dpy, int screenNum); 1895f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1905f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 1915f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 1925f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \name Client/server protocol functions. 1935f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 1945f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * These functions implement the DRI client/server protocol for 1955f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * context and drawable operations. Platforms that do not implement 1965f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the wire protocol (e.g., EGL) will implement glorified no-op functions. 1975f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 1985f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@{*/ 1995f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2005f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Determine if the specified window ID still exists. 2015f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 2025f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \note 2035f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Implementations may assume that the driver will only pass an ID into 2045f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * this function that actually corresponds to a window. On 2055f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * implementations where windows can only be destroyed by the DRI driver 2065f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * (e.g., EGL), this function is allowed to always return \c GL_TRUE. 2075f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2085f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (*windowExists)(__DRInativeDisplay *dpy, __DRIid draw); 2095f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2105f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2115f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Create the server-side portion of the GL context. 2125f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2135f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (* createContext)( __DRInativeDisplay *dpy, int screenNum, 2145f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int configID, void * contextID, drm_context_t * hw_context ); 2155f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2165f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2175f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Destroy the server-side portion of the GL context. 2185f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2195f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (* destroyContext)( __DRInativeDisplay *dpy, int screenNum, 2205f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __DRIid context ); 2215f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2225f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2235f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Create the server-side portion of the drawable. 2245f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2255f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (*createDrawable)( __DRInativeDisplay * ndpy, int screen, 2265f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __DRIid drawable, drm_drawable_t * hHWDrawable ); 2275f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2285f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2295f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Destroy the server-side portion of the drawable. 2305f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2315f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (*destroyDrawable)( __DRInativeDisplay * ndpy, int screen, 2325f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __DRIid drawable ); 2335f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2345f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2355f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This function is used to get information about the position, size, and 2365f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * clip rects of a drawable. 2375f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2385f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (* getDrawableInfo) ( __DRInativeDisplay *dpy, int scrn, 2395f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __DRIid draw, unsigned int * index, unsigned int * stamp, 2405f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * x, int * y, int * width, int * height, 2415f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numClipRects, drm_clip_rect_t ** pClipRects, 2425f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * backX, int * backY, 2435f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numBackClipRects, drm_clip_rect_t ** pBackClipRects ); 2445f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@}*/ 2455f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2465f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2475f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2485f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \name Timing related functions. 2495f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2505f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@{*/ 2515f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2525f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the 64-bit unadjusted system time (UST). 2535f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2545f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int (*getUST)(int64_t * ust); 2555f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2565f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2575f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the media stream counter (MSC) rate. 2585f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 2595f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Matching the definition in GLX_OML_sync_control, this function returns 2605f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the rate of the "media stream counter". In practical terms, this is 2615f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the frame refresh rate of the display. 2625f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2635f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick GLboolean (*getMSCRate)(__DRInativeDisplay * dpy, __DRIid drawable, 2645f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int32_t * numerator, int32_t * denominator); 2655f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@}*/ 2665f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick}; 2675f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2685f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 269192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 270192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Framebuffer information record. Used by libGL to communicate information 271192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * about the framebuffer to the driver's \c __driCreateNewScreen function. 272192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 273192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * In XFree86, most of this information is derrived from data returned by 274192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c XF86DRIGetDeviceInfo. 275192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 276192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen 277192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * __driUtilCreateNewScreen CallCreateNewScreen 278192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 279192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \bug This structure could be better named. 280192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 281192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIframebufferRec { 282192c988c7360d026a6f345b21acc2cdf41977915Brian Paul unsigned char *base; /**< Framebuffer base address in the CPU's 283192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * address space. This value is calculated by 284192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c drmMap on the framebuffer handle 285192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * returned by \c XF86DRIGetDeviceInfo (or a 286192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * similar function). 287192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 288192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int size; /**< Framebuffer size, in bytes. */ 289192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int stride; /**< Number of bytes from one line to the next. */ 290192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int width; /**< Pixel width of the framebuffer. */ 291192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int height; /**< Pixel height of the framebuffer. */ 292192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int dev_priv_size; /**< Size of the driver's dev-priv structure. */ 293192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ 294192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 295192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 296192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 297192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 298192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Screen dependent methods. This structure is initialized during the 299192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __DRIdisplayRec::createScreen call. 300192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 301192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIscreenRec { 302192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 303192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to destroy the private DRI screen data. 304192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 30560b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void (*destroyScreen)(__DRInativeDisplay *dpy, int scrn, void *screenPrivate); 306192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 307192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 308192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to create the private DRI drawable data and initialize the 309192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * drawable dependent methods. 310192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 31160b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void *(*createNewDrawable)(__DRInativeDisplay *dpy, const __GLcontextModes *modes, 312fabe2b9ba38e95bd21a35b265bfc403fa3cb2883Ian Romanick __DRIid draw, __DRIdrawable *pdraw, 313192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int renderType, const int *attrs); 314192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 315192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 316192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to return a pointer to the DRI drawable data. 317192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 31860b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick __DRIdrawable *(*getDrawable)(__DRInativeDisplay *dpy, __DRIid draw, 319192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *drawablePrivate); 320192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 321192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 322192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer to private per screen direct rendering data. \c NULL 323192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * if direct rendering is not supported on this screen. Never 324192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * dereferenced in libGL. 325192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 326192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *private; 327192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 328192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 329192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Get the number of vertical refreshes since some point in time before 330192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * this function was first called (i.e., system start up). 331192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 332192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 333192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 334192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int (*getMSC)( void *screenPrivate, int64_t *msc ); 335192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 336192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 337192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer that points back to the containing 338192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __GLXscreenConfigs. This data structure is shared with DRI drivers 339192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * but \c __GLXscreenConfigs is not. However, they are needed by some GLX 340192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * functions called by DRI drivers. 341192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 342192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030813. 343192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 344192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *screenConfigs; 345192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 346192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 347192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Functions associated with MESA_allocate_memory. 348192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 349192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030815. 350192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 351192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /*@{*/ 35260b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void *(*allocateMemory)(__DRInativeDisplay *dpy, int scrn, GLsizei size, 353192c988c7360d026a6f345b21acc2cdf41977915Brian Paul GLfloat readfreq, GLfloat writefreq, 354192c988c7360d026a6f345b21acc2cdf41977915Brian Paul GLfloat priority); 355192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 35660b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void (*freeMemory)(__DRInativeDisplay *dpy, int scrn, GLvoid *pointer); 357192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 35860b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick GLuint (*memoryOffset)(__DRInativeDisplay *dpy, int scrn, const GLvoid *pointer); 359192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /*@}*/ 360192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 361192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 362192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to create the private DRI context data and initialize the 363192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * context dependent methods. 364192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 365192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20031201. 366192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 36760b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void * (*createNewContext)(__DRInativeDisplay *dpy, const __GLcontextModes *modes, 368192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int render_type, 369192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *sharedPrivate, __DRIcontext *pctx); 370192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 371192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 372192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 373192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Context dependent methods. This structure is initialized during the 374192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __DRIscreenRec::createContext call. 375192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 376192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIcontextRec { 377192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 378192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to destroy the private DRI context data. 379192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 38060b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void (*destroyContext)(__DRInativeDisplay *dpy, int scrn, void *contextPrivate); 381192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 382192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 383192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer to private per context direct rendering data. 384192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c NULL if direct rendering is not supported on the display or 385192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * screen used to create this context. Never dereferenced in libGL. 386192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 387192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *private; 388192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 389192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 390192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Pointer to the mode used to create this context. 391192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 392192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20040317. 393192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 394192c988c7360d026a6f345b21acc2cdf41977915Brian Paul const __GLcontextModes * mode; 395192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 396192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 397192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to bind a DRI drawable to a DRI graphics context. 398192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 3995f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \since Internal API version 20050725. 400192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 401c39bf5e273a4995a279ae2af59fc29e06ab47e29Ian Romanick GLboolean (*bindContext)(__DRInativeDisplay *dpy, int scrn, __DRIid draw, 402192c988c7360d026a6f345b21acc2cdf41977915Brian Paul __DRIid read, __DRIcontext *ctx); 403192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 404192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 405192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to unbind a DRI drawable from a DRI graphics context. 406192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 4075f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \since Internal API version 20050725. 408192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 409c39bf5e273a4995a279ae2af59fc29e06ab47e29Ian Romanick GLboolean (*unbindContext)(__DRInativeDisplay *dpy, int scrn, __DRIid draw, 410192c988c7360d026a6f345b21acc2cdf41977915Brian Paul __DRIid read, __DRIcontext *ctx); 411192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 412192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 413192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 414192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Drawable dependent methods. This structure is initialized during the 415192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __DRIscreenRec::createDrawable call. \c createDrawable is not called 416192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * by libGL at this time. It's currently used via the dri_util.c utility code 417192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * instead. 418192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 419192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIdrawableRec { 420192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 421192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to destroy the private DRI drawable data. 422192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 42360b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void (*destroyDrawable)(__DRInativeDisplay *dpy, void *drawablePrivate); 424192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 425192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 426192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to swap the front and back buffers. 427192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 42860b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick void (*swapBuffers)(__DRInativeDisplay *dpy, void *drawablePrivate); 429192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 430192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 431192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer to private per drawable direct rendering data. 432192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c NULL if direct rendering is not supported on the display or 433192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * screen used to create this drawable. Never dereferenced in libGL. 434192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 435192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *private; 436192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 437192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 438192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Get the number of completed swap buffers for this drawable. 439192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 440192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 441192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 44260b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick int (*getSBC)(__DRInativeDisplay *dpy, void *drawablePrivate, int64_t *sbc ); 443192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 444192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 445192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Wait for the SBC to be greater than or equal target_sbc. 446192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 447192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 448192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 44960b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick int (*waitForSBC)( __DRInativeDisplay * dpy, void *drawablePriv, 450192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t target_sbc, 451192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t * msc, int64_t * sbc ); 452192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 453192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 454192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Wait for the MSC to equal target_msc, or, if that has already passed, 455192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the next time (MSC % divisor) is equal to remainder. If divisor is 456192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * zero, the function will return as soon as MSC is greater than or equal 457192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * to target_msc. 458192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 459192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 460192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 46160b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick int (*waitForMSC)( __DRInativeDisplay * dpy, void *drawablePriv, 462192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t target_msc, int64_t divisor, int64_t remainder, 463192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t * msc, int64_t * sbc ); 464192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 465192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 466192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Like \c swapBuffers, but does NOT have an implicit \c glFlush. Once 467192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * rendering is complete, waits until MSC is equal to target_msc, or 468192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * if that has already passed, waits until (MSC % divisor) is equal 469192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * to remainder. If divisor is zero, the swap will happen as soon as 470192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * MSC is greater than or equal to target_msc. 471192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 472192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 473192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 47460b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick int64_t (*swapBuffersMSC)(__DRInativeDisplay *dpy, void *drawablePrivate, 475192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t target_msc, 476192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t divisor, int64_t remainder); 477192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 478192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 479192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Enable or disable frame usage tracking. 480192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 481192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 482192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 483749e842953a9ea6e1c9070af7f7211bfc48aa1fdIan Romanick int (*frameTracking)(__DRInativeDisplay *dpy, void *drawablePrivate, GLboolean enable); 484192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 485192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 486192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Retrieve frame usage information. 487192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 488192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 489192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 49060b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick int (*queryFrameTracking)(__DRInativeDisplay *dpy, void *drawablePrivate, 491192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int64_t * sbc, int64_t * missedFrames, 492192c988c7360d026a6f345b21acc2cdf41977915Brian Paul float * lastMissedUsage, float * usage ); 493192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 494192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 495192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Used by drivers that implement the GLX_SGI_swap_control or 496192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * GLX_MESA_swap_control extension. 497192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 498192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20030317. 499192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 500192c988c7360d026a6f345b21acc2cdf41977915Brian Paul unsigned swap_interval; 501192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 50274d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 50374d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#endif 504