6582489 X11R7.4: Xorg server 1.5.3, Mesa 7.2, and associated driver updates
Includes changes contributed by Liang, Kan <
[email protected]>:
- G41 support patches
- DRM_CAS in libdrm type error can cause deadlock and hang the glxgears.
Includes changes contributed by Martin Bochnig <
[email protected]>:
- Make SUNWxorg-mesa package platform-clean
diff -urp -x '*~' -x '*.orig' hw/xfree86/common/xf86Mode.c hw/xfree86/common/xf86Mode.c
--- hw/xfree86/common/xf86Mode.c 2008-09-24 20:23:48.393454000 -0700
+++ hw/xfree86/common/xf86Mode.c 2008-09-24 20:24:02.313999000 -0700
@@ -1415,7 +1415,45 @@ xf86ValidateModes(ScrnInfoPtr scrp, Disp
virtX = virtualX;
virtY = virtualY;
scrp->virtualFrom = X_CONFIG;
- } else if (!modeNames || !*modeNames) {
+ }
+
+ if ((modeNames == NULL) || (*modeNames == NULL)) {
+ if (UseDefaultRate) {
+ modeNames = xnfcalloc(2, sizeof(char *));
+ modeNames[0] = strdup("1024x768");
+ modeNames[1] = NULL;
+ } else {
+ char *mode_pref = NULL;
+ const int types[] = {
+ M_T_BUILTIN | M_T_PREFERRED,
+ M_T_USERDEF | M_T_PREFERRED,
+ M_T_DRIVER | M_T_PREFERRED
+ };
+ const int ntypes = sizeof(types) / sizeof(int);
+ int n, type;
+ DisplayModePtr modes = scrp->modePool ? scrp->modePool : availModes;
+
+ for (n = 0; n < ntypes; n++) {
+ type = types[n];
+
+ for (p = modes; p != NULL; p = p->next) {
+ if ((p->type & type) == type) {
+ mode_pref = strdup(p->name);
+ break;
+ }
+ }
+ if (mode_pref)
+ break;
+ }
+ if (mode_pref) {
+ modeNames = xnfcalloc(2, sizeof(char *));
+ modeNames[0] = strdup(mode_pref);
+ modeNames[1] = NULL;
+ }
+ }
+ }
+
+ if ((virtualY <= 0) && (!modeNames || !*modeNames)) {
/* No virtual size given in the config, try to infer */
/* XXX this doesn't take m{in,ax}Pitch into account; oh well */
inferred_virtual = inferVirtualSize(scrp, availModes, &virtX, &virtY);
@@ -1500,12 +1538,7 @@ xf86ValidateModes(ScrnInfoPtr scrp, Disp
xf86DeleteMode(&scrp->modes, scrp->modes);
endp = &scrp->modes;
last = NULL;
- if (UseDefaultRate && ((modeNames == NULL) || (*modeNames == NULL))) {
- modeNames = xnfcalloc(2, sizeof(char *));
- modeNames[0] = strdup("1024x768");
- modeNames[1] = NULL;
- }
- if (modeNames != NULL) {
+ if ((modeNames != NULL) && (*modeNames != NULL)) {
for (i = 0; modeNames[i] != NULL; i++) {
userModes = TRUE;
new = xnfcalloc(1, sizeof(DisplayModeRec));