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