xserver: Branch 'master' - 2 commits

Kristian Høgsberg krh at kemper.freedesktop.org
Mon Oct 29 15:14:44 PDT 2007


 GL/glx/glxscreens.c            |   57 ++++++++++++++++++++++++++++-------------
 hw/xfree86/common/xf86Config.c |    2 -
 hw/xfree86/dixmods/glxmodule.c |    2 -
 hw/xfree86/dri/xf86dri.c       |    2 -
 mi/miinitext.c                 |   20 +++++++-------
 5 files changed, 52 insertions(+), 31 deletions(-)

New commits:
commit 692654b4300e61a9481e6fa588bcb44a3c3ca150
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Mon Oct 29 18:13:58 2007 -0400

    Set up visuals for the existing X visuals.
    
    This makes the root visual a GLX capable visual again and adds a GLX visual
    for the COMPOSITE ARGB visual cleanly (as opposed to the hack we had before).

diff --git a/GL/glx/glxscreens.c b/GL/glx/glxscreens.c
index 3151400..d600253 100644
--- a/GL/glx/glxscreens.c
+++ b/GL/glx/glxscreens.c
@@ -396,38 +396,61 @@ initGlxVisual(VisualPtr visual, __GLcontextModes *config)
     visual->offsetBlue = findFirstSet(config->blueMask);
 }
 
-static void
-addMinimalSet(__GLXscreen *pGlxScreen)
+typedef struct {
+    GLboolean doubleBuffer;
+    GLboolean depthBuffer;
+} FBConfigTemplateRec, *FBConfigTemplatePtr;
+
+static __GLcontextModes *
+pickFBConfig(__GLXscreen *pGlxScreen, FBConfigTemplatePtr template, int class)
 {
     __GLcontextModes *config;
-    VisualPtr visuals;
-    int depth;
 
     for (config = pGlxScreen->fbconfigs; config != NULL; config = config->next) {
 	if (config->visualRating != GLX_NONE)
 	    continue;
-	if (config->doubleBufferMode && config->depthBits > 0)
-	    break;
+	if (_gl_convert_to_x_visual_type(config->visualType) != class)
+	    continue;
+	if ((config->doubleBufferMode > 0) != template->doubleBuffer)
+	    continue;
+	if ((config->depthBits > 0) != template->depthBuffer)
+	    continue;
+
+	return config;
     }
-    if (config == NULL)
-	config = pGlxScreen->fbconfigs;
 
-    pGlxScreen->visuals = xcalloc(1, sizeof (__GLcontextModes *));
+    return NULL;
+}
+
+static void
+addMinimalSet(__GLXscreen *pGlxScreen)
+{
+    __GLcontextModes *config;
+    VisualPtr visuals;
+    int i;
+    FBConfigTemplateRec best = { GL_TRUE, GL_TRUE };
+    FBConfigTemplateRec minimal = { GL_FALSE, GL_FALSE };
+
+    pGlxScreen->visuals = xcalloc(pGlxScreen->pScreen->numVisuals,
+				  sizeof (__GLcontextModes *));
     if (pGlxScreen->visuals == NULL) {
 	ErrorF("Failed to allocate for minimal set of GLX visuals\n");
 	return;
     }
 
-    depth = config->redBits + config->greenBits + config->blueBits;
-    visuals = AddScreenVisuals(pGlxScreen->pScreen, 1, depth);
-    if (visuals == NULL) {
-	xfree(pGlxScreen->visuals);
-	return;
+    pGlxScreen->numVisuals = pGlxScreen->pScreen->numVisuals;
+    visuals = pGlxScreen->pScreen->visuals;
+    for (i = 0; i < pGlxScreen->numVisuals; i++) {
+	if (visuals[i].nplanes == 32)
+	    config = pickFBConfig(pGlxScreen, &minimal, visuals[i].class);
+	else
+	    config = pickFBConfig(pGlxScreen, &best, visuals[i].class);
+	if (config == NULL)
+	    config = pGlxScreen->fbconfigs;
+	pGlxScreen->visuals[i] = config;
+	config->visualID = visuals[i].vid;
     }
 
-    pGlxScreen->numVisuals = 1;
-    pGlxScreen->visuals[0] = config;
-    initGlxVisual(&visuals[0], config);
 }
 
 static void
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 35b62a2..b8929c3 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1094,7 +1094,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
     }
 
 #ifdef GLXEXT
-    xf86Info.glxVisuals = XF86_GlxVisualsAll;
+    xf86Info.glxVisuals = XF86_GlxVisualsTypical;
     xf86Info.glxVisualsFrom = X_DEFAULT;
     if ((s = xf86GetOptValString(FlagOptions, FLAG_GLX_VISUALS))) {
 	if (!xf86NameCmp(s, "minimal")) {
diff --git a/hw/xfree86/dri/xf86dri.c b/hw/xfree86/dri/xf86dri.c
index 130afdf..ea11b38 100644
--- a/hw/xfree86/dri/xf86dri.c
+++ b/hw/xfree86/dri/xf86dri.c
@@ -322,8 +322,6 @@ ProcXF86DRICreateContext(
 {
     xXF86DRICreateContextReply	rep;
     ScreenPtr pScreen;
-    VisualPtr visual;
-    int i;
 
     REQUEST(xXF86DRICreateContextReq);
     REQUEST_SIZE_MATCH(xXF86DRICreateContextReq);
commit a5546a99ac4da61aee0d49c55bcb38bbce9a96aa
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Mon Oct 29 18:06:41 2007 -0400

    Change the GLX module to initialize after COMPOSITE.
    
    This changes the module initalization order so that the GLX module initializes
    after COMPOSITE.  The reason for this change is to be able to initialize a
    GLX visual config for the COMPOSITE ARGB visual.

diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index 847f0d4..0ff867d 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -45,7 +45,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 static MODULESETUPPROTO(glxSetup);
 
-static const char *initdeps[] = { "DOUBLE-BUFFER", NULL };
+static const char *initdeps[] = { "DOUBLE-BUFFER", "COMPOSITE", NULL };
 
 static ExtensionModule GLXExt =
 {
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 556bfc8..b40e8bd 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -630,16 +630,6 @@ InitExtensions(argc, argv)
     if (!noXFree86DRIExtension) XFree86DRIExtensionInit();
 #endif
 #endif
-
-#ifdef GLXEXT
-#ifdef INXDARWINAPP
-    DarwinGlxPushProvider(__DarwinglXMesaProvider);
-    if (!noGlxExtension) DarwinGlxExtensionInit();
-#else
-    GlxPushProvider(&__glXMesaProvider);
-    if (!noGlxExtension) GlxExtensionInit();
-#endif // INXDARWINAPP
-#endif // GLXEXT
 #ifdef XFIXES
     /* must be before Render to layer DisplayCursor correctly */
     if (!noXFixesExtension) XFixesExtensionInit();
@@ -665,6 +655,16 @@ InitExtensions(argc, argv)
 #ifdef DAMAGE
     if (!noDamageExtension) DamageExtensionInit();
 #endif
+
+#ifdef GLXEXT
+#ifdef INXDARWINAPP
+    DarwinGlxPushProvider(__DarwinglXMesaProvider);
+    if (!noGlxExtension) DarwinGlxExtensionInit();
+#else
+    GlxPushProvider(&__glXMesaProvider);
+    if (!noGlxExtension) GlxExtensionInit();
+#endif
+#endif
 }
 
 void


More information about the xorg-commit mailing list