<div>I&#39;m hoping this is the right way to submit a patch.</div><div><br></div><div>Add test glsl-vs-varying-writes.</div><div><br></div>This test fails on Sandy Bridge but not i915 or Nvidia Quadro FX 380.<div><br></div>
<div>The vec2 set up as (1.0, 0.0) in the vertex shader ends up as (0.0, 0.0) in the fragment shader.  (The problem was originally found with texture coordinates.)</div><div><br></div><div>The issue apparently relates to declarations of varyings in the vertex shader and fragment shader. If the (unneeded) var1 varying declaration isn&#39;t present in the fragment shader, the test passes.<div>
<br></div><div><div>diff --git a/tests/all.tests b/tests/all.tests</div><div>index 03dcd59..ed78c88 100644</div><div>--- a/tests/all.tests</div><div>+++ b/tests/all.tests</div><div>@@ -413,6 +413,7 @@ add_plain_test(shaders, &#39;glsl-vs-arrays&#39;)</div>
<div> add_plain_test(shaders, &#39;glsl-vs-normalscale&#39;)</div><div> add_plain_test(shaders, &#39;glsl-vs-functions&#39;)</div><div> add_plain_test(shaders, &#39;glsl-vs-user-varying-ff&#39;)</div><div>+add_plain_test(shaders, &#39;glsl-vs-varying-writes&#39;)</div>
<div> add_plain_test(shaders, &#39;glsl-vs-texturematrix-1&#39;)</div><div> add_plain_test(shaders, &#39;glsl-vs-texturematrix-2&#39;)</div><div> add_plain_test(shaders, &#39;glsl-sin&#39;)</div><div>diff --git a/tests/shaders/CMakeLists.gl.txt b/tests/shaders/CMakeLists.gl.txt</div>
<div>index d0e3005..2a5309b 100644</div><div>--- a/tests/shaders/CMakeLists.gl.txt</div><div>+++ b/tests/shaders/CMakeLists.gl.txt</div><div>@@ -110,6 +110,7 @@ ENDIF (NOT MSVC)</div><div> add_executable (glsl-vs-sqrt-zero glsl-vs-sqrt-zero.c)</div>
<div> add_executable (glsl-vs-statechange-1 glsl-vs-statechange-1.c)</div><div> add_executable (glsl-vs-user-varying-ff glsl-vs-user-varying-ff.c)</div><div>+add_executable (glsl-vs-varying-writes glsl-vs-varying-writes.c)</div>
<div> add_executable (glsl-light-model glsl-light-model.c)</div><div> add_executable (glsl-link-bug30552 glsl-link-bug30552.c)</div><div> add_executable (glsl-link-bug38015 glsl-link-bug38015.c)</div><div>diff --git a/tests/shaders/glsl-vs-varying-writes.c b/tests/shaders/glsl-vs-varying-writes.c</div>
<div>new file mode 100644</div><div>index 0000000..a3b0dc1</div><div>--- /dev/null</div><div>+++ b/tests/shaders/glsl-vs-varying-writes.c</div><div>@@ -0,0 +1,104 @@</div><div>+/*</div><div>+ * Copyright © 2010 Intel Corporation</div>
<div>+ *</div><div>+ * Permission is hereby granted, free of charge, to any person obtaining a</div><div>+ * copy of this software and associated documentation files (the &quot;Software&quot;),</div><div>+ * to deal in the Software without restriction, including without limitation</div>
<div>+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,</div><div>+ * and/or sell copies of the Software, and to permit persons to whom the</div><div>+ * Software is furnished to do so, subject to the following conditions:</div>
<div>+ *</div><div>+ * The above copyright notice and this permission notice (including the next</div><div>+ * paragraph) shall be included in all copies or substantial portions of the</div><div>+ * Software.</div><div>+ *</div>
<div>+ * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</div><div>+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</div><div>+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL</div>
<div>+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</div><div>+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</div><div>+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</div>
<div>+ * DEALINGS IN THE SOFTWARE.</div><div>+ */</div><div>+</div><div>+/**</div><div>+ * \file glsl-vs-varying-writes</div><div>+ * Test varying writes broken on Sandy Bridge / Gallium.</div><div>+ *</div><div>+ * \author Stuart Abercrombie &lt;<a href="mailto:sabercrombie@chromium.org">sabercrombie@chromium.org</a>&gt;</div>
<div>+ */</div><div>+#include &quot;piglit-util.h&quot;</div><div>+</div><div>+int piglit_width = 30, piglit_height = 30;</div><div>+int piglit_window_mode = GLUT_RGB | GLUT_DOUBLE;</div><div>+</div><div>+static const char vs_text[] =</div>
<div>+    &quot;varying vec2 var1;\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;varying vec2 var2;\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;\n&quot;        </div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;void main()\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;{\n&quot;</div><div>+    &quot;  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;&quot;</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;  var1.x = 1.0;\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;  var1.y = 0.0;\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;  var2 = var1;\n&quot;</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;}\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>;</div><div>+</div><div>+static const char fs_text[] =</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;varying vec2 var1;\n&quot;</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;varying vec2 var2;\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;void main()\n&quot;</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;{\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;  gl_FragColor = vec4(var2, 0.0, 1.0);\n&quot;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>&quot;}\n&quot;</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>;</div><div>+</div><div>+GLuint prog;</div><div>+</div><div>+static const float blue[] = { 0.0, 0.0, 1.0, 1.0 };</div><div>+</div><div>+enum piglit_result</div>
<div>+piglit_display(void)</div><div>+{</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>static const float red[3] = { 1.0, 0.0, 0.0 };</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>enum piglit_result result = PIGLIT_PASS;</div>
<div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>glClear(GL_COLOR_BUFFER_BIT);</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>piglit_draw_rect(0.0f, 0.0f, 30.0f, 30.0f);</div>
<div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>if (!piglit_probe_pixel_rgb(15, 15, red))</div><div>+<span class="Apple-tab-span" style="white-space:pre">                </span>result = PIGLIT_FAIL;</div>
<div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>if (!piglit_automatic)</div><div>+<span class="Apple-tab-span" style="white-space:pre">                </span>glutSwapBuffers();</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>return result;</div>
<div>+}</div><div>+</div><div>+void</div><div>+piglit_init(int argc, char **argv)</div><div>+{</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>GLuint vs;</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>GLuint fs;</div>
<div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>if (!GLEW_VERSION_2_0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">                </span>printf(&quot;Requires OpenGL 2.0\n&quot;);</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">                </span>piglit_report_result(PIGLIT_SKIP);</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);</div>
<div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);</div>
<div>+<span class="Apple-tab-span" style="white-space:pre">        </span>prog = piglit_link_simple_program(vs, fs);</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>if (!piglit_link_check_status(prog))</div>
<div>+        piglit_report_result(PIGLIT_FAIL);</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>piglit_UseProgram(prog);</div><div>+</div><div>+<span class="Apple-tab-span" style="white-space:pre">        </span>glClearColor(blue[0], blue[1], blue[2], blue[3]);</div>
<div>+}</div></div><div><br></div></div>