115cc5d
diff --git a/composite/compext.c b/composite/compext.c
115cc5d
index 4c25cc7..af05b4a 100644
115cc5d
--- a/composite/compext.c
115cc5d
+++ b/composite/compext.c
115cc5d
@@ -678,6 +678,25 @@ CompositeExtensionInit (void)
115cc5d
     ExtensionEntry  *extEntry;
115cc5d
     int		    s;
115cc5d
 
115cc5d
+    for (s = 0; s < screenInfo.numScreens; s++) {
115cc5d
+	ScreenPtr pScreen = screenInfo.screens[s];
115cc5d
+	VisualPtr vis;
115cc5d
+
115cc5d
+	/* Composite on 8bpp pseudocolor root windows appears to fail, so
115cc5d
+	 * just disable it on anything pseudocolor for safety.
115cc5d
+	 */
115cc5d
+	for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++)
115cc5d
+	    ;
115cc5d
+	if ((vis->class | DynamicClass) == PseudoColor)
115cc5d
+	    return;
115cc5d
+
115cc5d
+	/* Ensure that Render is initialized, which is required for automatic
115cc5d
+	 * compositing.
115cc5d
+	 */
115cc5d
+	if (GetPictureScreenIfSet(pScreen) == NULL)
115cc5d
+	    return;
115cc5d
+    }
115cc5d
+
115cc5d
     CompositeClientWindowType = CreateNewResourceType (FreeCompositeClientWindow);
115cc5d
     if (!CompositeClientWindowType)
115cc5d
 	return;