Move enabling of DRI extensions into glxextensions.c
authorKristian Høgsberg <krh@hinata.boston.redhat.com>
Thu, 17 May 2007 19:47:47 +0000 (15:47 -0400)
committerKristian Høgsberg <krh@redhat.com>
Thu, 11 Oct 2007 15:26:47 +0000 (11:26 -0400)
src/glx/x11/glxext.c
src/glx/x11/glxextensions.c
src/glx/x11/glxextensions.h

index 580faec0d00323299ab6a4cd10b5e3cfae7cc69c..7b25ad717a30619d407e6f76955c13e6b46d3fe7 100644 (file)
@@ -997,73 +997,6 @@ CallCreateNewScreen(Display *dpy, int scrn, __GLXscreenConfigs *psc,
     return psp;
 }
 
-static void queryExtensions(__GLXscreenConfigs *psc)
-{
-    const __DRIextension **extensions;
-    int i;
-
-    extensions = psc->driScreen.getExtensions(&psc->driScreen);
-    for (i = 0; extensions[i]; i++) {
-#ifdef __DRI_COPY_SUB_BUFFER
-       if (strcmp(extensions[i]->name, __DRI_COPY_SUB_BUFFER) == 0) {
-           psc->copySubBuffer = (__DRIcopySubBufferExtension *) extensions[i];
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "GLX_MESA_copy_sub_buffer");
-       }
-#endif
-
-#ifdef __DRI_SWAP_CONTROL
-       if (strcmp(extensions[i]->name, __DRI_SWAP_CONTROL) == 0) {
-           psc->swapControl = (__DRIswapControlExtension *) extensions[i];
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "GLX_SGI_swap_control");
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "GLX_MESA_swap_control");
-       }
-#endif
-
-#ifdef __DRI_ALLOCATE
-       if (strcmp(extensions[i]->name, __DRI_ALLOCATE) == 0) {
-           psc->allocate = (__DRIallocateExtension *) extensions[i];
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "GLX_SGI_swap_control");
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "GLX_MESA_swap_control");
-       }
-#endif
-
-#ifdef __DRI_FRAME_TRACKING
-       if (strcmp(extensions[i]->name, __DRI_FRAME_TRACKING) == 0) {
-           psc->frameTracking = (__DRIframeTrackingExtension *) extensions[i];
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "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
-
-#ifdef __DRI_READ_DRAWABLE
-       if (strcmp(extensions[i]->name, __DRI_READ_DRAWABLE) == 0) {
-           __glXScrEnableExtension(&psc->driScreen,
-                                   "GLX_SGI_make_current_read");
-       }
-#endif
-       /* Ignore unknown extensions */
-    }
-}
-
 #endif /* GLX_DIRECT_RENDERING */
 
 
@@ -1259,7 +1192,7 @@ static Bool AllocAndFetchScreenConfigs(Display *dpy, __GLXdisplayPrivate *priv)
                                        & priv->driDisplay,
                                        priv->driDisplay.createNewScreen[i] );
                if (psc->driScreen.private != NULL)
-                   queryExtensions(psc);
+                   __glXScrEnableDRIExtension(psc);
            }
        }
 #endif
index 96964d1db1020c6156bd7047f064b2df2fe0d45e..84f556e0cc83a48f1d6252edfbf864ef6fc6b4d3 100644 (file)
@@ -358,28 +358,66 @@ __glXProcessServerString( const struct extension_info * ext,
 
 #ifdef GLX_DIRECT_RENDERING
 
-/**
- * Enable a named GLX extension on a given screen.
- * Drivers should not call this function directly.  They should instead use
- * \c glXGetProcAddress to obtain a pointer to the function.
- *
- * \param psc   Pointer to GLX per-screen record.
- * \param name  Name of the extension to enable.
- *
- * \sa glXGetProcAddress
- *
- * \since Internal API version 20030813.
- */
 void
-__glXScrEnableExtension( __DRIscreen *driScreen, const char * name )
+__glXScrEnableDRIExtension(__GLXscreenConfigs *psc)
 {
-    __GLXscreenConfigs *psc =
-       containerOf(driScreen, __GLXscreenConfigs, driScreen);
+    const __DRIextension **extensions;
+    int i;
 
-   __glXExtensionsCtr();
-   __glXExtensionsCtrScreen(psc);
-   set_glx_extension( known_glx_extensions, name, strlen( name ), GL_TRUE,
-                     psc->direct_support );
+    __glXExtensionsCtr();
+    __glXExtensionsCtrScreen(psc);
+
+    extensions = psc->driScreen.getExtensions(&psc->driScreen);
+    for (i = 0; extensions[i]; i++) {
+#ifdef __DRI_COPY_SUB_BUFFER
+       if (strcmp(extensions[i]->name, __DRI_COPY_SUB_BUFFER) == 0) {
+           psc->copySubBuffer = (__DRIcopySubBufferExtension *) extensions[i];
+           SET_BIT(psc->direct_support, MESA_copy_sub_buffer_bit);
+       }
+#endif
+
+#ifdef __DRI_SWAP_CONTROL
+       if (strcmp(extensions[i]->name, __DRI_SWAP_CONTROL) == 0) {
+           psc->swapControl = (__DRIswapControlExtension *) extensions[i];
+           SET_BIT(psc->direct_support, SGI_swap_control_bit);
+           SET_BIT(psc->direct_support, MESA_swap_control_bit);
+       }
+#endif
+
+#ifdef __DRI_ALLOCATE
+       if (strcmp(extensions[i]->name, __DRI_ALLOCATE) == 0) {
+           psc->allocate = (__DRIallocateExtension *) extensions[i];
+           SET_BIT(psc->direct_support, MESA_allocate_memory_bit);
+       }
+#endif
+
+#ifdef __DRI_FRAME_TRACKING
+       if (strcmp(extensions[i]->name, __DRI_FRAME_TRACKING) == 0) {
+           psc->frameTracking = (__DRIframeTrackingExtension *) extensions[i];
+           SET_BIT(psc->direct_support, MESA_swap_frame_usage_bit);
+       }
+#endif
+
+#ifdef __DRI_MEDIA_STREAM_COUNTER
+       if (strcmp(extensions[i]->name, __DRI_MEDIA_STREAM_COUNTER) == 0) {
+           psc->msc = (__DRImediaStreamCounterExtension *) extensions[i];
+           SET_BIT(psc->direct_support, SGI_video_sync_bit);
+       }
+#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
+
+#ifdef __DRI_READ_DRAWABLE
+       if (strcmp(extensions[i]->name, __DRI_READ_DRAWABLE) == 0) {
+           SET_BIT(psc->direct_support, SGI_make_current_read_bit);
+       }
+#endif
+       /* Ignore unknown extensions */
+    }
 }
 
 #endif
index 62bbf116e93033bd7183d98af1c06a27d2882ae4..144b02ad0335546e1c37d2742bbad46c938e47eb 100644 (file)
@@ -236,10 +236,7 @@ extern void __glXCalculateUsableExtensions( struct __GLXscreenConfigsRec *psc,
     GLboolean display_is_direct_capable, int server_minor_version );
 
 #ifdef GLX_DIRECT_RENDERING
-
-struct __DRIscreenRec;
-extern void __glXScrEnableExtension( struct __DRIscreenRec *driScreen, const char * name );
-
+extern void __glXScrEnableDRIExtension( struct __GLXscreenConfigsRec *psc );
 #endif
 
 extern void __glXCalculateUsableGLExtensions( struct __GLXcontextRec * gc,