dri: Add DRI entrypoints to create a context for a given API
[mesa.git] / src / mesa / drivers / dri / savage / savage_xmesa.c
index 8e879ca41c0c263ac1c2b37d49dc4d6127bcc3f6..cbdc9c87eebb720d91df9fb6bee3f54efd49abb8 100644 (file)
@@ -44,6 +44,7 @@
 #include "tnl/t_pipeline.h"
 
 #include "drivers/common/driverfuncs.h"
+#include "drivers/common/meta.h"
 
 #include "savagedd.h"
 #include "savagestate.h"
@@ -179,7 +180,7 @@ savageInitDriver(__DRIscreen *sPriv)
    }
 
    /* Allocate the private area */
-   savageScreen = (savageScreenPrivate *)_mesa_malloc(sizeof(savageScreenPrivate));
+   savageScreen = (savageScreenPrivate *)malloc(sizeof(savageScreenPrivate));
    if (!savageScreen)
       return GL_FALSE;
 
@@ -226,7 +227,7 @@ savageInitDriver(__DRIscreen *sPriv)
                  savageScreen->agpTextures.handle,
                  savageScreen->agpTextures.size,
                  (drmAddress *)&(savageScreen->agpTextures.map)) != 0) {
-          _mesa_free(savageScreen);
+          free(savageScreen);
           sPriv->private = NULL;
           return GL_FALSE;
        }
@@ -246,7 +247,7 @@ savageInitDriver(__DRIscreen *sPriv)
              savageScreen->aperture.size, 
              (drmAddress *)&savageScreen->aperture.map) != 0) 
    {
-      _mesa_free(savageScreen);
+      free(savageScreen);
       sPriv->private = NULL;
       return GL_FALSE;
    }
@@ -282,12 +283,13 @@ savageDestroyScreen(__DRIscreen *sPriv)
    /* free all option information */
    driDestroyOptionInfo (&savageScreen->optionCache);
 
-   _mesa_free(savageScreen);
+   free(savageScreen);
    sPriv->private = NULL;
 }
 
 static GLboolean
-savageCreateContext( const __GLcontextModes *mesaVis,
+savageCreateContext( gl_api api,
+                    const __GLcontextModes *mesaVis,
                     __DRIcontext *driContextPriv,
                     void *sharedContextPrivate )
 {
@@ -300,7 +302,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
                                                 savageScreen->sarea_priv_offset);
    int textureSize[SAVAGE_NR_TEX_HEAPS];
    int i;
-   imesa = (savageContextPtr)_mesa_calloc(sizeof(savageContext));
+   imesa = (savageContextPtr)calloc(1, sizeof(savageContext));
    if (!imesa) {
       return GL_FALSE;
    }
@@ -317,7 +319,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
       shareCtx = NULL;
    ctx = _mesa_create_context(mesaVis, shareCtx, &functions, imesa);
    if (!ctx) {
-      _mesa_free(imesa);
+      free(imesa);
       return GL_FALSE;
    }
    driContextPriv->driverPrivate = imesa;
@@ -436,7 +438,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
    if (ctx->Const.MaxTextureLevels <= 6) { /*spec requires at least 64x64*/
        __driUtilMessage("Not enough texture memory. "
                        "Falling back to indirect rendering.");
-       _mesa_free(imesa);
+       free(imesa);
        return GL_FALSE;
    }
 
@@ -473,6 +475,8 @@ savageCreateContext( const __GLcontextModes *mesaVis,
    imesa->CurrentTexObj[0] = 0;
    imesa->CurrentTexObj[1] = 0;
 
+   _mesa_meta_init( ctx );
+
    /* Initialize the software rasterizer and helper modules.
     */
    _swrast_CreateContext( ctx );
@@ -564,6 +568,8 @@ savageDestroyContext(__DRIcontext *driContextPriv)
       free(imesa->cmdBuf.base);
       free(imesa->clientVtxBuf.buf);
 
+      _mesa_meta_free( imesa->glCtx );
+
       _swsetup_DestroyContext(imesa->glCtx );
       _tnl_DestroyContext( imesa->glCtx );
       _vbo_DestroyContext( imesa->glCtx );
@@ -574,7 +580,7 @@ savageDestroyContext(__DRIcontext *driContextPriv)
       _mesa_destroy_context(imesa->glCtx);
 
       /* no longer use vertex_dma_buf*/
-      _mesa_free(imesa);
+      free(imesa);
    }
 }
 
@@ -939,7 +945,7 @@ savageFillInModes( __DRIscreen *psp,
                               depth_bits_array, stencil_bits_array,
                               depth_buffer_factor,
                               back_buffer_modes, back_buffer_factor,
-                               msaa_samples_array, 1);
+                               msaa_samples_array, 1, GL_TRUE);
     if (configs == NULL) {
        fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
                 __func__, __LINE__ );