diff --git a/COPYING b/COPYING
index 102c9732720769fb05a59610a9fc19b82a8a124c..3001a809baa71f18d9abc99ec65b73c40bf18ac9 100644
--- a/COPYING
+++ b/COPYING
@@ -73,6 +73,7 @@ tests/glslparsertest/glsl2/norsetto-*
 
 tests/glslparsertest/glsl2/xreal-*
 tests/glslparsertest/glsl2/xonotic-*
+tests/shaders/glsl-gnome-shell-dim-window.shader_test
 /* Full text of the GPL v2 is included in licenses/GPL-2 */
 /*
 ===========================================================================
diff --git a/tests/shaders/glsl-gnome-shell-dim-window.shader_test b/tests/shaders/glsl-gnome-shell-dim-window.shader_test
new file mode 100644
index 0000000000000000000000000000000000000000..ff1479ccee40ac853e9549dafa0a24b64bd34465
--- /dev/null
+++ b/tests/shaders/glsl-gnome-shell-dim-window.shader_test
@@ -0,0 +1,77 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+varying vec4 texcoords;
+
+void main()
+{
+	gl_Position = gl_Vertex;
+	texcoords = (gl_Vertex + 1.0) / 2.0;
+}
+
+[fragment shader]
+/* This shader came from gnome-shell, which is GPLv2+.  This copyright
+ * notice was constructed from the git logs of that file plus the
+ * top-level COPYING file, as it did not explicitly include the
+ * notice.
+ */
+/*
+    Copyright (C) 2010 Maxim Ermilov <zaspire@rambler.ru>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#version 110
+uniform sampler2D sampler0;
+uniform float fraction;
+uniform float height;
+const float c = -0.5;
+const float border_max_height = 60.0;
+varying vec4 texcoords;
+
+mat4 contrast = mat4(1.0 + c, 0.0, 0.0, 0.0,
+		     0.0, 1.0 + c, 0.0, 0.0,
+		     0.0, 0.0, 1.0 + c, 0.0,
+		     0.0, 0.0, 0.0, 1.0);
+vec4 off = vec4(0.633, 0.633, 0.633, 0);
+
+void main()
+{
+    vec4 color = texture2D(sampler0, texcoords.xy);
+    float y = height * texcoords.y;
+
+    // To reduce contrast, blend with a mid gray
+    gl_FragColor = color * contrast - off * c;
+
+    // We only fully dim at a distance of BORDER_MAX_HEIGHT from the edge and
+    // when the fraction is 1.0. For other locations and fractions we linearly
+    // interpolate back to the original undimmed color.
+    gl_FragColor = color + (gl_FragColor - color) * min(y / border_max_height, 1.0);
+    gl_FragColor = color + (gl_FragColor - color) * fraction;
+}
+
+[test]
+uniform int sampler0 0
+uniform float fraction 1.0
+uniform float height 60.0
+texture rgbw 0 (8, 8)
+draw rect -1 -1 2 2
+relative probe rgb (0.0, 0.0) (1.0, 0.0, 0.0)
+relative probe rgb (1.0, 0.0) (0.0, 1.0, 0.0)
+relative probe rgb (0.0, 0.499) (0.90825, 0.15835, 0.15835)
+relative probe rgb (1.0, 0.499) (0.15835, 0.90825, 0.15835)
+relative probe rgb (0.0, 1.0) (0.3165, 0.3165, 0.8165)
+relative probe rgb (1.0, 1.0) (0.8165, 0.8165, 0.8165)