gamma ramp patch

Ove Kaaven ovehk at ping.uio.no
Sat Oct 20 11:19:22 CDT 2001


Log:
Andrew Lewycky <andrew at transgaming.com>
XFree86 4.1 gamma ramp support.

Index: dlls/x11drv/xvidmode.c
===================================================================
RCS file: /cvsroot/winex/wine/dlls/x11drv/xvidmode.c,v
retrieving revision 1.1.1.7
diff -u -r1.1.1.7 xvidmode.c
--- dlls/x11drv/xvidmode.c	2001/10/04 13:45:35	1.1.1.7
+++ dlls/x11drv/xvidmode.c	2001/10/20 16:13:22
@@ -28,6 +28,11 @@
 
 static int xf86vm_event, xf86vm_error, xf86vm_major, xf86vm_minor;
 
+#ifdef X_XF86VidModeSetGammaRamp
+static int xf86vm_gammaramp_size;
+static BOOL xf86vm_use_gammaramp;
+#endif
+
 LPDDHALMODEINFO xf86vm_modes;
 unsigned xf86vm_mode_count;
 XF86VidModeModeInfo** modes;
@@ -89,6 +94,19 @@
   if (!TSXF86VidModeQueryExtension(gdi_display, &xf86vm_event, &xf86vm_error)) return;
   if (!TSXF86VidModeQueryVersion(gdi_display, &xf86vm_major, &xf86vm_minor)) return;
 
+#ifdef X_XF86VidModeSetGammaRamp
+  if (xf86vm_major > 2 || (xf86vm_major == 2 && xf86vm_minor >= 1))
+  {
+      wine_tsx11_lock();
+      XF86VidModeGetGammaRampSize(gdi_display, DefaultScreen(gdi_display),
+				  &xf86vm_gammaramp_size);
+      wine_tsx11_unlock();
+
+      if (xf86vm_gammaramp_size == 256)
+	  xf86vm_use_gammaramp = TRUE;
+  }
+#endif
+
   /* retrieve modes */
   if (!TSXF86VidModeGetAllModeLines(gdi_display, DefaultScreen(gdi_display), &nmodes,
 				    &modes))
@@ -264,15 +282,29 @@
   Bool ret;
 
   if (xf86vm_major < 2) return FALSE; /* no gamma control */
-  wine_tsx11_lock();
-  ret = XF86VidModeGetGamma(gdi_display, DefaultScreen(gdi_display), &gamma);
-  wine_tsx11_unlock();
-  if (ret) {
-    GenerateRampFromGamma(ramp->red,   gamma.red);
-    GenerateRampFromGamma(ramp->green, gamma.green);
-    GenerateRampFromGamma(ramp->blue,  gamma.blue);
-    return TRUE;
+#ifdef X_XF86VidModeSetGammaRamp
+  else if (xf86vm_use_gammaramp)
+  {
+      Bool ret;
+      wine_tsx11_lock();
+      ret = XF86VidModeGetGammaRamp(gdi_display, DefaultScreen(gdi_display), 256,
+				    ramp->red, ramp->green, ramp->blue);
+      wine_tsx11_unlock();
+      return ret;
   }
+#endif
+  else
+  {
+      wine_tsx11_lock();
+      ret = XF86VidModeGetGamma(gdi_display, DefaultScreen(gdi_display), &gamma);
+      wine_tsx11_unlock();
+      if (ret) {
+	  GenerateRampFromGamma(ramp->red,   gamma.red);
+	  GenerateRampFromGamma(ramp->green, gamma.green);
+	  GenerateRampFromGamma(ramp->blue,  gamma.blue);
+	  return TRUE;
+      }
+  }
 #endif /* X_XF86VidModeSetGamma */
   return FALSE;
 }
@@ -283,14 +315,28 @@
   XF86VidModeGamma gamma;
 
   if (xf86vm_major < 2) return FALSE; /* no gamma control */
-  if (ComputeGammaFromRamp(ramp->red,   &gamma.red) &&
-      ComputeGammaFromRamp(ramp->green, &gamma.green) &&
-      ComputeGammaFromRamp(ramp->blue,  &gamma.blue)) {
-    Bool ret;
-    wine_tsx11_lock();
-    ret = XF86VidModeSetGamma(gdi_display, DefaultScreen(gdi_display), &gamma);
-    wine_tsx11_unlock();
-    return ret;
+#ifdef X_XF86VidModeSetGammaRamp
+  else if (xf86vm_use_gammaramp)
+  {
+      Bool ret;
+      wine_tsx11_lock();
+      ret = XF86VidModeSetGammaRamp(gdi_display, DefaultScreen(gdi_display), 256,
+				    ramp->red, ramp->green, ramp->blue);
+      wine_tsx11_unlock();
+      return ret;
+  }
+#endif
+  else
+  {
+      if (ComputeGammaFromRamp(ramp->red,   &gamma.red) &&
+	  ComputeGammaFromRamp(ramp->green, &gamma.green) &&
+	  ComputeGammaFromRamp(ramp->blue,  &gamma.blue)) {
+	  Bool ret;
+	  wine_tsx11_lock();
+	  ret = XF86VidModeSetGamma(gdi_display, DefaultScreen(gdi_display), &gamma);
+	  wine_tsx11_unlock();
+	  return ret;
+      }
   }
 #endif /* X_XF86VidModeSetGamma */
   return FALSE;






More information about the wine-patches mailing list