xserver: Branch 'xorg-server-1.5-apple' - 2 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Fri Jul 31 15:32:41 PDT 2009


 hw/xquartz/GL/visualConfigs.c |   30 ++++++++--------------
 hw/xquartz/Makefile.am        |    1 
 hw/xquartz/darwin.c           |   14 ++++++----
 hw/xquartz/darwin.h           |   14 ----------
 hw/xquartz/darwinfb.h         |   56 ++++++++++++++++++++++++++++++++++++++++++
 hw/xquartz/xpr/xprScreen.c    |    9 ++++++
 6 files changed, 86 insertions(+), 38 deletions(-)

New commits:
commit c230b52c27ce50ac6c27011ec8e88f1b263b25f9
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 31 15:32:07 2009 -0700

    XQuartz: Unify how we set our bitmasks for visuals

diff --git a/hw/xquartz/GL/visualConfigs.c b/hw/xquartz/GL/visualConfigs.c
index 46addaf..fee665d 100644
--- a/hw/xquartz/GL/visualConfigs.c
+++ b/hw/xquartz/GL/visualConfigs.c
@@ -55,8 +55,7 @@
 
 #include "capabilities.h"
 #include "visualConfigs.h"
-
-#define MASK(l,h) (((1 << (1 + h - l)) - 1) << l)
+#include "darwinfb.h"
 
 /* Based originally on code from indirect.c which was based on code from i830_dri.c. */
 __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber) {
@@ -182,29 +181,22 @@ __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber)
                                         }
                                         
                                         // Color
-                                        c->rgbBits = 0;
-                                        
-                                        c->blueBits = conf->color_buffers[color].b;
-                                        c->blueMask = MASK(c->rgbBits, c->rgbBits + c->blueBits - 1);
-                                        c->rgbBits += c->blueBits;
-
-                                        c->greenBits = conf->color_buffers[color].g;
-                                        c->greenMask = MASK(c->rgbBits, c->rgbBits + c->greenBits - 1);
-                                        c->rgbBits += c->greenBits;
-                                        
-                                        c->redBits = conf->color_buffers[color].r;
-                                        c->redMask = MASK(c->rgbBits, c->rgbBits + c->redBits - 1);
-                                        c->rgbBits += c->redBits;
-                                        
                                         if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->color_buffers[color].a) {
                                             c->alphaBits = conf->color_buffers[color].a;
-                                            c->alphaMask = MASK(c->rgbBits, c->rgbBits + c->alphaBits - 1);
-                                            c->rgbBits += c->alphaBits;
                                         } else {
                                             c->alphaBits = 0;
-                                            c->alphaMask = 0;
                                         }
+                                        c->redBits   = conf->color_buffers[color].r;
+                                        c->greenBits = conf->color_buffers[color].g;
+                                        c->blueBits  = conf->color_buffers[color].b;
                                         
+                                        c->rgbBits = c->alphaBits + c->redBits + c->greenBits + c->blueBits;
+
+                                        c->alphaMask = AM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                        c->redMask   = RM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                        c->greenMask = GM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                        c->blueMask  = BM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                                                                
                                         // Accumulation Buffers
                                         if(conf->total_accum_buffers > 0) {
                                             c->accumRedBits = conf->accum_buffers[accum].r;
diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am
index 653ae13..ae8aa7f 100644
--- a/hw/xquartz/Makefile.am
+++ b/hw/xquartz/Makefile.am
@@ -42,6 +42,7 @@ EXTRA_DIST = \
 	X11Controller.h \
 	applewmExt.h \
 	darwin.h \
+	darwinfb.h \
 	darwinEvents.h \
 	keysym2ucs.h \
 	pseudoramiX.h \
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 59f3f62..cf9863a 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -216,17 +216,10 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
 // TODO: Make PseudoColor visuals not suck in TrueColor mode  
 //    if(dfb->depth > 8)
 //        miSetVisualTypesAndMasks(8, PseudoColorMask, 8, PseudoColor, 0, 0, 0);
-
-#if 0
-    /*
-     * These aren't used anymore.  xpr/xprScreen.c initializes the dfb struct
-     * above based on the display properties.
-     */
     if(dfb->depth > 15)
-        miSetVisualTypesAndMasks(15, LARGE_VISUALS, 5, TrueColor, 0x7c00, 0x03e0, 0x001f);
+        miSetVisualTypesAndMasks(15, TrueColorMask, 5, TrueColor, RM_ARGB(0,5,5,5), GM_ARGB(0,5,5,5), BM_ARGB(0,5,5,5));
     if(dfb->depth > 24)
-        miSetVisualTypesAndMasks(24, LARGE_VISUALS, 8, TrueColor, 0x00ff0000, 0x0000ff00, 0x000000ff);
-#endif
+        miSetVisualTypesAndMasks(24, TrueColorMask, 8, TrueColor, RM_ARGB(0,8,8,8), GM_ARGB(0,8,8,8), BM_ARGB(0,8,8,8));
 
     miSetPixmapDepths();
 
@@ -248,29 +241,6 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
         return FALSE;
     }
 
-//    ErrorF("Screen type: %d, %d=%d, %d=%d, %d=%d, %x=%x=%x, %x=%x=%x, %x=%x=%x\n", pScreen->visuals->class,
-//           pScreen->visuals->offsetRed, dfb->bitsPerRGB * 2,
-//           pScreen->visuals->offsetGreen, dfb->bitsPerRGB,
-//           pScreen->visuals->offsetBlue, 0,
-//           pScreen->visuals->redMask, dfb->redMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetRed,
-//           pScreen->visuals->greenMask, dfb->greenMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetGreen,
-//           pScreen->visuals->blueMask, dfb->blueMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetBlue);
-
-    // set the RGB order correctly for TrueColor
-//    if (dfb->bitsPerPixel > 8) {
-//        for (i = 0, visual = pScreen->visuals;  // someday we may have more than 1
-//            i < pScreen->numVisuals; i++, visual++) {
-//            if (visual->class == TrueColor) {
-//                visual->offsetRed = bitsPerRGB * 2;
-//                visual->offsetGreen = bitsPerRGB;
-//                visual->offsetBlue = 0;
-//                visual->redMask = ((1<<bitsPerRGB)-1) << visual->offsetRed;
-//                visual->greenMask = ((1<<bitsPerRGB)-1) << visual->offsetGreen;
-//                visual->blueMask = ((1<<bitsPerRGB)-1) << visual->offsetBlue;
-//            }
-//        }
-//    }
-
 #ifdef RENDER
     if (! fbPictureInit(pScreen, 0, 0)) {
         return FALSE;
diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h
index 7fb9396..586044f 100644
--- a/hw/xquartz/darwin.h
+++ b/hw/xquartz/darwin.h
@@ -36,22 +36,7 @@
 
 #include "threadSafety.h"
 
-typedef struct {
-    void                *framebuffer;
-    int                 x;
-    int                 y;
-    int                 width;
-    int                 height;
-    int                 pitch;
-    int                 depth;
-    int                 visuals;
-    int                 bitsPerRGB;
-    int                 bitsPerPixel;
-    int                 preferredCVC;
-    Pixel               redMask;
-    Pixel               greenMask;
-    Pixel               blueMask;
-} DarwinFramebufferRec, *DarwinFramebufferPtr;
+#include "darwinfb.h"
 
 // From darwin.c
 void DarwinPrintBanner(void);
diff --git a/hw/xquartz/darwinfb.h b/hw/xquartz/darwinfb.h
new file mode 100644
index 0000000..dab6d4b
--- /dev/null
+++ b/hw/xquartz/darwinfb.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Apple, Inc.
+ * Copyright (c) 2001-2004 Torrey T. Lyons. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name(s) of the above copyright
+ * holders shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written authorization.
+ */
+
+#ifndef _DARWIN_FB_H
+#define _DARWIN_DB_H
+
+#include "scrnintstr.h"
+
+typedef struct {
+    void                *framebuffer;
+    int                 x;
+    int                 y;
+    int                 width;
+    int                 height;
+    int                 pitch;
+    int                 depth;
+    int                 visuals;
+    int                 bitsPerRGB;
+    int                 bitsPerPixel;
+    int                 preferredCVC;
+    Pixel               redMask;
+    Pixel               greenMask;
+    Pixel               blueMask;
+} DarwinFramebufferRec, *DarwinFramebufferPtr;
+
+#define MASK_LH(l,h) (((1 << (1 + (h) - (l))) - 1) << (l))
+#define BM_ARGB(a,r,g,b) MASK_LH(0, (b) - 1)
+#define GM_ARGB(a,r,g,b) MASK_LH(b, (b) + (g) - 1)
+#define RM_ARGB(a,r,g,b) MASK_LH((b) + (g), (b) + (g) + (r) - 1)
+#define AM_ARGB(a,r,g,b) MASK_LH((b) + (g) + (r), (b) + (g) + (r) + (a) - 1)
+
+#endif  /* _DARWIN_FB_H */
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 3ffb926..3387ecf 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -277,22 +277,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
     
     if(depth == -1) {
         depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
-        //dfb->depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
-        //dfb->bitsPerRGB = CGDisplayBitsPerSample(kCGDirectMainDisplay);
-        //dfb->bitsPerPixel = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
     }
     
     switch(depth) {
-//        case -8: // broken
-//            dfb->visuals = (1 << StaticGray) | (1 << GrayScale);
-//            dfb->preferredCVC = GrayScale;
-//            dfb->depth = 8;
-//            dfb->bitsPerRGB = 8;
-//            dfb->bitsPerPixel = 8;
-//            dfb->redMask = 0;
-//            dfb->greenMask = 0;
-//            dfb->blueMask = 0;
-//            break;
         case 8: // pseudo-working
             dfb->visuals = PseudoColorMask;
             dfb->preferredCVC = PseudoColor;
@@ -309,9 +296,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->depth = 15;
             dfb->bitsPerRGB = 5;
             dfb->bitsPerPixel = 16;
-            dfb->redMask   = 0x7c00;
-            dfb->greenMask = 0x03e0;
-            dfb->blueMask  = 0x001f;
+            dfb->redMask   = RM_ARGB(0,5,5,5);
+            dfb->greenMask = GM_ARGB(0,5,5,5);
+            dfb->blueMask  = BM_ARGB(0,5,5,5);
             break;
 //        case 24:
         default:
@@ -322,9 +309,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->depth = 24;
             dfb->bitsPerRGB = 8;
             dfb->bitsPerPixel = 32;
-            dfb->redMask   = 0x00ff0000;
-            dfb->greenMask = 0x0000ff00;
-            dfb->blueMask  = 0x000000ff;
+            dfb->redMask   = RM_ARGB(0,8,8,8);
+            dfb->greenMask = GM_ARGB(0,8,8,8);
+            dfb->blueMask  = BM_ARGB(0,8,8,8);
             break;
     }
 
commit 6c9dd6c25887563fa43e600c1656214dc73f924a
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 31 15:04:25 2009 -0700

    Revert "XQuartz: Let miSetVisualTypes set the mask, since we are using the default anyways."
    
    This reverts commit c850b6109c45c8dfb199c73071f27a9765b5678b.
    
    I lied... we're nativelt ARGB, not ABGR

diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 3074b19..59f3f62 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -207,17 +207,26 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
         return FALSE;
 
     // setup a single visual appropriate for our pixel type
-    if(!miSetVisualTypes(dfb->depth, dfb->visuals, dfb->bitsPerRGB, dfb->preferredCVC)) {
+    if(!miSetVisualTypesAndMasks(dfb->depth, dfb->visuals, dfb->bitsPerRGB,
+                                 dfb->preferredCVC, dfb->redMask,
+                                 dfb->greenMask, dfb->blueMask)) {
         return FALSE;
     }
-
+  
 // TODO: Make PseudoColor visuals not suck in TrueColor mode  
-//  if(dfb->depth > 8)
-//      miSetVisualTypes(8, PseudoColorMask, 8, PseudoColor);
+//    if(dfb->depth > 8)
+//        miSetVisualTypesAndMasks(8, PseudoColorMask, 8, PseudoColor, 0, 0, 0);
+
+#if 0
+    /*
+     * These aren't used anymore.  xpr/xprScreen.c initializes the dfb struct
+     * above based on the display properties.
+     */
     if(dfb->depth > 15)
-        miSetVisualTypes(15, TrueColorMask, 5, TrueColor);
+        miSetVisualTypesAndMasks(15, LARGE_VISUALS, 5, TrueColor, 0x7c00, 0x03e0, 0x001f);
     if(dfb->depth > 24)
-        miSetVisualTypes(24, TrueColorMask, 8, TrueColor);
+        miSetVisualTypesAndMasks(24, LARGE_VISUALS, 8, TrueColor, 0x00ff0000, 0x0000ff00, 0x000000ff);
+#endif
 
     miSetPixmapDepths();
 
@@ -239,6 +248,29 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
         return FALSE;
     }
 
+//    ErrorF("Screen type: %d, %d=%d, %d=%d, %d=%d, %x=%x=%x, %x=%x=%x, %x=%x=%x\n", pScreen->visuals->class,
+//           pScreen->visuals->offsetRed, dfb->bitsPerRGB * 2,
+//           pScreen->visuals->offsetGreen, dfb->bitsPerRGB,
+//           pScreen->visuals->offsetBlue, 0,
+//           pScreen->visuals->redMask, dfb->redMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetRed,
+//           pScreen->visuals->greenMask, dfb->greenMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetGreen,
+//           pScreen->visuals->blueMask, dfb->blueMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetBlue);
+
+    // set the RGB order correctly for TrueColor
+//    if (dfb->bitsPerPixel > 8) {
+//        for (i = 0, visual = pScreen->visuals;  // someday we may have more than 1
+//            i < pScreen->numVisuals; i++, visual++) {
+//            if (visual->class == TrueColor) {
+//                visual->offsetRed = bitsPerRGB * 2;
+//                visual->offsetGreen = bitsPerRGB;
+//                visual->offsetBlue = 0;
+//                visual->redMask = ((1<<bitsPerRGB)-1) << visual->offsetRed;
+//                visual->greenMask = ((1<<bitsPerRGB)-1) << visual->offsetGreen;
+//                visual->blueMask = ((1<<bitsPerRGB)-1) << visual->offsetBlue;
+//            }
+//        }
+//    }
+
 #ifdef RENDER
     if (! fbPictureInit(pScreen, 0, 0)) {
         return FALSE;
diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h
index 59d3c1e..7fb9396 100644
--- a/hw/xquartz/darwin.h
+++ b/hw/xquartz/darwin.h
@@ -48,6 +48,9 @@ typedef struct {
     int                 bitsPerRGB;
     int                 bitsPerPixel;
     int                 preferredCVC;
+    Pixel               redMask;
+    Pixel               greenMask;
+    Pixel               blueMask;
 } DarwinFramebufferRec, *DarwinFramebufferPtr;
 
 // From darwin.c
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index b379eb1..3ffb926 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -277,15 +277,31 @@ xprAddScreen(int index, ScreenPtr pScreen)
     
     if(depth == -1) {
         depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
+        //dfb->depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
+        //dfb->bitsPerRGB = CGDisplayBitsPerSample(kCGDirectMainDisplay);
+        //dfb->bitsPerPixel = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
     }
     
     switch(depth) {
+//        case -8: // broken
+//            dfb->visuals = (1 << StaticGray) | (1 << GrayScale);
+//            dfb->preferredCVC = GrayScale;
+//            dfb->depth = 8;
+//            dfb->bitsPerRGB = 8;
+//            dfb->bitsPerPixel = 8;
+//            dfb->redMask = 0;
+//            dfb->greenMask = 0;
+//            dfb->blueMask = 0;
+//            break;
         case 8: // pseudo-working
             dfb->visuals = PseudoColorMask;
             dfb->preferredCVC = PseudoColor;
             dfb->depth = 8;
             dfb->bitsPerRGB = 8;
             dfb->bitsPerPixel = 8;
+            dfb->redMask = 0;
+            dfb->greenMask = 0;
+            dfb->blueMask = 0;
             break;
         case 15:
             dfb->visuals = TrueColorMask; //LARGE_VISUALS;
@@ -293,6 +309,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->depth = 15;
             dfb->bitsPerRGB = 5;
             dfb->bitsPerPixel = 16;
+            dfb->redMask   = 0x7c00;
+            dfb->greenMask = 0x03e0;
+            dfb->blueMask  = 0x001f;
             break;
 //        case 24:
         default:
@@ -303,6 +322,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->depth = 24;
             dfb->bitsPerRGB = 8;
             dfb->bitsPerPixel = 32;
+            dfb->redMask   = 0x00ff0000;
+            dfb->greenMask = 0x0000ff00;
+            dfb->blueMask  = 0x000000ff;
             break;
     }
 


More information about the xorg-commit mailing list