On 09/27/2012 02:44 PM, Adam Jackson wrote:
Mesa no longer supports rendering to anything less.  GLX 1.2 requires
that the server advertise at least one GLX visual.  GLX 1.3 and 1.4 are
more subtle: they require at least one fbconfig capable of window
rendering, and _also_ require that window-capable fbconfigs have a
non-zero value for the GLX_VISUAL_ID.  In either case we should refuse
to init GLX if there's not at least one GL-capable visual on at least
one screen.

Signed-off-by: Adam Jackson <[email protected]>
---
  glx/glxext.c |   21 +++++++++++++++++++++
  1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/glx/glxext.c b/glx/glxext.c
index bc7fe82..078a4f7 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -315,6 +315,23 @@ GlxPushProvider(__GLXprovider * provider)
      __glXProviderStack = provider;
  }

+static Bool
+checkScreenVisuals(void)
+{
+    int i, j;
+
+    for (i = 0; i < screenInfo.numScreens; i++) {
+        ScreenPtr screen = screenInfo.screens[i];
+        for (j = 0; j < screen->numVisuals; j++) {
+            if (screen->visuals[j].class == TrueColor ||
+                screen->visuals[j].class == DirectColor)
+                return True;
+        }
+    }
+
+    return False;
+}
+
  /*
  ** Initialize the GLX extension.
  */
@@ -333,6 +350,10 @@ GlxExtensionInit(void)
          *stack = &__glXDRISWRastProvider;
      }

+    /* Mesa requires at least one True/DirectColor visual */
+    if (!checkScreenVisuals())
+        return;
+

Should this log some sort of message to indicate the reason for failure?

      __glXContextRes = CreateNewResourceType((DeleteType) ContextGone,
                                              "GLXContext");
      __glXDrawableRes = CreateNewResourceType((DeleteType) DrawableGone,


_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to