diff options
Diffstat (limited to 'src/mesa/drivers/dri/common')
| -rw-r--r-- | src/mesa/drivers/dri/common/dri_test.c | 89 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/dri_util.c | 133 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/dri_util.h | 30 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/drisw_util.c | 272 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/drisw_util.h | 132 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/utils.c | 28 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/utils.h | 3 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/xmlconfig.c | 2 | 
8 files changed, 598 insertions, 91 deletions
diff --git a/src/mesa/drivers/dri/common/dri_test.c b/src/mesa/drivers/dri/common/dri_test.c new file mode 100644 index 0000000000..793f0c37d7 --- /dev/null +++ b/src/mesa/drivers/dri/common/dri_test.c @@ -0,0 +1,89 @@ +#include "main/glheader.h" +#include "main/compiler.h" +#include "glapi/glapi.h" + +/* This is just supposed to make sure we get a reference to +   the driver entry symbol that the compiler doesn't optimize away */ + +extern char __driDriverExtensions[]; + +/* provide glapi symbols */ + +#if defined(GLX_USE_TLS) + +PUBLIC __thread struct _glapi_table * _glapi_tls_Dispatch +    __attribute__((tls_model("initial-exec"))); + +PUBLIC __thread void * _glapi_tls_Context +    __attribute__((tls_model("initial-exec"))); + +PUBLIC const struct _glapi_table *_glapi_Dispatch; +PUBLIC const void *_glapi_Context; + +#else + +PUBLIC struct _glapi_table *_glapi_Dispatch; +PUBLIC void *_glapi_Context; + +#endif + +PUBLIC void +_glapi_check_multithread(void) +{} + +PUBLIC void +_glapi_set_context(void *context) +{} + +PUBLIC void * +_glapi_get_context(void) +{ +	return 0; +} + +PUBLIC void +_glapi_set_dispatch(struct _glapi_table *dispatch) +{} + +PUBLIC struct _glapi_table * +_glapi_get_dispatch(void) +{ +	return 0; +} + +PUBLIC int +_glapi_add_dispatch( const char * const * function_names, +		     const char * parameter_signature ) +{ +	return 0; +} + +PUBLIC GLint +_glapi_get_proc_offset(const char *funcName) +{ +	return 0; +} + +PUBLIC _glapi_proc +_glapi_get_proc_address(const char *funcName) +{ +	return 0; +} + +PUBLIC GLuint +_glapi_get_dispatch_table_size(void) +{ +	return 0; +} + +PUBLIC unsigned long +_glthread_GetID(void) +{ +   return 0; +} + +int main(int argc, char** argv) +{ +   void* p = __driDriverExtensions; +   return (int)(unsigned long)p; +} diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index 75c98825b7..d2ffa5da64 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -31,6 +31,16 @@  #include "dri_util.h"  #include "drm_sarea.h"  #include "utils.h" +#include "xmlpool.h" + +PUBLIC const char __dri2ConfigOptions[] = +   DRI_CONF_BEGIN +      DRI_CONF_SECTION_PERFORMANCE +         DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_1) +      DRI_CONF_SECTION_END +   DRI_CONF_END; + +static const uint __dri2NConfigOptions = 1;  #ifndef GLX_OML_sync_control  typedef GLboolean ( * PFNGLXGETMSCRATEOMLPROC) (__DRIdrawable *drawable, int32_t *numerator, int32_t *denominator); @@ -47,28 +57,6 @@ const __DRIextension driReadDrawableExtension = {      __DRI_READ_DRAWABLE, __DRI_READ_DRAWABLE_VERSION  }; -/** - * Print message to \c stderr if the \c LIBGL_DEBUG environment variable - * is set.  - *  - * Is called from the drivers. - *  - * \param f \c printf like format string. - */ -void -__driUtilMessage(const char *f, ...) -{ -    va_list args; - -    if (getenv("LIBGL_DEBUG")) { -        fprintf(stderr, "libGL: "); -        va_start(args, f); -        vfprintf(stderr, f, args); -        va_end(args); -        fprintf(stderr, "\n"); -    } -} -  GLint  driIntersectArea( drm_clip_rect_t rect1, drm_clip_rect_t rect2 )  { @@ -151,11 +139,6 @@ static int driUnbindContext(__DRIcontext *pcp)       */      pcp->driDrawablePriv = pcp->driReadablePriv = NULL; -#if 0 -    /* Unbind the drawable */ -    pdp->driContextPriv = &psp->dummyContextPriv; -#endif -      return GL_TRUE;  } @@ -170,19 +153,24 @@ static int driBindContext(__DRIcontext *pcp,  {      __DRIscreen *psp = NULL; -    /* Bind the drawable to the context */ +    /* +    ** Assume error checking is done properly in glXMakeCurrent before +    ** calling driUnbindContext. +    */ -    if (pcp) { -	psp = pcp->driScreenPriv; -	pcp->driDrawablePriv = pdp; -	pcp->driReadablePriv = prp; -	if (pdp) { -	    pdp->driContextPriv = pcp; -    	    dri_get_drawable(pdp); -	} -	if ( prp && pdp != prp ) { -    	    dri_get_drawable(prp); -	} +    if (!pcp) +	return GL_FALSE; + +    /* Bind the drawable to the context */ +    psp = pcp->driScreenPriv; +    pcp->driDrawablePriv = pdp; +    pcp->driReadablePriv = prp; +    if (pdp) { +	pdp->driContextPriv = pcp; +	dri_get_drawable(pdp); +    } +    if (prp && pdp != prp) { +	dri_get_drawable(prp);      }      /* @@ -190,7 +178,6 @@ static int driBindContext(__DRIcontext *pcp,      ** initialize the drawable information if has not been done before.      */ -    assert(psp);      if (!psp->dri2.enabled) {  	if (pdp && !pdp->pStamp) {  	    DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); @@ -205,7 +192,6 @@ static int driBindContext(__DRIcontext *pcp,      }      /* Call device-specific MakeCurrent */ -      return (*psp->DriverAPI.MakeCurrent)(pcp, pdp, prp);  } @@ -455,7 +441,6 @@ driCreateNewDrawable(__DRIscreen *psp, const __DRIconfig *config,      pdp->vblFlags = 0;      pdp->driScreenPriv = psp; -    pdp->driContextPriv = &psp->dummyContextPriv;      if (!(*psp->DriverAPI.CreateBuffer)(psp, pdp, &config->modes,  					renderType == GLX_PIXMAP_BIT)) { @@ -495,6 +480,41 @@ dri2CreateNewDrawable(__DRIscreen *screen,      return pdraw;  } +static int +dri2ConfigQueryb(__DRIscreen *screen, const char *var, GLboolean *val) +{ +   if (!driCheckOption(&screen->optionCache, var, DRI_BOOL)) +      return -1; + +   *val = driQueryOptionb(&screen->optionCache, var); + +   return 0; +} + +static int +dri2ConfigQueryi(__DRIscreen *screen, const char *var, GLint *val) +{ +   if (!driCheckOption(&screen->optionCache, var, DRI_INT) && +       !driCheckOption(&screen->optionCache, var, DRI_ENUM)) +      return -1; + +    *val = driQueryOptioni(&screen->optionCache, var); + +    return 0; +} + +static int +dri2ConfigQueryf(__DRIscreen *screen, const char *var, GLfloat *val) +{ +   if (!driCheckOption(&screen->optionCache, var, DRI_FLOAT)) +      return -1; + +    *val = driQueryOptionf(&screen->optionCache, var); + +    return 0; +} + +  static void dri_get_drawable(__DRIdrawable *pdp)  {      pdp->refcount++; @@ -589,17 +609,6 @@ driCreateNewContext(__DRIscreen *psp, const __DRIconfig *config,      pcp->dri2.draw_stamp = 0;      pcp->dri2.read_stamp = 0; -    /* When the first context is created for a screen, initialize a "dummy" -     * context. -     */ - -    if (!psp->dri2.enabled && !psp->dummyContextPriv.driScreenPriv) { -        psp->dummyContextPriv.hHWContext = psp->pSAREA->dummy_context; -        psp->dummyContextPriv.driScreenPriv = psp; -        psp->dummyContextPriv.driDrawablePriv = NULL; -        psp->dummyContextPriv.driverPrivate = NULL; -	/* No other fields should be used! */ -    }      pcp->hHWContext = hwContext; @@ -756,13 +765,6 @@ driCreateNewScreen(int scrn,      psp->myNum = scrn;      psp->dri2.enabled = GL_FALSE; -    /* -    ** Do not init dummy context here; actual initialization will be -    ** done when the first DRI context is created.  Init screen priv ptr -    ** to NULL to let CreateContext routine that it needs to be inited. -    */ -    psp->dummyContextPriv.driScreenPriv = NULL; -      psp->DriverAPI = driDriverAPI;      *driver_modes = driDriverAPI.InitScreen(psp); @@ -785,6 +787,7 @@ dri2CreateNewScreen(int scrn, int fd,      static const __DRIextension *emptyExtensionList[] = { NULL };      __DRIscreen *psp;      drmVersionPtr version; +    driOptionCache options;      if (driDriverAPI.InitScreen2 == NULL)          return NULL; @@ -817,6 +820,9 @@ dri2CreateNewScreen(int scrn, int fd,      psp->DriverAPI = driDriverAPI; +    driParseOptionInfo(&options, __dri2ConfigOptions, __dri2NConfigOptions); +    driParseConfigFiles(&psp->optionCache, &options, psp->myNum, "dri2"); +      return psp;  } @@ -859,6 +865,13 @@ const __DRIdri2Extension driDRI2Extension = {      dri2CreateNewContext,  }; +const __DRI2configQueryExtension dri2ConfigQueryExtension = { +   { __DRI2_CONFIG_QUERY, __DRI2_CONFIG_QUERY_VERSION }, +   dri2ConfigQueryb, +   dri2ConfigQueryi, +   dri2ConfigQueryf, +}; +  static int  driFrameTracking(__DRIdrawable *drawable, GLboolean enable)  { diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h index 99c0f1e442..0fe6f1e246 100644 --- a/src/mesa/drivers/dri/common/dri_util.h +++ b/src/mesa/drivers/dri/common/dri_util.h @@ -51,6 +51,7 @@  #include <drm.h>  #include <drm_sarea.h>  #include <xf86drm.h> +#include "xmlconfig.h"  #include "main/glheader.h"  #include "GL/internal/glcore.h"  #include "GL/internal/dri_interface.h" @@ -70,6 +71,7 @@ extern const __DRIcopySubBufferExtension driCopySubBufferExtension;  extern const __DRIswapControlExtension driSwapControlExtension;  extern const __DRIframeTrackingExtension driFrameTrackingExtension;  extern const __DRImediaStreamCounterExtension driMediaStreamCounterExtension; +extern const __DRI2configQueryExtension dri2ConfigQueryExtension;  /**   * Used by DRI_VALIDATE_DRAWABLE_INFO @@ -399,11 +401,6 @@ struct __DRIcontextRec {      void *driverPrivate;      /** -     * Pointer back to the \c __DRIcontext that contains this structure. -     */ -    __DRIcontext *pctx; - -    /**       * Pointer to drawable currently bound to this context for drawing.       */      __DRIdrawable *driDrawablePriv; @@ -511,29 +508,12 @@ struct __DRIscreenRec {      /*@}*/      /** -     * Dummy context to which drawables are bound when not bound to any -     * other context.  -     * -     * A dummy hHWContext is created for this context, and is used by the GL -     * core when a hardware lock is required but the drawable is not currently -     * bound (e.g., potentially during a SwapBuffers request).  The dummy -     * context is created when the first "real" context is created on this -     * screen. -     */ -    __DRIcontext dummyContextPriv; - -    /**       * Device-dependent private information (not stored in the SAREA).       *        * This pointer is never touched by the DRI layer.       */      void *private; -    /** -     * Pointer back to the \c __DRIscreen that contains this structure. -     */ -    __DRIscreen *psc; -      /* Extensions provided by the loader. */      const __DRIgetDrawableInfoExtension *getDrawableInfo;      const __DRIsystemTimeExtension *systemTime; @@ -549,11 +529,9 @@ struct __DRIscreenRec {      /* The lock actually in use, old sarea or DRI2 */      drmLock *lock; -}; - -extern void -__driUtilMessage(const char *f, ...); +    driOptionCache optionCache; +};  extern void  __driUtilUpdateDrawableInfo(__DRIdrawable *pdp); diff --git a/src/mesa/drivers/dri/common/drisw_util.c b/src/mesa/drivers/dri/common/drisw_util.c new file mode 100644 index 0000000000..8d08b93bfb --- /dev/null +++ b/src/mesa/drivers/dri/common/drisw_util.c @@ -0,0 +1,272 @@ +/* + * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. + * All Rights Reserved. + * Copyright 2010 George Sapountzis <gsapountzis@gmail.com> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file drisw_util.c + * + * DRISW utility functions, i.e. dri_util.c stripped from drm-specific bits. + */ + +#include "drisw_util.h" +#include "utils.h" + + +/** + * Screen functions + */ + +static void +setupLoaderExtensions(__DRIscreen *psp, +		      const __DRIextension **extensions) +{ +    int i; + +    for (i = 0; extensions[i]; i++) { +	if (strcmp(extensions[i]->name, __DRI_SWRAST_LOADER) == 0) +	    psp->swrast_loader = (__DRIswrastLoaderExtension *) extensions[i]; +    } +} + +static __DRIscreen * +driCreateNewScreen(int scrn, const __DRIextension **extensions, +		   const __DRIconfig ***driver_configs, void *data) +{ +    static const __DRIextension *emptyExtensionList[] = { NULL }; +    __DRIscreen *psp; + +    (void) data; + +    psp = CALLOC_STRUCT(__DRIscreenRec); +    if (!psp) +	return NULL; + +    setupLoaderExtensions(psp, extensions); + +    psp->extensions = emptyExtensionList; +    psp->fd = -1; +    psp->myNum = scrn; + +    *driver_configs = driDriverAPI.InitScreen(psp); + +    if (*driver_configs == NULL) { +	FREE(psp); +	return NULL; +    } + +    return psp; +} + +static void driDestroyScreen(__DRIscreen *psp) +{ +    if (psp) { +	driDriverAPI.DestroyScreen(psp); + +	FREE(psp); +    } +} + +static const __DRIextension **driGetExtensions(__DRIscreen *psp) +{ +    return psp->extensions; +} + + +/** + * Context functions + */ + +static __DRIcontext * +driCreateNewContext(__DRIscreen *psp, const __DRIconfig *config, +		    __DRIcontext *shared, void *data) +{ +    __DRIcontext *pcp; +    void * const shareCtx = (shared != NULL) ? shared->driverPrivate : NULL; + +    pcp = CALLOC_STRUCT(__DRIcontextRec); +    if (!pcp) +	return NULL; + +    pcp->loaderPrivate = data; + +    pcp->driScreenPriv = psp; +    pcp->driDrawablePriv = NULL; +    pcp->driReadablePriv = NULL; + +    if (!driDriverAPI.CreateContext(&config->modes, pcp, shareCtx)) { +	FREE(pcp); +	return NULL; +    } + +    return pcp; +} + +static void +driDestroyContext(__DRIcontext *pcp) +{ +    if (pcp) { +	driDriverAPI.DestroyContext(pcp); +	FREE(pcp); +    } +} + +static int +driCopyContext(__DRIcontext *dst, __DRIcontext *src, unsigned long mask) +{ +    return GL_FALSE; +} + +static void dri_get_drawable(__DRIdrawable *pdp); +static void dri_put_drawable(__DRIdrawable *pdp); + +static int driBindContext(__DRIcontext *pcp, +			  __DRIdrawable *pdp, +			  __DRIdrawable *prp) +{ +    /* Bind the drawable to the context */ +    if (pcp) { +	pcp->driDrawablePriv = pdp; +	pcp->driReadablePriv = prp; +	if (pdp) { +	    pdp->driContextPriv = pcp; +	    dri_get_drawable(pdp); +	} +	if ( prp && pdp != prp ) { +	    dri_get_drawable(prp); +	} +    } + +    return driDriverAPI.MakeCurrent(pcp, pdp, prp); +} + +static int driUnbindContext(__DRIcontext *pcp) +{ +    __DRIdrawable *pdp; +    __DRIdrawable *prp; + +    if (pcp == NULL) +	return GL_FALSE; + +    pdp = pcp->driDrawablePriv; +    prp = pcp->driReadablePriv; + +    /* already unbound */ +    if (!pdp && !prp) +	return GL_TRUE; + +    driDriverAPI.UnbindContext(pcp); + +    dri_put_drawable(pdp); + +    if (prp != pdp) { +	dri_put_drawable(prp); +    } + +    pcp->driDrawablePriv = NULL; +    pcp->driReadablePriv = NULL; + +    return GL_TRUE; +} + + +/** + * Drawable functions + */ + +static void dri_get_drawable(__DRIdrawable *pdp) +{ +    pdp->refcount++; +} + +static void dri_put_drawable(__DRIdrawable *pdp) +{ +    if (pdp) { +	pdp->refcount--; +	if (pdp->refcount) +	    return; + +	driDriverAPI.DestroyBuffer(pdp); + +	FREE(pdp); +    } +} + +static __DRIdrawable * +driCreateNewDrawable(__DRIscreen *psp, +		     const __DRIconfig *config, void *data) +{ +    __DRIdrawable *pdp; + +    pdp = CALLOC_STRUCT(__DRIdrawableRec); +    if (!pdp) +	return NULL; + +    pdp->loaderPrivate = data; + +    pdp->driScreenPriv = psp; +    pdp->driContextPriv = NULL; + +    dri_get_drawable(pdp); + +    if (!driDriverAPI.CreateBuffer(psp, pdp, &config->modes, GL_FALSE)) { +	FREE(pdp); +	return NULL; +    } + +    pdp->lastStamp = 1; /* const */ + +    return pdp; +} + +static void +driDestroyDrawable(__DRIdrawable *pdp) +{ +    dri_put_drawable(pdp); +} + +static void driSwapBuffers(__DRIdrawable *pdp) +{ +    driDriverAPI.SwapBuffers(pdp); +} + +const __DRIcoreExtension driCoreExtension = { +    { __DRI_CORE, __DRI_CORE_VERSION }, +    NULL, /* driCreateNewScreen */ +    driDestroyScreen, +    driGetExtensions, +    driGetConfigAttrib, +    driIndexConfigAttrib, +    NULL, /* driCreateNewDrawable */ +    driDestroyDrawable, +    driSwapBuffers, +    driCreateNewContext, +    driCopyContext, +    driDestroyContext, +    driBindContext, +    driUnbindContext +}; + +const __DRIswrastExtension driSWRastExtension = { +    { __DRI_SWRAST, __DRI_SWRAST_VERSION }, +    driCreateNewScreen, +    driCreateNewDrawable +}; diff --git a/src/mesa/drivers/dri/common/drisw_util.h b/src/mesa/drivers/dri/common/drisw_util.h new file mode 100644 index 0000000000..08d5a116e9 --- /dev/null +++ b/src/mesa/drivers/dri/common/drisw_util.h @@ -0,0 +1,132 @@ +/* + * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. + * All Rights Reserved. + * Copyright 2010 George Sapountzis <gsapountzis@gmail.com> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * @file + * Binding of the DRI interface (dri_interface.h) for DRISW. + * + * The DRISW structs are 'base classes' of the corresponding DRI1 / DRI2 (DRM) + * structs. The bindings for SW and DRM can be unified by making the DRM structs + * 'sub-classes' of the SW structs, either proper or with field re-ordering. + * + * The code can also be unified but that requires cluttering the common code + * with ifdef's and guarding with (__DRIscreen::fd >= 0) for DRM. + */ + +#ifndef _DRISW_UTIL_H +#define _DRISW_UTIL_H + +#include <GL/gl.h> +#include <GL/internal/glcore.h> +#include <GL/internal/dri_interface.h> +typedef struct _drmLock drmLock; + + +/** + * Extensions + */ +extern const __DRIcoreExtension driCoreExtension; +extern const __DRIswrastExtension driSWRastExtension; + + +/** + * Driver callback functions + */ +struct __DriverAPIRec { +    const __DRIconfig **(*InitScreen) (__DRIscreen * priv); + +    void (*DestroyScreen)(__DRIscreen *driScrnPriv); + +    GLboolean (*CreateContext)(const __GLcontextModes *glVis, +                               __DRIcontext *driContextPriv, +                               void *sharedContextPrivate); + +    void (*DestroyContext)(__DRIcontext *driContextPriv); + +    GLboolean (*CreateBuffer)(__DRIscreen *driScrnPriv, +                              __DRIdrawable *driDrawPriv, +                              const __GLcontextModes *glVis, +                              GLboolean pixmapBuffer); + +    void (*DestroyBuffer)(__DRIdrawable *driDrawPriv); + +    void (*SwapBuffers)(__DRIdrawable *driDrawPriv); + +    GLboolean (*MakeCurrent)(__DRIcontext *driContextPriv, +                             __DRIdrawable *driDrawPriv, +                             __DRIdrawable *driReadPriv); + +    GLboolean (*UnbindContext)(__DRIcontext *driContextPriv); +}; + +extern const struct __DriverAPIRec driDriverAPI; + + +/** + * Data types + */ +struct __DRIscreenRec { +    int myNum; + +    int fd; + +    void *private; + +    const __DRIextension **extensions; + +    const __DRIswrastLoaderExtension *swrast_loader; +}; + +struct __DRIcontextRec { + +    void *driverPrivate; + +    void *loaderPrivate; + +    __DRIdrawable *driDrawablePriv; + +    __DRIdrawable *driReadablePriv; + +    __DRIscreen *driScreenPriv; +}; + +struct __DRIdrawableRec { + +    void *driverPrivate; + +    void *loaderPrivate; + +    __DRIcontext *driContextPriv; + +    __DRIscreen *driScreenPriv; + +    int refcount; + +    /* gallium */ +    unsigned int lastStamp; + +    int w; +    int h; +}; + +#endif /* _DRISW_UTIL_H */ diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index b85b364c57..0dd879abc9 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -37,6 +37,29 @@  #include "utils.h" +/** + * Print message to \c stderr if the \c LIBGL_DEBUG environment variable + * is set.  + *  + * Is called from the drivers. + *  + * \param f \c printf like format string. + */ +void +__driUtilMessage(const char *f, ...) +{ +    va_list args; + +    if (getenv("LIBGL_DEBUG")) { +        fprintf(stderr, "libGL: "); +        va_start(args, f); +        vfprintf(stderr, f, args); +        va_end(args); +        fprintf(stderr, "\n"); +    } +} + +  unsigned  driParseDebugString( const char * debug,   		     const struct dri_debug_control * control  ) @@ -230,9 +253,6 @@ void driInitSingleExtension( GLcontext * ctx,  /**   * Utility function used by drivers to test the verions of other components.   * - * If one of the version requirements is not met, a message is logged using - * \c __driUtilMessage. - *   * \param driver_name  Name of the driver.  Used in error messages.   * \param driActual    Actual DRI version supplied __driCreateNewScreen.   * \param driExpected  Minimum DRI version required by the driver. @@ -244,7 +264,7 @@ void driInitSingleExtension( GLcontext * ctx,   * \returns \c GL_TRUE if all version requirements are met.  Otherwise,   *          \c GL_FALSE is returned.   *  - * \sa __driCreateNewScreen, driCheckDriDdxDrmVersions2, __driUtilMessage + * \sa __driCreateNewScreen, driCheckDriDdxDrmVersions2   *   * \todo   * Now that the old \c driCheckDriDdxDrmVersions function is gone, this diff --git a/src/mesa/drivers/dri/common/utils.h b/src/mesa/drivers/dri/common/utils.h index 02ca3feb73..de6070c398 100644 --- a/src/mesa/drivers/dri/common/utils.h +++ b/src/mesa/drivers/dri/common/utils.h @@ -69,6 +69,9 @@ struct __DRIutilversionRec2 {      int    patch;        /**< Patch-level. */  }; +extern void +__driUtilMessage(const char *f, ...); +  extern unsigned driParseDebugString( const char * debug,      const struct dri_debug_control * control ); diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c index a6d6c999a7..738b1ae97f 100644 --- a/src/mesa/drivers/dri/common/xmlconfig.c +++ b/src/mesa/drivers/dri/common/xmlconfig.c @@ -36,7 +36,7 @@  #include <unistd.h>  #include <errno.h>  #include "main/imports.h" -#include "dri_util.h" +#include "utils.h"  #include "xmlconfig.h"  #undef GET_PROGRAM_NAME  | 
