aboutsummaryrefslogtreecommitdiffstats
path: root/xorg-server-hwcursor-gamma
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xorg-server-hwcursor-gamma/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine.patch374
-rw-r--r--xorg-server-hwcursor-gamma/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch16
-rw-r--r--xorg-server-hwcursor-gamma/0001-present-Only-requeue-for-next-MSC-after-flip-failure.patch43
-rw-r--r--xorg-server-hwcursor-gamma/PKGBUILD23
4 files changed, 452 insertions, 4 deletions
diff --git a/xorg-server-hwcursor-gamma/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine.patch b/xorg-server-hwcursor-gamma/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine.patch
new file mode 100644
index 0000000..2dbbb85
--- /dev/null
+++ b/xorg-server-hwcursor-gamma/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine.patch
@@ -0,0 +1,374 @@
+From 75eecf28ae3709181a51571132b0accd9cae316e Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sun, 13 Mar 2016 13:54:01 +0000
+Subject: Xext/vidmode: Reduce verbosity of GetModeLine debug messages
+
+In commit f175cf45aebcdda53f3ae49c0eaf27da1f194e92
+Author: Olivier Fourdan <ofourdan@redhat.com>
+Date: Wed Feb 10 09:34:34 2016 +0100
+
+ vidmode: move to a separate library of its own
+
+the verbosity of some old debug messages (which print the reply to every
+GetModeLine client request and others) was increased leading to lots of
+log spam. Downgrade the logging back to DebugF.
+
+[ajax: Fix a typo so it compiles.]
+
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+References: https://bugs.freedesktop.org/show_bug.cgi?id=94515
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Olivier Fourdan <ofourdan@redhat.com>
+
+diff --git a/Xext/vidmode.c b/Xext/vidmode.c
+index 7c838f4..0cbbdc3 100644
+--- a/Xext/vidmode.c
++++ b/Xext/vidmode.c
+@@ -69,7 +69,7 @@ typedef struct {
+ dixSetPrivate(&(c)->devPrivates, VidModeClientPrivateKey, p)
+
+ #ifdef DEBUG
+-#define DEBUG_P(x) LogMessage(X_INFO, x"\n");
++#define DEBUG_P(x) DebugF(x"\n")
+ #else
+ #define DEBUG_P(x) /**/
+ #endif
+@@ -267,13 +267,13 @@ ProcVidModeGetModeLine(ClientPtr client)
+ rep.vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL);
+ rep.flags = VidModeGetModeValue(mode, VIDMODE_FLAGS);
+
+- LogMessage(X_INFO, "GetModeLine - scrn: %d clock: %ld\n",
+- stuff->screen, (unsigned long) rep.dotclock);
+- LogMessage(X_INFO, "GetModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- rep.hdisplay, rep.hsyncstart, rep.hsyncend, rep.htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- rep.vdisplay, rep.vsyncstart, rep.vsyncend,
+- rep.vtotal, (unsigned long) rep.flags);
++ DebugF("GetModeLine - scrn: %d clock: %ld\n",
++ stuff->screen, (unsigned long) rep.dotclock);
++ DebugF("GetModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ rep.hdisplay, rep.hsyncstart, rep.hsyncend, rep.htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ rep.vdisplay, rep.vsyncstart, rep.vsyncend,
++ rep.vtotal, (unsigned long) rep.flags);
+
+ /*
+ * Older servers sometimes had server privates that the VidMode
+@@ -483,23 +483,23 @@ ProcVidModeAddModeLine(ClientPtr client)
+ stuff->after_vtotal = oldstuff->after_vtotal;
+ stuff->after_flags = oldstuff->after_flags;
+ }
+- LogMessage(X_INFO, "AddModeLine - scrn: %d clock: %ld\n",
+- (int) stuff->screen, (unsigned long) stuff->dotclock);
+- LogMessage(X_INFO, "AddModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- stuff->hdisplay, stuff->hsyncstart,
+- stuff->hsyncend, stuff->htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
+- stuff->vtotal, (unsigned long) stuff->flags);
+- LogMessage(X_INFO, " after - scrn: %d clock: %ld\n",
+- (int) stuff->screen, (unsigned long) stuff->after_dotclock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- stuff->after_hdisplay, stuff->after_hsyncstart,
+- stuff->after_hsyncend, stuff->after_htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- stuff->after_vdisplay, stuff->after_vsyncstart,
+- stuff->after_vsyncend, stuff->after_vtotal,
+- (unsigned long) stuff->after_flags);
++ DebugF("AddModeLine - scrn: %d clock: %ld\n",
++ (int) stuff->screen, (unsigned long) stuff->dotclock);
++ DebugF("AddModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ stuff->hdisplay, stuff->hsyncstart,
++ stuff->hsyncend, stuff->htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
++ stuff->vtotal, (unsigned long) stuff->flags);
++ DebugF(" after - scrn: %d clock: %ld\n",
++ (int) stuff->screen, (unsigned long) stuff->after_dotclock);
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ stuff->after_hdisplay, stuff->after_hsyncstart,
++ stuff->after_hsyncend, stuff->after_htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ stuff->after_vdisplay, stuff->after_vsyncstart,
++ stuff->after_vsyncend, stuff->after_vtotal,
++ (unsigned long) stuff->after_flags);
+
+ if (ver < 2) {
+ REQUEST_AT_LEAST_SIZE(xXF86OldVidModeAddModeLineReq);
+@@ -572,7 +572,7 @@ ProcVidModeAddModeLine(ClientPtr client)
+ VidModeSetModeValue(mode, VIDMODE_FLAGS, stuff->flags);
+
+ if (stuff->privsize)
+- LogMessage(X_INFO, "AddModeLine - Privates in request have been ignored\n");
++ DebugF("AddModeLine - Privates in request have been ignored\n");
+
+ /* Check that the mode is consistent with the monitor specs */
+ switch (pVidMode->CheckModeForMonitor(pScreen, mode)) {
+@@ -601,7 +601,7 @@ ProcVidModeAddModeLine(ClientPtr client)
+
+ pVidMode->AddModeline(pScreen, mode);
+
+- LogMessage(X_INFO, "AddModeLine - Succeeded\n");
++ DebugF("AddModeLine - Succeeded\n");
+
+ return Success;
+ }
+@@ -640,14 +640,14 @@ ProcVidModeDeleteModeLine(ClientPtr client)
+ stuff->flags = oldstuff->flags;
+ stuff->privsize = oldstuff->privsize;
+ }
+- LogMessage(X_INFO, "DeleteModeLine - scrn: %d clock: %ld\n",
+- (int) stuff->screen, (unsigned long) stuff->dotclock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- stuff->hdisplay, stuff->hsyncstart,
+- stuff->hsyncend, stuff->htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
+- (unsigned long) stuff->flags);
++ DebugF("DeleteModeLine - scrn: %d clock: %ld\n",
++ (int) stuff->screen, (unsigned long) stuff->dotclock);
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ stuff->hdisplay, stuff->hsyncstart,
++ stuff->hsyncend, stuff->htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
++ (unsigned long) stuff->flags);
+
+ if (ver < 2) {
+ REQUEST_AT_LEAST_SIZE(xXF86OldVidModeDeleteModeLineReq);
+@@ -662,11 +662,11 @@ ProcVidModeDeleteModeLine(ClientPtr client)
+ bytes_to_int32(sizeof(xXF86VidModeDeleteModeLineReq));
+ }
+ if (len != stuff->privsize) {
+- LogMessage(X_INFO, "req_len = %ld, sizeof(Req) = %d, privsize = %ld, "
+- "len = %d, length = %d\n",
+- (unsigned long) client->req_len,
+- (int) sizeof(xXF86VidModeDeleteModeLineReq) >> 2,
+- (unsigned long) stuff->privsize, len, stuff->length);
++ DebugF("req_len = %ld, sizeof(Req) = %d, privsize = %ld, "
++ "len = %d, length = %d\n",
++ (unsigned long) client->req_len,
++ (int) sizeof(xXF86VidModeDeleteModeLineReq) >> 2,
++ (unsigned long) stuff->privsize, len, stuff->length);
+ return BadLength;
+ }
+
+@@ -681,46 +681,46 @@ ProcVidModeDeleteModeLine(ClientPtr client)
+ if (!pVidMode->GetCurrentModeline(pScreen, &mode, &dotClock))
+ return BadValue;
+
+- LogMessage(X_INFO, "Checking against clock: %d (%d)\n",
++ DebugF("Checking against clock: %d (%d)\n",
++ VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
++ VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
++ VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
++ VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
++ VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
++ VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
++ VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
++ VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
++ VidModeGetModeValue(mode, VIDMODE_FLAGS));
++
++ if ((pVidMode->GetDotClock(pScreen, stuff->dotclock) == dotClock) &&
++ MODEMATCH(mode, stuff))
++ return BadValue;
++
++ if (!pVidMode->GetFirstModeline(pScreen, &mode, &dotClock))
++ return BadValue;
++
++ do {
++ DebugF("Checking against clock: %d (%d)\n",
+ VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+ VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+ VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+ VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+ VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
+ VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+ VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+ VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+ VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+ VidModeGetModeValue(mode, VIDMODE_FLAGS));
+
+- if ((pVidMode->GetDotClock(pScreen, stuff->dotclock) == dotClock) &&
+- MODEMATCH(mode, stuff))
+- return BadValue;
+-
+- if (!pVidMode->GetFirstModeline(pScreen, &mode, &dotClock))
+- return BadValue;
+-
+- do {
+- LogMessage(X_INFO, "Checking against clock: %d (%d)\n",
+- VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+- VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+- VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+- VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
+- VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+- VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+- VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+- VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+- VidModeGetModeValue(mode, VIDMODE_FLAGS));
+-
+ if ((pVidMode->GetDotClock(pScreen, stuff->dotclock) == dotClock) &&
+ MODEMATCH(mode, stuff)) {
+ pVidMode->DeleteModeline(pScreen, mode);
+- LogMessage(X_INFO, "DeleteModeLine - Succeeded\n");
++ DebugF("DeleteModeLine - Succeeded\n");
+ return Success;
+ }
+ } while (pVidMode->GetNextModeline(pScreen, &mode, &dotClock));
+@@ -761,12 +761,12 @@ ProcVidModeModModeLine(ClientPtr client)
+ stuff->flags = oldstuff->flags;
+ stuff->privsize = oldstuff->privsize;
+ }
+- LogMessage(X_INFO, "ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- (int) stuff->screen, stuff->hdisplay, stuff->hsyncstart,
+- stuff->hsyncend, stuff->htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
+- stuff->vtotal, (unsigned long) stuff->flags);
++ DebugF("ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ (int) stuff->screen, stuff->hdisplay, stuff->hsyncstart,
++ stuff->hsyncend, stuff->htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend,
++ stuff->vtotal, (unsigned long) stuff->flags);
+
+ if (ver < 2) {
+ REQUEST_AT_LEAST_SIZE(xXF86OldVidModeModModeLineReq);
+@@ -816,7 +816,7 @@ ProcVidModeModModeLine(ClientPtr client)
+ VidModeSetModeValue(modetmp, VIDMODE_FLAGS, stuff->flags);
+
+ if (stuff->privsize)
+- LogMessage(X_INFO, "ModModeLine - Privates in request have been ignored\n");
++ DebugF("ModModeLine - Privates in request have been ignored\n");
+
+ /* Check that the mode is consistent with the monitor specs */
+ switch (pVidMode->CheckModeForMonitor(pScreen, modetmp)) {
+@@ -856,7 +856,7 @@ ProcVidModeModModeLine(ClientPtr client)
+ pVidMode->SetCrtcForMode(pScreen, mode);
+ pVidMode->SwitchMode(pScreen, mode);
+
+- LogMessage(X_INFO, "ModModeLine - Succeeded\n");
++ DebugF("ModModeLine - Succeeded\n");
+ return Success;
+ }
+
+@@ -896,14 +896,14 @@ ProcVidModeValidateModeLine(ClientPtr client)
+ stuff->privsize = oldstuff->privsize;
+ }
+
+- LogMessage(X_INFO, "ValidateModeLine - scrn: %d clock: %ld\n",
+- (int) stuff->screen, (unsigned long) stuff->dotclock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- stuff->hdisplay, stuff->hsyncstart,
+- stuff->hsyncend, stuff->htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
+- (unsigned long) stuff->flags);
++ DebugF("ValidateModeLine - scrn: %d clock: %ld\n",
++ (int) stuff->screen, (unsigned long) stuff->dotclock);
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ stuff->hdisplay, stuff->hsyncstart,
++ stuff->hsyncend, stuff->htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
++ (unsigned long) stuff->flags);
+
+ if (ver < 2) {
+ REQUEST_AT_LEAST_SIZE(xXF86OldVidModeValidateModeLineReq);
+@@ -956,7 +956,7 @@ ProcVidModeValidateModeLine(ClientPtr client)
+ VidModeSetModeValue(modetmp, VIDMODE_V_TOTAL, stuff->vtotal);
+ VidModeSetModeValue(modetmp, VIDMODE_FLAGS, stuff->flags);
+ if (stuff->privsize)
+- LogMessage(X_INFO, "ValidateModeLine - Privates in request have been ignored\n");
++ DebugF("ValidateModeLine - Privates in request have been ignored\n");
+
+ /* Check that the mode is consistent with the monitor specs */
+ if ((status =
+@@ -982,7 +982,7 @@ ProcVidModeValidateModeLine(ClientPtr client)
+ swapl(&rep.status);
+ }
+ WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), &rep);
+- LogMessage(X_INFO, "ValidateModeLine - Succeeded (status = %d)\n", status);
++ DebugF("ValidateModeLine - Succeeded (status = %d)\n", status);
+
+ return Success;
+ }
+@@ -1046,14 +1046,14 @@ ProcVidModeSwitchToMode(ClientPtr client)
+ stuff->privsize = oldstuff->privsize;
+ }
+
+- LogMessage(X_INFO, "SwitchToMode - scrn: %d clock: %ld\n",
+- (int) stuff->screen, (unsigned long) stuff->dotclock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- stuff->hdisplay, stuff->hsyncstart,
+- stuff->hsyncend, stuff->htotal);
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
+- stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
+- (unsigned long) stuff->flags);
++ DebugF("SwitchToMode - scrn: %d clock: %ld\n",
++ (int) stuff->screen, (unsigned long) stuff->dotclock);
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ stuff->hdisplay, stuff->hsyncstart,
++ stuff->hsyncend, stuff->htotal);
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %ld\n",
++ stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal,
++ (unsigned long) stuff->flags);
+
+ if (ver < 2) {
+ REQUEST_AT_LEAST_SIZE(xXF86OldVidModeSwitchToModeReq);
+@@ -1089,19 +1089,19 @@ ProcVidModeSwitchToMode(ClientPtr client)
+ return BadValue;
+
+ do {
+- LogMessage(X_INFO, "Checking against clock: %d (%d)\n",
+- VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+- LogMessage(X_INFO, " hdsp: %d hbeg: %d hend: %d httl: %d\n",
+- VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
+- VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
+- VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
+- VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
+- LogMessage(X_INFO, " vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
+- VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
+- VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
+- VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
+- VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
+- VidModeGetModeValue(mode, VIDMODE_FLAGS));
++ DebugF("Checking against clock: %d (%d)\n",
++ VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
++ DebugF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
++ VidModeGetModeValue(mode, VIDMODE_H_DISPLAY),
++ VidModeGetModeValue(mode, VIDMODE_H_SYNCSTART),
++ VidModeGetModeValue(mode, VIDMODE_H_SYNCEND),
++ VidModeGetModeValue(mode, VIDMODE_H_TOTAL));
++ DebugF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n",
++ VidModeGetModeValue(mode, VIDMODE_V_DISPLAY),
++ VidModeGetModeValue(mode, VIDMODE_V_SYNCSTART),
++ VidModeGetModeValue(mode, VIDMODE_V_SYNCEND),
++ VidModeGetModeValue(mode, VIDMODE_V_TOTAL),
++ VidModeGetModeValue(mode, VIDMODE_FLAGS));
+
+ if ((pVidMode->GetDotClock(pScreen, stuff->dotclock) == dotClock) &&
+ MODEMATCH(mode, stuff)) {
+@@ -1109,7 +1109,7 @@ ProcVidModeSwitchToMode(ClientPtr client)
+ if (!pVidMode->SwitchMode(pScreen, mode))
+ return BadValue;
+
+- LogMessage(X_INFO, "SwitchToMode - Succeeded\n");
++ DebugF("SwitchToMode - Succeeded\n");
+ return Success;
+ }
+ } while (pVidMode->GetNextModeline(pScreen, &mode, &dotClock));
+--
+cgit v0.10.2
+
diff --git a/xorg-server-hwcursor-gamma/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch b/xorg-server-hwcursor-gamma/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch
new file mode 100644
index 0000000..dc2e7ef
--- /dev/null
+++ b/xorg-server-hwcursor-gamma/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch
@@ -0,0 +1,16 @@
+diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c
+index a531f60..f4f8749 100644
+--- a/glamor/glamor_fbo.c
++++ b/glamor/glamor_fbo.c
+@@ -352,8 +352,10 @@ _glamor_create_tex(glamor_screen_private *glamor_priv,
+ glBindTexture(GL_TEXTURE_2D, tex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+- if (format == glamor_priv->one_channel_format && format == GL_RED)
++ if (format == glamor_priv->one_channel_format && format == GL_RED) {
++ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_ZERO);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
++ }
+ glamor_priv->suppress_gl_out_of_memory_logging = true;
+ glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0,
+ format, GL_UNSIGNED_BYTE, NULL);
diff --git a/xorg-server-hwcursor-gamma/0001-present-Only-requeue-for-next-MSC-after-flip-failure.patch b/xorg-server-hwcursor-gamma/0001-present-Only-requeue-for-next-MSC-after-flip-failure.patch
new file mode 100644
index 0000000..adf5c7a
--- /dev/null
+++ b/xorg-server-hwcursor-gamma/0001-present-Only-requeue-for-next-MSC-after-flip-failure.patch
@@ -0,0 +1,43 @@
+From 3b385105b2d19a1c55e9779ae88d775185eea231 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
+Date: Thu, 24 Mar 2016 17:42:47 +0900
+Subject: [PATCH xserver] present: Only requeue for next MSC after flip failure
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This code was added to deal with the driver present hook failing, in
+which case we need to wait for the next MSC before executing the
+presentation.
+
+However, it could also take effect in cases where the driver incorrectly
+thinks the current MSC matches the target one (e.g. due to the kernel
+interface only supporting 32-bit MSC values), in which case it could
+result in the presentation getting requeued over and over.
+
+To prevent such issues, check specifically for the target MSC
+immediately following the current MSC.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94596
+Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
+Reviewed-by: Keith Packard <keithp@keithp.com>
+---
+ present/present.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/present/present.c b/present/present.c
+index 55f6aa7..105e2bf 100644
+--- a/present/present.c
++++ b/present/present.c
+@@ -726,7 +726,7 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
+ }
+
+ /* If present_flip failed, we may have to requeue for the target MSC */
+- if (msc_is_after(vblank->target_msc, crtc_msc) &&
++ if (vblank->target_msc == crtc_msc + 1 &&
+ Success == present_queue_vblank(screen,
+ vblank->crtc,
+ vblank->event_id,
+--
+2.7.4
+
diff --git a/xorg-server-hwcursor-gamma/PKGBUILD b/xorg-server-hwcursor-gamma/PKGBUILD
index adf39b3..c3bb4a9 100644
--- a/xorg-server-hwcursor-gamma/PKGBUILD
+++ b/xorg-server-hwcursor-gamma/PKGBUILD
@@ -4,8 +4,8 @@
_pkgname=xorg-server
pkgname=xorg-server-hwcursor-gamma
-pkgver=1.18.1
-pkgrel=1 # 1=2 in xorg-server
+pkgver=1.18.2
+pkgrel=1 # 4 in xorg-server
pkgdesc="Xorg X server with patch to apply gamma ramps on hardware cursors"
depends=(libepoxy libxdmcp libxfont libpciaccess libdrm pixman libgcrypt libxau xorg-server-common libxshmfence libgl xf86-input-evdev)
provides=("xorg-server=${pkgver}" 'X-ABI-VIDEODRV_VERSION=20' 'X-ABI-XINPUT_VERSION=22.1' 'X-ABI-EXTENSION_VERSION=9.0' 'x-server')
@@ -24,12 +24,18 @@ makedepends=('pixman' 'libx11' 'mesa' 'mesa-libgl' 'xf86driproto' 'xcmiscproto'
source=(${url}/releases/individual/xserver/${_pkgname}-${pkgver}.tar.bz2
xvfb-run
xvfb-run.1
+ 0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch
+ 0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine.patch
+ 0001-present-Only-requeue-for-next-MSC-after-flip-failure.patch
0001-When-an-cursor-is-set-it-is-adjusted-to-use-the.patch
0002-Fix-for-full-and-semi-transparency-under-negative-im.patch
0003-Use-Harms-s-suggest-do-not-use-inline-if.-And-fix-si.patch)
-sha256sums=('85ec56dbeb89a951295cdf4f39bf38e515f900d35e06d4a8081b114d1520789d'
+sha256sums=('022142b07f6477d140dcc915902df326408a53ca3a352426a499f142b25d632d'
'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9'
- '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776'
+ '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776'
+ '10c66c10f4f71930e2ac3f6e07881e228ca88542af449d2c69c7744ec87335df'
+ '72755a652e72144e3f28c8fa959b4a6df5def838db3cde5077a626e97baab591'
+ '70c84bf1f7cbc818692fb56f57c8b8ef2ea057bc05380b2f797ecba742b7ce31'
'bea348631dedd66475d84ac2cfe0840f22a80a642b4680d73fead4749e47f055'
'be9169b937b5d0b44f7f05d7c08aaa5f0c1092e128ce261d9cb350f09dfe1fb0'
'0a643ae83e03faee0f4db669a33c5b3c99edbba5c86cde2c83962ae536d31081')
@@ -37,6 +43,15 @@ sha256sums=('85ec56dbeb89a951295cdf4f39bf38e515f900d35e06d4a8081b114d1520789d'
prepare() {
cd "${_pkgname}-${pkgver}"
+ msg2 'Fix red tint in Firefox'
+ patch -Np1 -i ../0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch
+
+ msg2 'Fix flooding of Xorg log file'
+ patch -Np1 -i ../0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine.patch
+
+ msg2 'Fix FS#48549'
+ patch -Np1 -i ../0001-present-Only-requeue-for-next-MSC-after-flip-failure.patch
+
msg2 'Apply hardware cursors gamma adjustments patches'
patch -Np1 -i ../0001-When-an-cursor-is-set-it-is-adjusted-to-use-the.patch
patch -Np1 -i ../0002-Fix-for-full-and-semi-transparency-under-negative-im.patch