driCheckDriDdxDrmVersion uses a function that is not available to
authorIan Romanick <idr@us.ibm.com>
Wed, 2 Jun 2004 22:48:03 +0000 (22:48 +0000)
committerIan Romanick <idr@us.ibm.com>
Wed, 2 Jun 2004 22:48:03 +0000 (22:48 +0000)
drivers when DRI_NEW_INTERFACE_ONLY is defined.  #ifndef it away in
that situation.

Add a new function, driCheckDriDdxDrmVersion2, that is passed in the
version information that is already supplied to __driCreateNewScreen.
Part of the reason that information is supplied to
__driCreateNewScreen is so that the driver doesn't have to make those
calls to get it!

Modify all drivers that support the new interface to use the new
function instead of the old.  As soon as all drivers support the new
interface, driCheckDriDdxDrmVersion can be removed.

src/mesa/drivers/dri/common/utils.c
src/mesa/drivers/dri/common/utils.h
src/mesa/drivers/dri/i810/i810screen.c
src/mesa/drivers/dri/i830/i830_screen.c
src/mesa/drivers/dri/mach64/mach64_screen.c
src/mesa/drivers/dri/mga/mga_xmesa.c
src/mesa/drivers/dri/r200/r200_screen.c
src/mesa/drivers/dri/radeon/radeon_screen.c
src/mesa/drivers/dri/tdfx/tdfx_screen.c

index d337cb6b948b7b56e4ce707b8c097380483afc83..8574e06e75ac52f6ad813a8747c9f18ee491f82f 100644 (file)
 #include "extensions.h"
 #include "utils.h"
 
+#if !defined( DRI_NEW_INTERFACE_ONLY ) && !defined( _SOLO )
+#include "xf86dri.h"        /* For XF86DRIQueryVersion prototype. */
+#endif
+
 #if defined(USE_X86_ASM)
 #include "x86/common_x86_asm.h"
 #endif
@@ -145,6 +149,17 @@ void driInitExtensions( GLcontext * ctx,
 
 
 
+#ifndef DRI_NEW_INTERFACE_ONLY
+/**
+ * Utility function used by drivers to test the verions of other components.
+ * 
+ * \deprecated
+ * All drivers using the new interface should use \c driCheckDriDdxVersions2
+ * instead.  This function is implemented using a call that is not available
+ * to drivers using the new interface.  Furthermore, the information gained
+ * by this call (the DRI and DDX version information) is already provided to
+ * the driver via the new interface.
+ */
 GLboolean
 driCheckDriDdxDrmVersions(__DRIscreenPrivate *sPriv,
                          const char * driver_name,
@@ -160,7 +175,7 @@ driCheckDriDdxDrmVersions(__DRIscreenPrivate *sPriv,
    /* Check the DRI version */
    if (XF86DRIQueryVersion(sPriv->display, &major, &minor, &patch)) {
       if (major != dri_major || minor < dri_minor) {
-        __driUtilMessage(format, "DRI", driver_name, dri_major, dri_minor,
+        __driUtilMessage(format, driver_name, "DRI", dri_major, dri_minor,
                          major, minor, patch);
         return GL_FALSE;
       }
@@ -168,7 +183,7 @@ driCheckDriDdxDrmVersions(__DRIscreenPrivate *sPriv,
 
    /* Check that the DDX driver version is compatible */
    if (sPriv->ddxMajor != ddx_major || sPriv->ddxMinor < ddx_minor) {
-      __driUtilMessage(format, "DDX", driver_name, ddx_major, ddx_minor,
+      __driUtilMessage(format, driver_name, "DDX", ddx_major, ddx_minor,
                       sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch);
       return GL_FALSE;
    }
@@ -178,13 +193,77 @@ driCheckDriDdxDrmVersions(__DRIscreenPrivate *sPriv,
    
    /* Check that the DRM driver version is compatible */
    if (sPriv->drmMajor != drm_major || sPriv->drmMinor < drm_minor) {
-      __driUtilMessage(format, "DRM", driver_name, drm_major, drm_minor,
+      __driUtilMessage(format, driver_name, "DRM", drm_major, drm_minor,
                       sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch);
       return GL_FALSE;
    }
 
    return GL_TRUE;
 }
+#endif /* DRI_NEW_INTERFACE_ONLY */
+
+/**
+ * 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.
+ * \param ddxActual    Actual DDX version supplied __driCreateNewScreen.
+ * \param ddxExpected  Minimum DDX version required by the driver.
+ * \param drmActual    Actual DRM version supplied __driCreateNewScreen.
+ * \param drmExpected  Minimum DRM version required by the driver.
+ * 
+ * \returns \c GL_TRUE if all version requirements are met.  Otherwise,
+ *          \c GL_FALSE is returned.
+ * 
+ * \sa __driCreateNewScreen, driCheckDriDdxDrmVersions, __driUtilMessage
+ */
+GLboolean
+driCheckDriDdxDrmVersions2(const char * driver_name,
+                          const __DRIversion * driActual,
+                          const __DRIversion * driExpected,
+                          const __DRIversion * ddxActual,
+                          const __DRIversion * ddxExpected,
+                          const __DRIversion * drmActual,
+                          const __DRIversion * drmExpected)
+{
+   static const char format[] = "%s DRI driver expected %s version %d.%d.x "
+       "but got version %d.%d.%d";
+
+
+   /* Check the DRI version */
+   if ( (driActual->major != driExpected->major)
+       || (driActual->minor < driExpected->minor) ) {
+      __driUtilMessage(format, driver_name, "DRI",
+                      driExpected->major, driExpected->minor,
+                      driActual->major, driActual->minor, driActual->patch);
+      return GL_FALSE;
+   }
+
+   /* Check that the DDX driver version is compatible */
+   if ( (ddxActual->major != ddxExpected->major)
+       || (ddxActual->minor < ddxExpected->minor) ) {
+      __driUtilMessage(format, driver_name, "DDX",
+                      ddxExpected->major, ddxExpected->minor,
+                      ddxActual->major, ddxActual->minor, ddxActual->patch);
+      return GL_FALSE;
+   }
+   
+   /* Check that the DRM driver version is compatible */
+   if ( (drmActual->major != drmExpected->major)
+       || (drmActual->minor < drmExpected->minor) ) {
+      __driUtilMessage(format, driver_name, "DRM",
+                      drmExpected->major, drmExpected->minor,
+                      drmActual->major, drmActual->minor, drmActual->patch);
+      return GL_FALSE;
+   }
+
+   return GL_TRUE;
+}
+
 
 GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
                                    GLint *x, GLint *y,
index 401a1b882f5f733dfdacece648810bb651f9fce5..3f24ef73db9f1a49ab9034ae06141cbaf51592f3 100644 (file)
@@ -47,9 +47,16 @@ extern unsigned driGetRendererString( char * buffer,
 extern void driInitExtensions( GLcontext * ctx, 
     const char * const card_extensions[], GLboolean enable_imaging );
 
+#ifndef DRI_NEW_INTERFACE_ONLY
 extern GLboolean driCheckDriDdxDrmVersions( __DRIscreenPrivate *sPriv,
     const char * driver_name, int dri_major, int dri_minor,
     int ddx_major, int ddx_minor, int drm_major, int drm_minor );
+#endif
+
+extern GLboolean driCheckDriDdxDrmVersions2(const char * driver_name,
+    const __DRIversion * driActual, const __DRIversion * driExpected,
+    const __DRIversion * ddxActual, const __DRIversion * ddxExpected,
+    const __DRIversion * drmActual, const __DRIversion * drmExpected);
 
 extern GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
                                           GLint *x, GLint *y,
index 4071b8bcc128b204cf6fad5c0adfad820d725d52..8f78a686153fded316101aa412fcd61f5d221c09 100644 (file)
@@ -230,8 +230,6 @@ i810InitDriver(__DRIscreenPrivate *sPriv)
    i810ScreenPrivate *i810Screen;
    I810DRIPtr         gDRIPriv = (I810DRIPtr)sPriv->pDevPriv;
 
-   if ( ! driCheckDriDdxDrmVersions( sPriv, "i810", 4, 0, 1, 0, 1, 2 ) )
-     return GL_FALSE;
 
    /* Allocate the private area */
    i810Screen = (i810ScreenPrivate *)CALLOC(sizeof(i810ScreenPrivate));
@@ -436,6 +434,16 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
 
 {
    __DRIscreenPrivate *psp;
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 1, 0, 0 };
+   static const __DRIversion drm_expected = { 1, 2, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "i810",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
 
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,
index bedab612a1abd1147c5359d598b6144155382b87..9d580c78ad15aaa4e98910f56f8fa8c0683bbaf1 100644 (file)
@@ -140,25 +140,6 @@ static GLboolean i830InitDriver(__DRIscreenPrivate *sPriv)
    i830ScreenPrivate *i830Screen;
    I830DRIPtr         gDRIPriv = (I830DRIPtr)sPriv->pDevPriv;
 
-   /* Check the DRI externsion version */
-   if ( sPriv->driMajor != 4 || sPriv->driMinor < 0 ) {
-      __driUtilMessage( "i830 DRI driver expected DRI version 4.0.x "
-                        "but got version %d.%d.%d",
-                        sPriv->driMajor, sPriv->driMinor, sPriv->driPatch );
-      return GL_FALSE;
-   }
-
-   /* Check that the DDX driver version is compatible */
-   if (sPriv->ddxMajor != 1 || sPriv->ddxMinor < 0) {
-      __driUtilMessage("i830 DRI driver expected DDX driver version 1.0.x but got version %d.%d.%d", sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch);
-      return GL_FALSE;
-   }
-               
-   /* Check that the DRM driver version is compatible */
-   if (sPriv->drmMajor != 1 || sPriv->drmMinor < 3) {
-      __driUtilMessage("i830 DRI driver expected DRM driver version 1.3.x but got version %d.%d.%d", sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch);
-      return GL_FALSE;
-   }
 
    /* Allocate the private area */
    i830Screen = (i830ScreenPrivate *)CALLOC(sizeof(i830ScreenPrivate));
@@ -565,6 +546,16 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
                             
 {
    __DRIscreenPrivate *psp;
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 1, 0, 0 };
+   static const __DRIversion drm_expected = { 1, 3, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "i830",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
 
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,
index 11513446c96901951f153c1ad13b1c6ed42bded4..8ec10ea1101d1dd302a86a28946e33a7a53ea19e 100644 (file)
@@ -216,9 +216,6 @@ mach64CreateScreen( __DRIscreenPrivate *sPriv )
    if ( MACH64_DEBUG & DEBUG_VERBOSE_DRI ) 
       fprintf( stderr, "%s\n", __FUNCTION__ );
 
-   if ( ! driCheckDriDdxDrmVersions( sPriv, "Mach64", 4, 0, 6, 4, 1, 0 ) )
-      return NULL;
-
    /* Allocate the private area */
    mach64Screen = (mach64ScreenPtr) CALLOC( sizeof(*mach64Screen) );
    if ( !mach64Screen ) return NULL;
@@ -540,6 +537,16 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
                             
 {
    __DRIscreenPrivate *psp;
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 6, 4, 0 };
+   static const __DRIversion drm_expected = { 1, 0, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "Mach64",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
 
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,
index 8aa647a268fe564f18eb3507541f20700d915bd7..358c599ebacc9c3897a98b60a52db4756163ed38 100644 (file)
@@ -229,8 +229,6 @@ mgaInitDriver(__DRIscreenPrivate *sPriv)
    mgaScreenPrivate *mgaScreen;
    MGADRIPtr         serverInfo = (MGADRIPtr)sPriv->pDevPriv;
 
-   if ( ! driCheckDriDdxDrmVersions( sPriv, "MGA", 4, 0, 1, 0, 3, 0 ) )
-      return GL_FALSE;
 
    /* Allocate the private area */
    mgaScreen = (mgaScreenPrivate *)MALLOC(sizeof(mgaScreenPrivate));
@@ -967,6 +965,16 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
                             
 {
    __DRIscreenPrivate *psp;
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 1, 0, 0 };
+   static const __DRIversion drm_expected = { 3, 0, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "MGA",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
 
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,
index b34ba89e2de309f54310666ac93bedc9e9deb726..868f623ee8640f3833a77cea33a9a7db8b1c7ce8 100644 (file)
@@ -272,8 +272,6 @@ r200CreateScreen( __DRIscreenPrivate *sPriv )
    RADEONDRIPtr dri_priv = (RADEONDRIPtr)sPriv->pDevPriv;
    unsigned char *RADEONMMIO;
 
-   if ( ! driCheckDriDdxDrmVersions( sPriv, "R200", 4, 0, 4, 0, 1, 5 ) )
-      return NULL;
 
    /* Allocate the private area */
    screen = (r200ScreenPtr) CALLOC( sizeof(*screen) );
@@ -672,7 +670,17 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
                             
 {
    __DRIscreenPrivate *psp;
-
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 4, 0, 0 };
+   static const __DRIversion drm_expected = { 1, 5, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "R200",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
+      
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,
                                  frame_buffer, pSAREA, fd,
index a85be20e861a7cff8d4ae9b708b7d153b6d877d8..25d5be5790b5dac1a96849e20134738c216b37d2 100644 (file)
@@ -251,8 +251,6 @@ radeonScreenPtr radeonCreateScreen( __DRIscreenPrivate *sPriv )
    RADEONDRIPtr dri_priv = (RADEONDRIPtr)sPriv->pDevPriv;
    unsigned char *RADEONMMIO;
 
-   if ( ! driCheckDriDdxDrmVersions( sPriv, "Radeon", 4, 0, 4, 0, 1, 3 ) )
-      return NULL;
 
    /* Allocate the private area */
    screen = (radeonScreenPtr) CALLOC( sizeof(*screen) );
@@ -600,6 +598,16 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
 
 {
    __DRIscreenPrivate *psp;
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 4, 0, 0 };
+   static const __DRIversion drm_expected = { 1, 3, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "Radeon",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
 
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,
index b78da2ca8fa3f5623be33409ab593d6f33894ade..370f3283c8a2e08a4a06afb3896d75d649e12a35 100644 (file)
@@ -121,34 +121,6 @@ tdfxInitDriver( __DRIscreenPrivate *sPriv )
       fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *)sPriv );
    }
 
-   /* Check the DRI externsion version */
-   if ( sPriv->driMajor != 4 || sPriv->driMinor < 0 ) {
-       __driUtilMessage( "tdfx DRI driver expected DRI version 4.0.x "
-                         "but got version %d.%d.%d",
-                         sPriv->driMajor, sPriv->driMinor, sPriv->driPatch );
-       return GL_FALSE;
-   }
-
-   /* Check that the DDX driver version is compatible */
-   if ( sPriv->ddxMajor != 1 ||
-       sPriv->ddxMinor < 0 ) {
-      __driUtilMessage(
-              "3dfx DRI driver expected DDX driver version 1.0.x "
-              "but got version %d.%d.%d",
-              sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch );
-      return GL_FALSE;
-   }
-
-   /* Check that the DRM driver version is compatible */
-   if ( sPriv->drmMajor != 1 ||
-       sPriv->drmMinor < 0 ) {
-      __driUtilMessage(
-              "3dfx DRI driver expected DRM driver version 1.0.x "
-              "but got version %d.%d.%d",
-              sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch );
-      return GL_FALSE;
-   }
-
    if ( !tdfxCreateScreen( sPriv ) ) {
       tdfxDestroyScreen( sPriv );
       return GL_FALSE;
@@ -413,6 +385,16 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
                             __GLcontextModes ** driver_modes )
 {
    __DRIscreenPrivate *psp;
+   static const __DRIversion ddx_expected = { 4, 0, 0 };
+   static const __DRIversion dri_expected = { 1, 0, 0 };
+   static const __DRIversion drm_expected = { 1, 0, 0 };
+
+   if ( ! driCheckDriDdxDrmVersions2( "tdfx",
+                                     dri_version, & dri_expected,
+                                     ddx_version, & ddx_expected,
+                                     drm_version, & drm_expected ) ) {
+      return NULL;
+   }
 
    psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
                                  ddx_version, dri_version, drm_version,