Revert "glx: Implement GLX_EXT_no_config_context (v2)"
[mesa.git] / src / glx / drisw_glx.c
index 110b7f8d92d10c4db96f31e184c700c292a831c6..2f0675addb42a8065bf476702bebd5c2c867529e 100644 (file)
@@ -417,7 +417,8 @@ drisw_create_context_attribs(struct glx_screen *base,
    uint32_t flags;
    unsigned api;
    int reset;
-   uint32_t ctx_attribs[2 * 4];
+   int release;
+   uint32_t ctx_attribs[2 * 5];
    unsigned num_ctx_attribs = 0;
 
    if (!psc->base.driScreen)
@@ -430,7 +431,7 @@ drisw_create_context_attribs(struct glx_screen *base,
     */
    if (!dri2_convert_glx_attribs(num_attribs, attribs,
                                  &major_ver, &minor_ver, &renderType, &flags,
-                                 &api, &reset, error))
+                                 &api, &reset, &release, error))
       return NULL;
 
    /* Check the renderType value */
@@ -441,6 +442,10 @@ drisw_create_context_attribs(struct glx_screen *base,
    if (reset != __DRI_CTX_RESET_NO_NOTIFICATION)
       return NULL;
 
+   if (release != __DRI_CTX_RELEASE_BEHAVIOR_FLUSH &&
+       release != __DRI_CTX_RELEASE_BEHAVIOR_NONE)
+      return NULL;
+
    if (shareList) {
       pcp_shared = (struct drisw_context *) shareList;
       shared = pcp_shared->driContext;
@@ -450,7 +455,7 @@ drisw_create_context_attribs(struct glx_screen *base,
    if (pcp == NULL)
       return NULL;
 
-   if (!glx_context_init(&pcp->base, &psc->base, &config->base)) {
+   if (!glx_context_init(&pcp->base, &psc->base, config_base)) {
       free(pcp);
       return NULL;
    }
@@ -459,6 +464,10 @@ drisw_create_context_attribs(struct glx_screen *base,
    ctx_attribs[num_ctx_attribs++] = major_ver;
    ctx_attribs[num_ctx_attribs++] = __DRI_CTX_ATTRIB_MINOR_VERSION;
    ctx_attribs[num_ctx_attribs++] = minor_ver;
+   if (release != __DRI_CTX_RELEASE_BEHAVIOR_FLUSH) {
+       ctx_attribs[num_ctx_attribs++] = __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR;
+       ctx_attribs[num_ctx_attribs++] = release;
+   }
 
    if (flags != 0) {
       ctx_attribs[num_ctx_attribs++] = __DRI_CTX_ATTRIB_FLAGS;
@@ -474,7 +483,7 @@ drisw_create_context_attribs(struct glx_screen *base,
    pcp->driContext =
       (*psc->swrast->createContextAttribs) (psc->driScreen,
                                            api,
-                                           config->driConfig,
+                                           config ? config->driConfig : 0,
                                            shared,
                                            num_ctx_attribs / 2,
                                            ctx_attribs,
@@ -647,6 +656,10 @@ driswBindExtensions(struct drisw_screen *psc, const __DRIextension **extensions)
          psc->rendererQuery = (__DRI2rendererQueryExtension *) extensions[i];
          __glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer");
       }
+      if (strcmp(extensions[i]->name, __DRI2_FLUSH_CONTROL) == 0) {
+         __glXEnableDirectExtension(&psc->base,
+                                    "GLX_ARB_context_flush_control");
+      }
    }
 }