Fix a missed merge for idr's dispatch changes: failure to do driInitExtensions
authorEric Anholt <anholt@FreeBSD.org>
Tue, 18 Oct 2005 23:48:59 +0000 (23:48 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Tue, 18 Oct 2005 23:48:59 +0000 (23:48 +0000)
in __driCreateNewScreen_20050727 resulted in crashing in dispatch.  Rendering
remains broken.

src/mesa/drivers/dri/sis/sis_context.c
src/mesa/drivers/dri/sis/sis_screen.c

index 6f48eed721ef0ed16f3f9b8cf2ebdb26f098df33..cfb7700afa28ed91cf4ea28524775a7008b889aa 100644 (file)
@@ -64,7 +64,7 @@ int GlobalCurrentHwcx = -1;
 int GlobalHwcxCountBase = 1;
 int GlobalCmdQueueLen = 0;
 
-const struct dri_extension card_extensions[] =
+struct dri_extension card_extensions[] =
 {
     { "GL_ARB_multisample",                GL_ARB_multisample_functions },
     { "GL_ARB_multitexture",               NULL },
index 604ffda2dc49a5ba76ac3ebea94bae64d6313c92..3e6fe5a4df2f906a918e18a8dc03b2a8d67bab05 100644 (file)
@@ -59,6 +59,7 @@ DRI_CONF_BEGIN
 DRI_CONF_END;
 static const GLuint __driNConfigOptions = 2;
 
+extern const struct dri_extension card_extensions[];
 
 static __GLcontextModes *
 sisFillInModes(int bpp)
@@ -443,6 +444,16 @@ void * __driCreateNewScreen_20050727( __DRInativeDisplay *dpy, int scrn,
    if (psp != NULL) {
       SISDRIPtr dri_priv = (SISDRIPtr)psp->pDevPriv;
       *driver_modes = sisFillInModes(dri_priv->bytesPerPixel * 8);
+
+      /* Calling driInitExtensions here, with a NULL context pointer, does not actually
+       * enable the extensions.  It just makes sure that all the dispatch offsets for all
+       * the extensions that *might* be enables are known.  This is needed because the
+       * dispatch offsets need to be known when _mesa_context_create is called, but we can't
+       * enable the extensions until we have a context pointer.
+       *
+       * Hello chicken.  Hello egg.  How are you two today?
+       */
+      driInitExtensions( NULL, card_extensions, GL_FALSE );
    }
 
    return (void *)psp;