diff --git a/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine-debug-m.patch b/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine-debug-m.patch new file mode 100644 index 0000000..fd0d709 --- /dev/null +++ b/0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine-debug-m.patch @@ -0,0 +1,378 @@ +From 52b6312873a0d462190db7e4b2b02c8dbb6263cf Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Sun, 13 Mar 2016 13:54:01 +0000 +Subject: [PATCH xserver] Xext/vidmode: Reduce verbosity of GetModeLine debug + messages + +In commit f175cf45aebcdda53f3ae49c0eaf27da1f194e92 +Author: Olivier Fourdan +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 +References: https://bugs.freedesktop.org/show_bug.cgi?id=94515 +Signed-off-by: Chris Wilson +Cc: Olivier Fourdan +(cherry picked from commit 75eecf28ae3709181a51571132b0accd9cae316e) +--- + Xext/vidmode.c | 214 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 107 insertions(+), 107 deletions(-) + +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,19 +681,19 @@ ProcVidModeDeleteModeLine(ClientPtr client) + if (!pVidMode->GetCurrentModeline(pScreen, &mode, &dotClock)) + return BadValue; + +- 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)) +@@ -703,24 +703,24 @@ ProcVidModeDeleteModeLine(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)) { + 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)); +-- +2.5.0 + diff --git a/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch b/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch new file mode 100644 index 0000000..0c36232 --- /dev/null +++ b/0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch @@ -0,0 +1,36 @@ +From a288cf58a0dc0f965a6f964c76bb86bb1989d797 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 16 Mar 2016 10:45:54 +1000 +Subject: [PATCH xserver] glamor: swizzle RED to 0 for alpha textures + +I'm pretty sure Eric suspected this could cause a problem, and we +couldn't find a test. Well loading feedly in firefox seems to trigger +badness that this solves. + +bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94554 +Reviewed-by: Adam Jackson +Signed-off-by: Dave Airlie +Tested-by: Timo Aaltonen +--- + glamor/glamor_fbo.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +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); +-- +2.5.0 + diff --git a/0001-present-Improve-scaling-of-vblank-handler.patch b/0001-present-Improve-scaling-of-vblank-handler.patch new file mode 100644 index 0000000..a4679c0 --- /dev/null +++ b/0001-present-Improve-scaling-of-vblank-handler.patch @@ -0,0 +1,89 @@ +From e10c70e81c8371438093ea594eea20d31747bf71 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Sat, 14 Feb 2015 09:58:43 +0000 +Subject: [PATCH xserver 1/2] present: Improve scaling of vblank handler + +With large numbers of queued vblank, the list iteration on every +interupt dominates processing time. If we reorder the list to be in +ascending event order, then not only is also likely to be in order for +notification queries (i.e. the notification will be near the start of +the list), we can also stop iterating when past the target event_id. + +Signed-off-by: Chris Wilson +--- + present/present.c | 24 +++++++++++++++--------- + 1 file changed, 15 insertions(+), 9 deletions(-) + +diff --git a/present/present.c b/present/present.c +index 55f6aa7..97ad783 100644 +--- a/present/present.c ++++ b/present/present.c +@@ -517,19 +517,22 @@ present_flip_notify(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) + void + present_event_notify(uint64_t event_id, uint64_t ust, uint64_t msc) + { +- present_vblank_ptr vblank, tmp; ++ present_vblank_ptr vblank; + int s; + + if (!event_id) + return; + DebugPresent(("\te %lld ust %lld msc %lld\n", event_id, ust, msc)); +- xorg_list_for_each_entry_safe(vblank, tmp, &present_exec_queue, event_queue) { +- if (vblank->event_id == event_id) { ++ xorg_list_for_each_entry(vblank, &present_exec_queue, event_queue) { ++ int64_t match = event_id - vblank->event_id; ++ if (match == 0) { + present_execute(vblank, ust, msc); + return; + } ++ if (match < 0) ++ break; + } +- xorg_list_for_each_entry_safe(vblank, tmp, &present_flip_queue, event_queue) { ++ xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) { + if (vblank->event_id == event_id) { + present_flip_notify(vblank, ust, msc); + return; +@@ -943,7 +946,7 @@ present_pixmap(WindowPtr window, + vblank->pixmap->drawable.id, vblank->window->drawable.id, + target_crtc, vblank->flip, vblank->sync_flip, vblank->serial)); + +- xorg_list_add(&vblank->event_queue, &present_exec_queue); ++ xorg_list_append(&vblank->event_queue, &present_exec_queue); + vblank->queued = TRUE; + if (msc_is_after(target_msc, crtc_msc)) { + ret = present_queue_vblank(screen, target_crtc, vblank->event_id, target_msc); +@@ -967,7 +970,7 @@ no_mem: + void + present_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64_t msc) + { +- present_vblank_ptr vblank, tmp; ++ present_vblank_ptr vblank; + + if (crtc == NULL) + present_fake_abort_vblank(screen, event_id, msc); +@@ -978,14 +981,17 @@ present_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64 + (*screen_priv->info->abort_vblank) (crtc, event_id, msc); + } + +- xorg_list_for_each_entry_safe(vblank, tmp, &present_exec_queue, event_queue) { +- if (vblank->event_id == event_id) { ++ xorg_list_for_each_entry(vblank, &present_exec_queue, event_queue) { ++ int64_t match = event_id - vblank->event_id; ++ if (match == 0) { + xorg_list_del(&vblank->event_queue); + vblank->queued = FALSE; + return; + } ++ if (match < 0) ++ break; + } +- xorg_list_for_each_entry_safe(vblank, tmp, &present_flip_queue, event_queue) { ++ xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) { + if (vblank->event_id == event_id) { + xorg_list_del(&vblank->event_queue); + return; +-- +2.5.0 + diff --git a/0002-present-Fix-presentation-of-flips-out-of-order.patch b/0002-present-Fix-presentation-of-flips-out-of-order.patch new file mode 100644 index 0000000..a99f5ad --- /dev/null +++ b/0002-present-Fix-presentation-of-flips-out-of-order.patch @@ -0,0 +1,55 @@ +From c2794c826378e89c5914112a59f2ad939a38a262 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Sat, 14 Feb 2015 09:58:44 +0000 +Subject: [PATCH xserver 2/2] present: Fix presentation of flips out of order + +The flip queue currently only holds events submitted to the driver for +flipping, awaiting the completion notifier. It is short. We therefore +can speed up interrupt processing by keeping the small number of events +ready to be flipped on the end of the flip queue. By appending the +events to the flip_queue in the order that they become ready, we also +resolve one issue causing Present to display frames out of order. + +Signed-off-by: Chris Wilson +--- + present/present.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/present/present.c b/present/present.c +index 97ad783..43eeecb 100644 +--- a/present/present.c ++++ b/present/present.c +@@ -353,10 +353,10 @@ present_re_execute(present_vblank_ptr vblank) + static void + present_flip_try_ready(ScreenPtr screen) + { +- present_vblank_ptr vblank, tmp; ++ present_vblank_ptr vblank; + +- xorg_list_for_each_entry_safe(vblank, tmp, &present_exec_queue, event_queue) { +- if (vblank->flip_ready) { ++ xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) { ++ if (vblank->queued) { + present_re_execute(vblank); + return; + } +@@ -656,6 +656,8 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) + DebugPresent(("\tr %lld %p (pending %p unflip %lld)\n", + vblank->event_id, vblank, + screen_priv->flip_pending, screen_priv->unflip_event_id)); ++ xorg_list_del(&vblank->event_queue); ++ xorg_list_append(&vblank->event_queue, &present_flip_queue); + vblank->flip_ready = TRUE; + return; + } +@@ -994,6 +996,7 @@ present_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64 + xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) { + if (vblank->event_id == event_id) { + xorg_list_del(&vblank->event_queue); ++ vblank->queued = FALSE; + return; + } + } +-- +2.5.0 + diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 7883ef1..51a7c1a 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -45,7 +45,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.18.2 -Release: 1%{?gitdate:.%{gitdate}}%{dist} +Release: 2%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -97,6 +97,11 @@ Patch9200: 0001-Xi-don-t-deliver-emulated-motion-events-for-non-emul.patch # because the display-managers are not ready yet, do not upstream Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch +Patch10001: 0001-glamor-swizzle-RED-to-0-for-alpha-textures.patch +Patch10002: 0001-present-Improve-scaling-of-vblank-handler.patch +Patch10003: 0002-present-Fix-presentation-of-flips-out-of-order.patch +Patch10004: 0001-Xext-vidmode-Reduce-verbosity-of-GetModeLine-debug-m.patch + %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri %global sdkdir %{_includedir}/xorg @@ -634,6 +639,11 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %changelog +* Thu Mar 17 2016 Adam Jackson 1.18.2-2 +- Fix red tint artifacts in glamor +- Fix a performance cliff in present triggered by plasma +- Silence some xf86vidmode log spam + * Fri Mar 11 2016 Adam Jackson 1.18.2-1 - xserver 1.18.2