Huw Davies : winex11: Don't use the bitfields for the BI_RGB case.

Alexandre Julliard julliard at winehq.org
Tue Apr 12 11:07:38 CDT 2011


Module: wine
Branch: master
Commit: b295b53630d70673c0b857ef262f78903b96c0b1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b295b53630d70673c0b857ef262f78903b96c0b1

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue Apr 12 12:36:18 2011 +0100

winex11: Don't use the bitfields for the BI_RGB case.

---

 dlls/winex11.drv/xrender.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c
index fde0b91..33e420a 100644
--- a/dlls/winex11.drv/xrender.c
+++ b/dlls/winex11.drv/xrender.c
@@ -1132,14 +1132,25 @@ BOOL X11DRV_XRender_SetPhysBitmapDepth(X_PHYSBITMAP *physBitmap, int bits_pixel,
 
     if (dib)
     {
-        X11DRV_PALETTE_ComputeColorShifts(&shifts, dib->dsBitfields[0], dib->dsBitfields[1], dib->dsBitfields[2]);
+        const DWORD *bitfields;
+        static const DWORD bitfields_32[3] = {0xff0000, 0x00ff00, 0x0000ff};
+        static const DWORD bitfields_16[3] = {0x7c00, 0x03e0, 0x001f};
+
+        if(dib->dsBmih.biCompression == BI_BITFIELDS)
+            bitfields = dib->dsBitfields;
+        else if(bits_pixel == 24 || bits_pixel == 32)
+            bitfields = bitfields_32;
+        else
+            bitfields = bitfields_16;
+
+        X11DRV_PALETTE_ComputeColorShifts(&shifts, bitfields[0], bitfields[1], bitfields[2]);
         fmt = get_xrender_format_from_color_shifts(dib->dsBm.bmBitsPixel, &shifts);
 
         /* Common formats should be in our picture format table. */
         if (!fmt)
         {
             TRACE("Unhandled dibsection format bpp=%d, redMask=%x, greenMask=%x, blueMask=%x\n",
-                dib->dsBm.bmBitsPixel, dib->dsBitfields[0], dib->dsBitfields[1], dib->dsBitfields[2]);
+                dib->dsBm.bmBitsPixel, bitfields[0], bitfields[1], bitfields[2]);
             return FALSE;
         }
     }




More information about the wine-cvs mailing list