From 74d563cdfbfb07cc666d60dc909e90ddb9949cbb Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Thu, 29 Apr 2004 12:23:39 +0000 Subject: Allow *_dri.so to build in Mesa tree with the 'linux-dri' target. --- src/mesa/drivers/dri/dri_client/Makefile | 1 + src/mesa/drivers/dri/dri_client/XF86dri.c | 2 - src/mesa/drivers/dri/dri_client/dri_util.c | 178 +++++++---- src/mesa/drivers/dri/dri_client/dri_util.h | 19 -- .../drivers/dri/dri_client/imports/glxclient.h | 330 +-------------------- 5 files changed, 130 insertions(+), 400 deletions(-) (limited to 'src/mesa/drivers/dri/dri_client') diff --git a/src/mesa/drivers/dri/dri_client/Makefile b/src/mesa/drivers/dri/dri_client/Makefile index 14ba1948b2..930e50504f 100644 --- a/src/mesa/drivers/dri/dri_client/Makefile +++ b/src/mesa/drivers/dri/dri_client/Makefile @@ -23,6 +23,7 @@ OBJECTS = $(C_SOURCES:.c=.o) INCLUDES = \ -I$(TOP)/include \ + -I$(TOP)/include/GL/internal \ -I$(TOP)/src/mesa \ -I$(TOP)/src/mesa/main \ -I$(TOP)/src/mesa/glapi \ diff --git a/src/mesa/drivers/dri/dri_client/XF86dri.c b/src/mesa/drivers/dri/dri_client/XF86dri.c index ea14b7a070..82ffb30355 100644 --- a/src/mesa/drivers/dri/dri_client/XF86dri.c +++ b/src/mesa/drivers/dri/dri_client/XF86dri.c @@ -607,7 +607,6 @@ Bool XF86DRIGetDeviceInfo(dpy, screen, hFrameBuffer, return True; } -#if 0 Bool XF86DRIOpenFullScreen(dpy, screen, drawable) Display* dpy; int screen; @@ -633,4 +632,3 @@ Bool XF86DRICloseFullScreen(dpy, screen, drawable) (void) drawable; return True; } -#endif diff --git a/src/mesa/drivers/dri/dri_client/dri_util.c b/src/mesa/drivers/dri/dri_client/dri_util.c index 428472873e..08f3fee181 100644 --- a/src/mesa/drivers/dri/dri_client/dri_util.c +++ b/src/mesa/drivers/dri/dri_client/dri_util.c @@ -312,9 +312,9 @@ static void __driGarbageCollectDrawables(void *drawHash) * While casting the opaque private pointers associated with the parameters * into their respective real types it also assures they are not \c NULL. */ -static Bool driUnbindContext2(Display *dpy, int scrn, +static Bool driUnbindContext3(Display *dpy, int scrn, GLXDrawable draw, GLXDrawable read, - GLXContext gc) + __DRIcontext *ctx) { __DRIscreen *pDRIScreen; __DRIdrawable *pdraw; @@ -326,10 +326,10 @@ static Bool driUnbindContext2(Display *dpy, int scrn, /* ** Assume error checking is done properly in glXMakeCurrent before - ** calling driUnbindContext2. + ** calling driUnbindContext3. */ - if (gc == NULL || draw == None || read == None) { + if (ctx == NULL || draw == None || read == None) { /* ERROR!!! */ return GL_FALSE; } @@ -341,7 +341,7 @@ static Bool driUnbindContext2(Display *dpy, int scrn, } psp = (__DRIscreenPrivate *)pDRIScreen->private; - pcp = (__DRIcontextPrivate *)gc->driContext.private; + pcp = (__DRIcontextPrivate *)ctx->private; pdraw = __driFindDrawable(psp->drawHash, draw); if (!pdraw) { @@ -403,59 +403,19 @@ static Bool driUnbindContext2(Display *dpy, int scrn, * be needed in those places when support for pbuffers and / or pixmaps * is added. Is it safe to assume that the drawable is a window? */ -static Bool driBindContext2(Display *dpy, int scrn, - GLXDrawable draw, GLXDrawable read, - GLXContext gc) +static Bool DoBindContext(Display *dpy, + GLXDrawable draw, GLXDrawable read, + __DRIcontext *ctx, const __GLcontextModes * modes, + __DRIscreenPrivate *psp) { - __DRIscreen *pDRIScreen; __DRIdrawable *pdraw; __DRIdrawablePrivate *pdp; __DRIdrawable *pread; __DRIdrawablePrivate *prp; - __DRIscreenPrivate *psp; - __DRIcontextPrivate *pcp; - const __GLcontextModes *modes; - - /* - ** Assume error checking is done properly in glXMakeCurrent before - ** calling driBindContext. - */ - - if (gc == NULL || draw == None || read == None) { - /* ERROR!!! */ - return GL_FALSE; - } - - pDRIScreen = __glXFindDRIScreen(dpy, scrn); -#ifdef DRI_NEW_INTERFACE_ONLY - if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) { - /* ERROR!!! */ - return GL_FALSE; - } -#else - if ( driCompareGLXAPIVersion( 20031201 ) >= 0 ) { -#endif /* DRI_NEW_INTERFACE_ONLY */ - modes = gc->mode; -#ifndef DRI_NEW_INTERFACE_ONLY - } - else { - modes = findConfigMode( dpy, scrn, gc->vid, pDRIScreen ); - if ( modes == NULL ) { - /* ERROR!!! */ - return GL_FALSE; - } - } - - - /* findConfigMode will return NULL if the DRI screen or screen private - * are NULL. - */ - assert( (pDRIScreen != NULL) && (pDRIScreen->private != NULL) ); -#endif /* DRI_NEW_INTERFACE_ONLY */ + __DRIcontextPrivate * const pcp = ctx->private; /* Find the _DRIdrawable which corresponds to the writing GLXDrawable */ - psp = (__DRIscreenPrivate *)pDRIScreen->private; pdraw = __driFindDrawable(psp->drawHash, draw); if (!pdraw) { /* Allocate a new drawable */ @@ -505,7 +465,6 @@ static Bool driBindContext2(Display *dpy, int scrn, } /* Bind the drawable to the context */ - pcp = (__DRIcontextPrivate *)gc->driContext.private; pcp->driDrawablePriv = pdp; pdp->driContextPriv = pcp; pdp->refcount++; @@ -530,6 +489,87 @@ static Bool driBindContext2(Display *dpy, int scrn, } +/** + * This function takes both a read buffer and a draw buffer. This is needed + * for \c glXMakeCurrentReadSGI or GLX 1.3's \c glXMakeContextCurrent + * function. + */ +static Bool driBindContext3(Display *dpy, int scrn, + GLXDrawable draw, GLXDrawable read, + __DRIcontext * ctx) +{ + __DRIscreen *pDRIScreen; + + /* + ** Assume error checking is done properly in glXMakeCurrent before + ** calling driBindContext. + */ + + if (ctx == NULL || draw == None || read == None) { + /* ERROR!!! */ + return GL_FALSE; + } + + pDRIScreen = __glXFindDRIScreen(dpy, scrn); + if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) { + /* ERROR!!! */ + return GL_FALSE; + } + + return DoBindContext( dpy, draw, read, ctx, ctx->mode, + (__DRIscreenPrivate *)pDRIScreen->private ); +} + + +#ifndef DRI_NEW_INTERFACE_ONLY +/** + * This function takes both a read buffer and a draw buffer. This is needed + * for \c glXMakeCurrentReadSGI or GLX 1.3's \c glXMakeContextCurrent + * function. + */ +static Bool driBindContext2(Display *dpy, int scrn, + GLXDrawable draw, GLXDrawable read, + GLXContext gc) +{ + __DRIscreen *pDRIScreen; + const __GLcontextModes *modes; + + /* + ** Assume error checking is done properly in glXMakeCurrent before + ** calling driBindContext. + */ + + if (gc == NULL || draw == None || read == None) { + /* ERROR!!! */ + return GL_FALSE; + } + + pDRIScreen = __glXFindDRIScreen(dpy, scrn); + modes = (driCompareGLXAPIVersion( 20040317 ) >= 0) + ? gc->driContext.mode + : findConfigMode( dpy, scrn, gc->vid, pDRIScreen ); + + if ( modes == NULL ) { + /* ERROR!!! */ + return GL_FALSE; + } + + /* findConfigMode will return NULL if the DRI screen or screen private + * are NULL. + */ + assert( (pDRIScreen != NULL) && (pDRIScreen->private != NULL) ); + + return DoBindContext( dpy, draw, read, & gc->driContext, modes, + (__DRIscreenPrivate *)pDRIScreen->private ); +} + +static Bool driUnbindContext2(Display *dpy, int scrn, + GLXDrawable draw, GLXDrawable read, + GLXContext gc) +{ + return driUnbindContext3(dpy, scrn, draw, read, & gc->driContext); +} + /* * Simply call bind with the same GLXDrawable for the read and draw buffers. */ @@ -550,6 +590,7 @@ static Bool driUnbindContext(Display *dpy, int scrn, (void) will_rebind; return driUnbindContext2( dpy, scrn, draw, draw, gc ); } +#endif /* DRI_NEW_INTERFACE_ONLY */ /*@}*/ @@ -957,6 +998,14 @@ driCreateNewContext(Display *dpy, const __GLcontextModes *modes, } pctx->destroyContext = driDestroyContext; +#ifdef DRI_NEW_INTERFACE_ONLY + pctx->bindContext = NULL; + pctx->unbindContext = NULL; + pctx->bindContext2 = NULL; + pctx->unbindContext2 = NULL; + pctx->bindContex3 = driBindContext3; + pctx->unbindContext3 = driUnbindContext3; +#else pctx->bindContext = driBindContext; pctx->unbindContext = driUnbindContext; if ( driCompareGLXAPIVersion( 20030606 ) >= 0 ) { @@ -964,6 +1013,12 @@ driCreateNewContext(Display *dpy, const __GLcontextModes *modes, pctx->unbindContext2 = driUnbindContext2; } + if ( driCompareGLXAPIVersion( 20040415 ) >= 0 ) { + pctx->bindContext3 = driBindContext3; + pctx->unbindContext3 = driUnbindContext3; + } +#endif + if ( !(*psp->DriverAPI.CreateContext)(modes, pcp, shareCtx) ) { (void)XF86DRIDestroyContext(dpy, modes->screen, pcp->contextID); Xfree(pcp); @@ -1108,6 +1163,22 @@ __driUtilCreateNewScreen(Display *dpy, int scrn, __DRIscreen *psc, __DRIscreenPrivate *psp; +#ifdef DRI_NEW_INTERFACE_ONLY + if ( internal_api_version < 20040415 ) { + fprintf( stderr, "libGL error: libGL.so version (%08u) is too old. " + "20040415 or later is required.\n", internal_api_version ); + return NULL; + } +#else + if ( internal_api_version == 20031201 ) { + fprintf( stderr, "libGL error: libGL version 20031201 has critical " + "binary compatilibity bugs.\nlibGL error: You must upgrade " + "to use direct-rendering!\n" ); + return NULL; + } +#endif /* DRI_NEW_INTERFACE_ONLY */ + + window_exists = (PFNGLXWINDOWEXISTSPROC) glXGetProcAddress( (const GLubyte *) "__glXWindowExists" ); @@ -1200,6 +1271,10 @@ __driUtilCreateNewScreen(Display *dpy, int scrn, __DRIscreen *psc, #endif psc->createNewDrawable = driCreateNewDrawable; psc->getDrawable = driGetDrawable; +#ifdef DRI_NEW_INTERFACE_ONLY + psc->getMSC = driGetMSC; + psc->createNewContext = driCreateNewContext; +#else if ( driCompareGLXAPIVersion( 20030317 ) >= 0 ) { psc->getMSC = driGetMSC; @@ -1207,6 +1282,7 @@ __driUtilCreateNewScreen(Display *dpy, int scrn, __DRIscreen *psc, psc->createNewContext = driCreateNewContext; } } +#endif if ( (psp->DriverAPI.InitDriver != NULL) && !(*psp->DriverAPI.InitDriver)(psp) ) { diff --git a/src/mesa/drivers/dri/dri_client/dri_util.h b/src/mesa/drivers/dri/dri_client/dri_util.h index f189b5a967..4764bbbc66 100644 --- a/src/mesa/drivers/dri/dri_client/dri_util.h +++ b/src/mesa/drivers/dri/dri_client/dri_util.h @@ -575,25 +575,6 @@ __driUtilCreateScreen(Display *dpy, int scrn, __DRIscreen *psc, int numConfigs, __GLXvisualConfig *config, const struct __DriverAPIRec *driverAPI); -/** This must be implemented in each driver - * \deprecated - */ -extern void * -__driCreateScreen(Display *dpy, int scrn, __DRIscreen *psc, - int numConfigs, __GLXvisualConfig *config); - -/** This must be implemented in each driver */ -extern void * __driCreateNewScreen( Display *dpy, int scrn, __DRIscreen *psc, - const __GLcontextModes * modes, - const __DRIversion * ddx_version, const __DRIversion * dri_version, - const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer, - drmAddress pSAREA, int fd, int internal_api_version, - __GLcontextModes ** driver_modes ); - -/** This is optionally implemented in each driver */ -extern void -__driRegisterExtensions( void ); - /* Test the version of the internal GLX API. Returns a value like strcmp. */ extern int driCompareGLXAPIVersion( GLuint required_version ); diff --git a/src/mesa/drivers/dri/dri_client/imports/glxclient.h b/src/mesa/drivers/dri/dri_client/imports/glxclient.h index 317ea01116..74dfe69c95 100644 --- a/src/mesa/drivers/dri/dri_client/imports/glxclient.h +++ b/src/mesa/drivers/dri/dri_client/imports/glxclient.h @@ -78,65 +78,7 @@ typedef struct _glapi_table __GLapi; #ifdef GLX_DIRECT_RENDERING -/** - * \name DRI interface structures - * - * The following structures define the interface between the GLX client - * side library and the DRI (direct rendering infrastructure). - */ -/*@{*/ -typedef struct __DRIdisplayRec __DRIdisplay; -typedef struct __DRIscreenRec __DRIscreen; -typedef struct __DRIcontextRec __DRIcontext; -typedef struct __DRIdrawableRec __DRIdrawable; -typedef struct __DRIdriverRec __DRIdriver; -typedef struct __DRIframebufferRec __DRIframebuffer; -typedef struct __DRIversionRec __DRIversion; -/*@}*/ - -extern __DRIscreen *__glXFindDRIScreen(Display *dpy, int scrn); - -/** - * Stored version of some component (i.e., server-side DRI module, kernel-side - * DRM, etc.). - * - * \todo There are several data structures that explicitly store a major - * version, minor version, and patch level. These structures should - * be modified to have a \c __DRIversionRec instead. - */ -struct __DRIversionRec { - int major; /**< Major version number. */ - int minor; /**< Minor version number. */ - int patch; /**< Patch-level. */ -}; - -/** - * Framebuffer information record. Used by libGL to communicate information - * about the framebuffer to the driver's \c __DRIdisplayRec::createNewScreen - * function. - * - * In XFree86, most of this information is derrived from data returned by - * calling \c XF86DRIGetDeviceInfo. - * - * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen - * __driUtilCreateNewScreen CallCreateNewScreen - * - * \bug This structure could be better named. - */ -struct __DRIframebufferRec { - unsigned char *base; /**< Framebuffer base address in the CPU's - * address space. This value is calculated by - * calling \c drmMap on the framebuffer handle - * returned by \c XF86DRIGetDeviceInfo (or a - * similar function). - */ - int size; /**< Framebuffer size, in bytes. */ - int stride; /**< Number of bytes from one line to the next. */ - int width; /**< Pixel width of the framebuffer. */ - int height; /**< Pixel height of the framebuffer. */ - int dev_priv_size; /**< Size of the driver's dev-priv structure. */ - void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ -}; +#include typedef void *(*CreateScreenFunc)(Display *dpy, int scrn, __DRIscreen *psc, int numConfigs, __GLXvisualConfig *config); @@ -147,6 +89,7 @@ typedef void *(*CreateNewScreenFunc)(Display *dpy, int scrn, __DRIscreen *psc, const __DRIframebuffer * frame_buffer, void * pSAREA, int fd, int internal_api_version, __GLcontextModes ** driver_modes); + /** * Display dependent methods. This structure is initialized during the * \c driCreateDisplay call. @@ -183,231 +126,6 @@ struct __DRIdisplayRec { CreateNewScreenFunc * createNewScreen; }; -/** - * Screen dependent methods. This structure is initialized during the - * \c __DRIdisplayRec::createScreen call. - */ -struct __DRIscreenRec { - /** - * Method to destroy the private DRI screen data. - */ - void (*destroyScreen)(Display *dpy, int scrn, void *screenPrivate); - - /** - * Method to create the private DRI context data and initialize the - * context dependent methods. - * - * \sa __DRIscreenRec::createNewContext driCreateContext - * driCreateNewContext - * \deprecated This function has been replaced by - * __DRIscreenRec::createNewContext. New drivers will - * continue to export this method, but it will eventually - * (in the next XFree86 major relearse) go away. - */ - void *(*createContext)(Display *dpy, XVisualInfo *vis, void *sharedPrivate, - __DRIcontext *pctx); - - /** - * Method to create the private DRI drawable data and initialize the - * drawable dependent methods. - */ - void *(*createNewDrawable)(Display *dpy, const __GLcontextModes *modes, - GLXDrawable draw, __DRIdrawable *pdraw, - int renderType, const int *attrs); - - /** - * Method to return a pointer to the DRI drawable data. - */ - __DRIdrawable *(*getDrawable)(Display *dpy, GLXDrawable draw, - void *drawablePrivate); - - /** - * Opaque pointer to private per screen direct rendering data. \c NULL - * if direct rendering is not supported on this screen. Never - * dereferenced in libGL. - */ - void *private; - - /** - * Get the number of vertical refreshes since some point in time before - * this function was first called (i.e., system start up). - * - * \since Internal API version 20030317. - */ - int (*getMSC)( void *screenPrivate, int64_t *msc ); - - /** - * Opaque pointer that points back to the containing - * \c __GLXscreenConfigs. This data structure is shared with DRI drivers - * but \c __GLXscreenConfigs is not. However, they are needed by some GLX - * functions called by DRI drivers. - * - * \since Internal API version 20030813. - */ - void *screenConfigs; - - /** - * Functions associated with MESA_allocate_memory. - * - * \since Internal API version 20030815. - */ - /*@{*/ - void *(*allocateMemory)(Display *dpy, int scrn, GLsizei size, - GLfloat readfreq, GLfloat writefreq, - GLfloat priority); - - void (*freeMemory)(Display *dpy, int scrn, GLvoid *pointer); - - GLuint (*memoryOffset)(Display *dpy, int scrn, const GLvoid *pointer); - /*@}*/ - - /** - * Method to create the private DRI context data and initialize the - * context dependent methods. - * - * \since Internal API version 20031201. - */ - void * (*createNewContext)(Display *dpy, const __GLcontextModes *modes, - int render_type, - void *sharedPrivate, __DRIcontext *pctx); -}; - -/** - * Context dependent methods. This structure is initialized during the - * \c __DRIscreenRec::createContext call. - */ -struct __DRIcontextRec { - /** - * Method to destroy the private DRI context data. - */ - void (*destroyContext)(Display *dpy, int scrn, void *contextPrivate); - - /** - * Method to bind a DRI drawable to a DRI graphics context. - */ - Bool (*bindContext)(Display *dpy, int scrn, GLXDrawable draw, - GLXContext gc); - - /** - * Method to unbind a DRI drawable to a DRI graphics context. - */ - Bool (*unbindContext)(Display *dpy, int scrn, GLXDrawable draw, - GLXContext gc, int will_rebind); - - /** - * Opaque pointer to private per context direct rendering data. - * \c NULL if direct rendering is not supported on the display or - * screen used to create this context. Never dereferenced in libGL. - */ - void *private; - - /** - * Method to bind a DRI drawable to a DRI graphics context. - * - * \since Internal API version 20030606. - */ - Bool (*bindContext2)(Display *dpy, int scrn, GLXDrawable draw, - GLXDrawable read, GLXContext gc); - - /** - * Method to unbind a DRI drawable to a DRI graphics context. - * - * \since Internal API version 20030606. - */ - Bool (*unbindContext2)(Display *dpy, int scrn, GLXDrawable draw, - GLXDrawable read, GLXContext gc); -}; - -/** - * Drawable dependent methods. This structure is initialized during the - * \c __DRIscreenRec::createDrawable call. \c createDrawable is not called - * by libGL at this time. It's currently used via the dri_util.c utility code - * instead. - */ -struct __DRIdrawableRec { - /** - * Method to destroy the private DRI drawable data. - */ - void (*destroyDrawable)(Display *dpy, void *drawablePrivate); - - /** - * Method to swap the front and back buffers. - */ - void (*swapBuffers)(Display *dpy, void *drawablePrivate); - - /** - * Opaque pointer to private per drawable direct rendering data. - * \c NULL if direct rendering is not supported on the display or - * screen used to create this drawable. Never dereferenced in libGL. - */ - void *private; - - /** - * Get the number of completed swap buffers for this drawable. - * - * \since Internal API version 20030317. - */ - int (*getSBC)(Display *dpy, void *drawablePrivate, int64_t *sbc ); - - /** - * Wait for the SBC to be greater than or equal target_sbc. - * - * \since Internal API version 20030317. - */ - int (*waitForSBC)( Display * dpy, void *drawablePriv, - int64_t target_sbc, - int64_t * msc, int64_t * sbc ); - - /** - * Wait for the MSC to equal target_msc, or, if that has already passed, - * the next time (MSC % divisor) is equal to remainder. If divisor is - * zero, the function will return as soon as MSC is greater than or equal - * to target_msc. - * - * \since Internal API version 20030317. - */ - int (*waitForMSC)( Display * dpy, void *drawablePriv, - int64_t target_msc, int64_t divisor, int64_t remainder, - int64_t * msc, int64_t * sbc ); - - /** - * Like \c swapBuffers, but does NOT have an implicit \c glFlush. Once - * rendering is complete, waits until MSC is equal to target_msc, or - * if that has already passed, waits until (MSC % divisor) is equal - * to remainder. If divisor is zero, the swap will happen as soon as - * MSC is greater than or equal to target_msc. - * - * \since Internal API version 20030317. - */ - int64_t (*swapBuffersMSC)(Display *dpy, void *drawablePrivate, - int64_t target_msc, - int64_t divisor, int64_t remainder); - - /** - * Enable or disable frame usage tracking. - * - * \since Internal API version 20030317. - */ - int (*frameTracking)(Display *dpy, void *drawablePrivate, Bool enable); - - /** - * Retrieve frame usage information. - * - * \since Internal API version 20030317. - */ - int (*queryFrameTracking)(Display *dpy, void *drawablePrivate, - int64_t * sbc, int64_t * missedFrames, - float * lastMissedUsage, float * usage ); - - /** - * Used by drivers that implement the GLX_SGI_swap_control or - * GLX_MESA_swap_control extension. - * - * \since Internal API version 20030317. - */ - unsigned swap_interval; -}; - /* ** We keep a linked list of these structures, one per DRI device driver. @@ -810,16 +528,6 @@ struct __GLXcontextRec { * drivers should NEVER use this data or even care that it exists. */ void * client_state_private; - -#ifdef GLX_DIRECT_RENDERING - /** - * Pointer to the mode used to create this context. This field replaces - * the \c vid and \c fbconfigID fields. - * - * \since Internal API version 20031201. - */ - const __GLcontextModes * mode; -#endif /* GLX_DIRECT_RENDERING */ }; #define __glXSetError(gc,code) \ @@ -1103,41 +811,7 @@ extern char *__glXCombineExtensionStrings( const char *cext_string, /* Determine the internal API version */ extern int __glXGetInternalVersion(void); -/** - * Type of a pointer to \c __glXGetInternalVersion, as returned by - * \c glXGetProcAddress. - * - * \sa __glXGetInternalVersion, glXGetProcAddress - */ -typedef int (* PFNGLXGETINTERNALVERSIONPROC) ( void ); - -/** - * Type of a pointer to \c __glXWindowExists, as returned by - * \c glXGetProcAddress. - * - * \sa __glXWindowExists, glXGetProcAddress - */ -typedef Bool (* PFNGLXWINDOWEXISTSPROC) (Display *dpy, GLXDrawable draw); - /* Get the unadjusted system time */ extern int __glXGetUST( int64_t * ust ); -/** - * Type of a pointer to \c __glXGetUST, as returned by \c glXGetProcAddress. - * - * \sa __glXGetUST, glXGetProcAddress - */ -typedef int (* PFNGLXGETUSTPROC) ( int64_t * ust ); - - -/** - * Type of pointer to \c __glXCreateContextModes, as returned by - * \c glXGetProcAddress. - * - * \sa _gl_context_modes_create, glXGetProcAddress - */ - -typedef __GLcontextModes * (* PFNGLXCREATECONTEXTMODES) ( unsigned count, - size_t minimum_bytes_per_struct ); - #endif /* !__GLX_client_h__ */ -- cgit v1.2.3