Move media stream counter entry points to new extension.
diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h
index d9fc7a5..0709f3e 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -493,6 +493,10 @@
     __DRIframeTrackingExtension *frameTracking;
 #endif
 
+#ifdef __DRI_MEDIA_STREAM_COUNTER
+    __DRImediaStreamCounterExtension *msc;
+#endif
+
 #endif
 
     /**
diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c
index 2b0403d..a680c64 100644
--- a/src/glx/x11/glxcmds.c
+++ b/src/glx/x11/glxcmds.c
@@ -1931,19 +1931,18 @@
     * FIXME: there should be a GLX encoding for this call.  I can find no
     * FIXME: documentation for the GLX encoding.
     */
-#ifdef GLX_DIRECT_RENDERING
+#ifdef __DRI_MEDIA_STREAM_COUNTER
    GLXContext gc = __glXGetCurrentContext();
 
 
    if ( (gc != NULL) && gc->isDirect ) {
       __GLXscreenConfigs * const psc = GetGLXScreenConfigs( gc->currentDpy,
 							    gc->screen );
-      if ( __glXExtensionBitIsEnabled( psc, SGI_video_sync_bit )
-	   && psc->driScreen.private && psc->driScreen.getMSC) {
+      if (psc->msc != NULL && psc->driScreen.private != NULL) {
 	 int       ret;
 	 int64_t   temp;
 
-	 ret = psc->driScreen.getMSC(&psc->driScreen, &temp);
+	 ret = psc->msc->getMSC(&psc->driScreen, &temp);
 	 *count = (unsigned) temp;
 	 return (ret == 0) ? 0 : GLX_BAD_CONTEXT;
       }
@@ -1956,7 +1955,7 @@
 
 static int __glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
 {
-#ifdef GLX_DIRECT_RENDERING
+#ifdef __DRI_MEDIA_STREAM_COUNTER
    GLXContext gc = __glXGetCurrentContext();
 
    if ( divisor <= 0 || remainder < 0 )
@@ -1965,17 +1964,16 @@
    if ( (gc != NULL) && gc->isDirect ) {
       __GLXscreenConfigs * const psc = GetGLXScreenConfigs( gc->currentDpy,
 							    gc->screen );
-      if ( __glXExtensionBitIsEnabled( psc, SGI_video_sync_bit )
-	   && psc->driScreen.private ) {
+      if (psc->msc != NULL && psc->driScreen.private ) {
 	 __DRIdrawable * const pdraw = 
 	     GetDRIDrawable(gc->currentDpy, gc->currentDrawable, NULL);
-	 if ( (pdraw != NULL) && (pdraw->waitForMSC != NULL) ) {
+	 if (pdraw != NULL) {
 	    int       ret;
 	    int64_t   msc;
 	    int64_t   sbc;
 
-	    ret = (*pdraw->waitForMSC)(pdraw, 0,
-				       divisor, remainder, &msc, &sbc);
+	    ret = (*psc->msc->waitForMSC)(pdraw, 0,
+					  divisor, remainder, &msc, &sbc);
 	    *count = (unsigned) msc;
 	    return (ret == 0) ? 0 : GLX_BAD_CONTEXT;
 	 }
@@ -2130,7 +2128,7 @@
 static Bool __glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable,
 				  int64_t *ust, int64_t *msc, int64_t *sbc)
 {
-#ifdef GLX_DIRECT_RENDERING
+#if defined(__DRI_SWAP_BUFFER_COUNTER) && defined(__DRI_MEDIA_STREAM_COUNTER)
     __GLXdisplayPrivate * const priv = __glXInitialize(dpy);
 
     if ( priv != NULL ) {
@@ -2139,11 +2137,10 @@
 	__GLXscreenConfigs * const psc = &priv->screenConfigs[i];
 
 	assert( (pdraw == NULL) || (i != -1) );
-	return ( (pdraw && pdraw->getSBC && psc->driScreen.getMSC)
-		 && __glXExtensionBitIsEnabled( psc, OML_sync_control_bit )
-		 && ((*psc->driScreen.getMSC)(&psc->driScreen, msc) == 0)
-		 && ((*pdraw->getSBC)(pdraw, sbc ) == 0)
-		 && (__glXGetUST( ust ) == 0) );
+	return ( (pdraw && psc->sbc && psc->msc)
+		 && ((*psc->msc->getMSC)(&psc->driScreen, msc) == 0)
+		 && ((*psc->sbc->getSBC)(pdraw, sbc) == 0)
+		 && (__glXGetUST(ust) == 0) );
     }
 #else
    (void) dpy;
@@ -2248,7 +2245,7 @@
 				      int64_t target_msc, int64_t divisor,
 				      int64_t remainder)
 {
-#ifdef GLX_DIRECT_RENDERING
+#ifdef __DRI_SWAP_BUFFER_COUNTER
    int screen;
    __DRIdrawable *pdraw = GetDRIDrawable( dpy, drawable, & screen );
    __GLXscreenConfigs * const psc = GetGLXScreenConfigs( dpy, screen );
@@ -2263,10 +2260,10 @@
    if ( divisor > 0 && remainder >= divisor )
       return -1;
 
-   if ( (pdraw != NULL) && (pdraw->swapBuffersMSC != NULL)
-       && __glXExtensionBitIsEnabled( psc, OML_sync_control_bit ) ) {
-      return (*pdraw->swapBuffersMSC)(pdraw, target_msc, divisor, remainder);
-   }
+   if (pdraw != NULL && psc->counters != NULL)
+      return (*psc->sbc->swapBuffersMSC)(pdraw, target_msc,
+					 divisor, remainder);
+
 #else
    (void) dpy;
    (void) drawable;
@@ -2283,7 +2280,7 @@
 			       int64_t remainder, int64_t *ust,
 			       int64_t *msc, int64_t *sbc)
 {
-#ifdef GLX_DIRECT_RENDERING
+#ifdef __DRI_MEDIA_STREAM_COUNTER
    int screen;
    __DRIdrawable *pdraw = GetDRIDrawable( dpy, drawable, & screen );
    __GLXscreenConfigs * const psc = GetGLXScreenConfigs( dpy, screen );
@@ -2297,10 +2294,9 @@
    if ( divisor > 0 && remainder >= divisor )
       return False;
 
-   if ( (pdraw != NULL) && (pdraw->waitForMSC != NULL)
-	&& __glXExtensionBitIsEnabled( psc, OML_sync_control_bit ) ) {
-      ret = (*pdraw->waitForMSC)(pdraw, target_msc,
-				 divisor, remainder, msc, sbc);
+   if (pdraw != NULL && psc->msc != NULL) {
+      ret = (*psc->msc->waitForMSC)(pdraw, target_msc,
+				    divisor, remainder, msc, sbc);
 
       /* __glXGetUST returns zero on success and non-zero on failure.
        * This function returns True on success and False on failure.
@@ -2325,7 +2321,7 @@
 			       int64_t target_sbc, int64_t *ust,
 			       int64_t *msc, int64_t *sbc )
 {
-#ifdef GLX_DIRECT_RENDERING
+#ifdef __DRI_SWAP_BUFFER_COUNTER
    int screen;
    __DRIdrawable *pdraw = GetDRIDrawable( dpy, drawable, & screen );
    __GLXscreenConfigs * const psc = GetGLXScreenConfigs( dpy, screen );
@@ -2337,9 +2333,8 @@
    if ( target_sbc < 0 )
       return False;
 
-   if ( (pdraw != NULL) && (pdraw->waitForSBC != NULL)
-	&& __glXExtensionBitIsEnabled( psc, OML_sync_control_bit )) {
-      ret = (*pdraw->waitForSBC)(pdraw, target_sbc, msc, sbc);
+   if (pdraw != NULL && psc->sbc != NULL) {
+      ret = (*psc->sbc->waitForSBC)(pdraw, target_sbc, msc, sbc);
 
       /* __glXGetUST returns zero on success and non-zero on failure.
        * This function returns True on success and False on failure.
diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index 8a70e67..643db48 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -1051,10 +1051,23 @@
 	if (strcmp(extensions[i]->name, __DRI_FRAME_TRACKING) == 0) {
 	    psc->frameTracking = (__DRIframeTrackingExtension *) extensions[i];
 	    __glXScrEnableExtension(&psc->driScreen,
-				    "GLX_MESA_swap_frame_usage");	    
+				    "GLX_MESA_swap_frame_usage");
 	}
 #endif
 
+#ifdef __DRI_MEDIA_STREAM_COUNTER
+	if (strcmp(extensions[i]->name, __DRI_MEDIA_STREAM_COUNTER) == 0) {
+	    psc->msc = (__DRImediaStreamCounterExtension *) extensions[i];
+	    __glXScrEnableExtension(&psc->driScreen,
+				    "GLX_SGI_video_sync");
+	}
+#endif
+
+#ifdef __DRI_SWAP_BUFFER_COUNTER
+	/* No driver supports this at this time and the extension is
+	 * not defined in dri_interface.h.  Will enable
+	 * GLX_OML_sync_control if implemented. */
+#endif
 	/* Ignore unknown extensions */
     }
 }
diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index 7815f36..e20c4fe 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -358,31 +358,6 @@
     return sPriv->DriverAPI.GetMSC( sPriv, msc );
 }
 
-/**
- * Called directly from a number of higher-level GLX functions.
- */
-static int driGetSBC(__DRIdrawable *drawable, int64_t *sbc)
-{
-   __DRIdrawablePrivate *dPriv = drawable->private;
-   __DRIswapInfo  sInfo;
-   int  status;
-
-
-   status = dPriv->driScreenPriv->DriverAPI.GetSwapInfo( dPriv, & sInfo );
-   *sbc = sInfo.swap_count;
-
-   return status;
-}
-
-static int driWaitForSBC(__DRIdrawable *drawable, int64_t target_sbc,
-			 int64_t * msc, int64_t * sbc)
-{
-    __DRIdrawablePrivate *dPriv = drawable->private;
-
-    return dPriv->driScreenPriv->DriverAPI.WaitForSBC( dPriv, target_sbc,
-                                                       msc, sbc );
-}
-
 static int driWaitForMSC(__DRIdrawable *drawable, int64_t target_msc,
 			 int64_t divisor, int64_t remainder,
 			 int64_t * msc, int64_t * sbc)
@@ -409,15 +384,11 @@
     return status;
 }
 
-static int64_t driSwapBuffersMSC(__DRIdrawable *drawable, int64_t target_msc,
-				 int64_t divisor, int64_t remainder)
-{
-    __DRIdrawablePrivate *dPriv = drawable->private;
-
-    return dPriv->driScreenPriv->DriverAPI.SwapBuffersMSC( dPriv, target_msc,
-                                                           divisor, 
-                                                           remainder );
-}
+const __DRImediaStreamCounterExtension driMediaStreamCounterExtension = {
+    { __DRI_MEDIA_STREAM_COUNTER },
+    driGetMSC,
+    driWaitForMSC,
+};
 
 static void driCopySubBuffer(__DRIdrawable *drawable,
 			      int x, int y, int w, int h)
@@ -506,11 +477,6 @@
     pdraw->destroyDrawable = driDestroyDrawable;
     pdraw->swapBuffers = driSwapBuffers;  /* called by glXSwapBuffers() */
 
-    pdraw->getSBC = driGetSBC;
-    pdraw->waitForSBC = driWaitForSBC;
-    pdraw->waitForMSC = driWaitForMSC;
-    pdraw->swapBuffersMSC = driSwapBuffersMSC;
-
     /* This special default value is replaced with the configured
      * default value when the drawable is first bound to a direct
      * rendering context. 
@@ -776,7 +742,6 @@
     psc->destroyScreen     = driDestroyScreen;
     psc->getExtensions     = driGetExtensions;
     psc->createNewDrawable = driCreateNewDrawable;
-    psc->getMSC            = driGetMSC;
     psc->createNewContext  = driCreateNewContext;
 
     if (internal_api_version >= 20070121)
diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h
index a7149bc..e43a5b7 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -79,6 +79,7 @@
 extern const __DRIcopySubBufferExtension driCopySubBufferExtension;
 extern const __DRIswapControlExtension driSwapControlExtension;
 extern const __DRIframeTrackingExtension driFrameTrackingExtension;
+extern const __DRImediaStreamCounterExtension driMediaStreamCounterExtension;
 
 /**
  * Used by DRI_VALIDATE_DRAWABLE_INFO
diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c
index 041ff6b..60d3758 100644
--- a/src/mesa/drivers/dri/i915/intel_screen.c
+++ b/src/mesa/drivers/dri/i915/intel_screen.c
@@ -431,6 +431,7 @@
     &driSwapControlExtension.base,
     &intelAllocateExtension.base,
     &driFrameTrackingExtension.base,
+    &driMediaStreamCounterExtension.base,
     NULL
 };
 
@@ -539,7 +540,6 @@
    sPriv->extensions = intelExtensions;
 
    if (glx_enable_extension != NULL) {
-      (*glx_enable_extension) (sPriv->psc, "GLX_SGI_video_sync");
       (*glx_enable_extension) (sPriv->psc, "GLX_SGI_make_current_read");
    }
 
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index ed8d207..a4d6359 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -268,6 +268,7 @@
     &driCopySubBufferExtension.base,
     &driSwapControlExtension.base,
     &driFrameTrackingExtension.base,
+    &driMediaStreamCounterExtension.base,
     NULL
 };
 
@@ -358,10 +359,8 @@
 
    sPriv->extensions = intelExtensions;
 
-   if (glx_enable_extension != NULL) {
-      (*glx_enable_extension)( sPriv->psc, "GLX_SGI_video_sync" );
+   if (glx_enable_extension != NULL)
       (*glx_enable_extension)( sPriv->psc, "GLX_SGI_make_current_read" );
-   }
    
    return GL_TRUE;
 }
diff --git a/src/mesa/drivers/dri/mach64/mach64_screen.c b/src/mesa/drivers/dri/mach64/mach64_screen.c
index adbed09..04eb081 100644
--- a/src/mesa/drivers/dri/mach64/mach64_screen.c
+++ b/src/mesa/drivers/dri/mach64/mach64_screen.c
@@ -208,8 +208,6 @@
 {
    mach64ScreenPtr mach64Screen;
    ATIDRIPtr serverInfo = (ATIDRIPtr)sPriv->pDevPriv;
-   PFNGLXSCRENABLEEXTENSIONPROC glx_enable_extension =
-     (PFNGLXSCRENABLEEXTENSIONPROC) (*dri_interface->getProcAddress("glxEnableExtension"));
    int i;
 
    if (sPriv->devPrivSize != sizeof(ATIDRIRec)) {
@@ -321,12 +319,9 @@
 
    i = 0;
    mach64Screen->extensions[i++] = &driFrameTrackingExtension.base;
-   if ( glx_enable_extension != NULL ) {
-      if ( mach64Screen->irq != 0 ) {
-	 mach64Screen->extensions[i++] = &driSwapControlExtension.base;
-
-	 (*glx_enable_extension)( sPriv->psc, "GLX_SGI_video_sync" );
-      }
+   if ( mach64Screen->irq != 0 ) {
+      mach64Screen->extensions[i++] = &driSwapControlExtension.base;
+      mach64Screen->extensions[i++] = &driMediaStreamCounterExtension.base;
    }
    mach64Screen->extensions[i++] = NULL;
    sPriv->extensions = mach64Screen->extensions;
diff --git a/src/mesa/drivers/dri/mach64/mach64_screen.h b/src/mesa/drivers/dri/mach64/mach64_screen.h
index 732cb3f..766554d 100644
--- a/src/mesa/drivers/dri/mach64/mach64_screen.h
+++ b/src/mesa/drivers/dri/mach64/mach64_screen.h
@@ -74,7 +74,7 @@
 
    driOptionCache optionCache;
 
-   const __DRIextension *extensions[3];
+   const __DRIextension *extensions[4];
 } mach64ScreenRec, *mach64ScreenPtr;
 
 #endif /* __MACH64_SCREEN_H__ */
diff --git a/src/mesa/drivers/dri/mga/mga_xmesa.c b/src/mesa/drivers/dri/mga/mga_xmesa.c
index 198c5d5..6f13835 100644
--- a/src/mesa/drivers/dri/mga/mga_xmesa.c
+++ b/src/mesa/drivers/dri/mga/mga_xmesa.c
@@ -196,6 +196,7 @@
 static const __DRIextension *mgaExtensions[] = {
     &driSwapControlExtension.base,
     &driFrameTrackingExtension.base,
+    &driMediaStreamCounterExtension.base,
     NULL
 };
 
@@ -242,10 +243,8 @@
 
    sPriv->extensions = mgaExtensions;
 
-   if ( glx_enable_extension != NULL ) {
+   if ( glx_enable_extension != NULL )
       (*glx_enable_extension)( sPriv->psc, "GLX_SGI_make_current_read" );
-      (*glx_enable_extension)( sPriv->psc, "GLX_SGI_video_sync" );
-   }
 
    if (serverInfo->chipset != MGA_CARD_TYPE_G200 &&
        serverInfo->chipset != MGA_CARD_TYPE_G400) {
diff --git a/src/mesa/drivers/dri/r128/r128_screen.c b/src/mesa/drivers/dri/r128/r128_screen.c
index c7bd876..9d65ebd 100644
--- a/src/mesa/drivers/dri/r128/r128_screen.c
+++ b/src/mesa/drivers/dri/r128/r128_screen.c
@@ -98,8 +98,6 @@
 {
    r128ScreenPtr r128Screen;
    R128DRIPtr r128DRIPriv = (R128DRIPtr)sPriv->pDevPriv;
-   PFNGLXSCRENABLEEXTENSIONPROC glx_enable_extension =
-     (PFNGLXSCRENABLEEXTENSIONPROC) (*dri_interface->getProcAddress("glxEnableExtension"));
    int i;
 
    if (sPriv->devPrivSize != sizeof(R128DRIRec)) {
@@ -228,11 +226,9 @@
 
    i = 0;
    r128Screen->extensions[i++] = &driFrameTrackingExtension.base;
-   if ( glx_enable_extension != NULL ) {
-      if ( r128Screen->irq != 0 ) {
-	  r128Screen->extensions[i++] = &driSwapControlExtension.base;
-	 (*glx_enable_extension)( sPriv->psc, "GLX_SGI_video_sync" );
-      }
+   if ( r128Screen->irq != 0 ) {
+       r128Screen->extensions[i++] = &driSwapControlExtension.base;
+       r128Screen->extensions[i++] = &driMediaStreamCounterExtension.base;
    }
    r128Screen->extensions[i++] = NULL;
    sPriv->extensions = r128Screen->extensions;
diff --git a/src/mesa/drivers/dri/r128/r128_screen.h b/src/mesa/drivers/dri/r128/r128_screen.h
index 75dc084..c333713 100644
--- a/src/mesa/drivers/dri/r128/r128_screen.h
+++ b/src/mesa/drivers/dri/r128/r128_screen.h
@@ -78,7 +78,7 @@
    /* Configuration cache with default values for all contexts */
    driOptionCache optionCache;
 
-   const __DRIextension *extensions[3];
+   const __DRIextension *extensions[4];
 
 } r128ScreenRec, *r128ScreenPtr;
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c
index 4eaff65..56493f5 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -745,15 +745,12 @@
    i = 0;
    screen->extensions[i++] = &driCopySubBufferExtension.base;
    screen->extensions[i++] = &driFrameTrackingExtension.base;
-
-   if ( glx_enable_extension != NULL ) {
-      if ( screen->irq != 0 ) {
-	  screen->extensions[i++] = &driSwapControlExtension.base;
-	 (*glx_enable_extension)( sPriv->psc, "GLX_SGI_video_sync" );
-      }
-
-      (*glx_enable_extension)( sPriv->psc, "GLX_SGI_make_current_read" );
+   if ( screen->irq != 0 ) {
+       screen->extensions[i++] = &driSwapControlExtension.base;
+       screen->extensions[i++] = &driMediaStreamCounterExtension.base;
    }
+   if ( glx_enable_extension != NULL )
+      (*glx_enable_extension)( sPriv->psc, "GLX_SGI_make_current_read" );
 
 #if RADEON_COMMON && defined(RADEON_COMMON_FOR_R200)
    if (IS_R200_CLASS(screen))
diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.h b/src/mesa/drivers/dri/radeon/radeon_screen.h
index 1001210..0caac17 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.h
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.h
@@ -104,7 +104,7 @@
    /* Configuration cache with default values for all contexts */
    driOptionCache optionCache;
 
-   const __DRIextension *extensions[5];
+   const __DRIextension *extensions[6];
 } radeonScreenRec, *radeonScreenPtr;
 
 #define IS_R100_CLASS(screen) \
diff --git a/src/mesa/drivers/dri/unichrome/via_screen.c b/src/mesa/drivers/dri/unichrome/via_screen.c
index 025d8f6..fddf079 100644
--- a/src/mesa/drivers/dri/unichrome/via_screen.c
+++ b/src/mesa/drivers/dri/unichrome/via_screen.c
@@ -177,14 +177,14 @@
 
     i = 0;
     viaScreen->extensions[i++] = &driFrameTrackingExtension.base;
-    if ( glx_enable_extension != NULL ) {
-       if ( viaScreen->irqEnabled ) {
-	  viaScreen->extensions[i++] = &driSwapControlExtension.base;
-	  (*glx_enable_extension)( sPriv->psc, "GLX_SGI_video_sync" );
-       }
-
-       (*glx_enable_extension)( sPriv->psc, "GLX_SGI_make_current_read" );
+    if ( viaScreen->irqEnabled ) {
+	viaScreen->extensions[i++] = &driSwapControlExtension.base;
+	viaScreen->extensions[i++] = &driMediaStreamCounterExtension.base;
     }
+
+    if ( glx_enable_extension != NULL )
+       (*glx_enable_extension)( sPriv->psc, "GLX_SGI_make_current_read" );
+
     viaScreen->extensions[i++] = NULL;
     sPriv->extensions = viaScreen->extensions;
 
diff --git a/src/mesa/drivers/dri/unichrome/via_screen.h b/src/mesa/drivers/dri/unichrome/via_screen.h
index 3dc52ba..5e5bc85 100644
--- a/src/mesa/drivers/dri/unichrome/via_screen.h
+++ b/src/mesa/drivers/dri/unichrome/via_screen.h
@@ -71,7 +71,7 @@
     /* Configuration cache with default values for all contexts */
     driOptionCache optionCache;
 
-    const __DRIextension *extensions[3];
+    const __DRIextension *extensions[4];
 } viaScreenPrivate;