<div dir="ltr">On 21 August 2013 09:08, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
From: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
<br>
There are several variations of<br>
<br>
void foo(inout int i, inout float f);<br>
...<br>
foo(i, f[i]);<br>
<br>
that Mesa's GLSL compiler gets wrong.  NVIDIA (304.64 on GTX 260) fails<br>
vs-inout-index-inout-mat2-col.shader_test and<br>
vs-inout-index-inout-mat2-row.shader_test, but passes the others.<br>
<br>
v2: Use 'proble all rgb' and make vs-inout-index-inout-mat2-col use u=1<br></blockquote><div><br></div><div>s/proble/probe/<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

like the other tests.  Both items were suggested by Eric Anholt.  I use<br>
'probe all rgb' because the tests actually write 0 for alpha, but<br>
shader_runner doesn't always get an RGBA visual (so alpha will be 0 or<br>
1).  Also, add two simpler tests vs-out-vec4 and vs-inout-vec4.  This<br>
currently pass, but a patch series I have in progress had broken them.<br>
<br>
Signed-off-by: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
Cc: James Jones <<a href="mailto:jajones@nvidia.com">jajones@nvidia.com</a>><br>
---<br>
 .../vs-inout-index-inout-float-array.shader_test   | 35 ++++++++++++++++++++++<br>
 .../vs-inout-index-inout-mat2-col.shader_test      | 34 +++++++++++++++++++++<br>
 .../vs-inout-index-inout-mat2-row.shader_test      | 34 +++++++++++++++++++++<br>
 ...nout-index-inout-vec4-array-element.shader_test | 35 ++++++++++++++++++++++<br>
 .../vs-inout-index-inout-vec4-array.shader_test    | 35 ++++++++++++++++++++++<br>
 .../vs-inout-index-inout-vec4.shader_test          | 35 ++++++++++++++++++++++<br>
 .../vs-inout-vec4.shader_test                      | 33 ++++++++++++++++++++<br>
 .../out-parameter-indexing/vs-out-vec4.shader_test | 33 ++++++++++++++++++++<br>
 8 files changed, 274 insertions(+)<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-index-inout-float-array.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-col.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-row.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array-element.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-inout-vec4.shader_test<br>
 create mode 100644 tests/shaders/out-parameter-indexing/vs-out-vec4.shader_test<br>
<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-index-inout-float-array.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-float-array.shader_test<br>
new file mode 100644<br>
index 0000000..95fee24<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-float-array.shader_test<br>
@@ -0,0 +1,35 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout int i, inout float f)<br>
+{<br>
+  i = 0;<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  float fa[] = float[](0., 0., 0., 0.);<br>
+  int i = u;<br>
+<br>
+  func(i, fa[i]);<br>
+  color = vec4(fa[0], fa[1], fa[2], fa[3]);<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-col.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-col.shader_test<br>
new file mode 100644<br>
index 0000000..853d1bc<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-col.shader_test<br>
@@ -0,0 +1,34 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout int i, inout float f)<br>
+{<br>
+  i = 0;<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  mat2 m = mat2(0.);<br>
+  int i = u;<br>
+<br>
+  func(i, m[i][1]);<br>
+  color = vec4(m[1].x, m[1].y, m[0].x, m[0].y);<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1.<br></blockquote><div><br></div><div>I think you mean:<br><br>probe all rgb 0. 1. 0.<br><br></div><div>With that fixed, this patch is:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br>
 <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-row.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-row.shader_test<br>
new file mode 100644<br>
index 0000000..1c1c39c<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-mat2-row.shader_test<br>
@@ -0,0 +1,34 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout int i, inout float f)<br>
+{<br>
+  i = 0;<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  mat2 m = mat2(0.);<br>
+  int i = u;<br>
+<br>
+  func(i, m[0][i]);<br>
+  color = vec4(m[0].x, m[0].y, m[1].x, m[1].y);<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array-element.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array-element.shader_test<br>
new file mode 100644<br>
index 0000000..a13d409<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array-element.shader_test<br>
@@ -0,0 +1,35 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout int i, inout float f)<br>
+{<br>
+  i = 0;<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  vec4 v[] = vec4[](vec4(0.), vec4(0.));<br>
+  int i = u;<br>
+<br>
+  func(i, v[1][i]);<br>
+  color = v[1];<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array.shader_test<br>
new file mode 100644<br>
index 0000000..a334020<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4-array.shader_test<br>
@@ -0,0 +1,35 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout int i, inout float f)<br>
+{<br>
+  i = 0;<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  vec4 v[] = vec4[](vec4(0.), vec4(0.));<br>
+  int i = u;<br>
+<br>
+  func(i, v[i].y);<br>
+  color = v[1];<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4.shader_test<br>
new file mode 100644<br>
index 0000000..13259d5<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-index-inout-vec4.shader_test<br>
@@ -0,0 +1,35 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout int i, inout float f)<br>
+{<br>
+  i = 0;<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  vec4 v = vec4(0.);<br>
+  int i = u;<br>
+<br>
+  func(i, v[i]);<br>
+  color = v;<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-inout-vec4.shader_test b/tests/shaders/out-parameter-indexing/vs-inout-vec4.shader_test<br>
new file mode 100644<br>
index 0000000..d3fe9bc<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-inout-vec4.shader_test<br>
@@ -0,0 +1,33 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(inout float f)<br>
+{<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  vec4 v = vec4(0.);<br>
+<br>
+  func(v[u]);<br>
+  color = v;<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
diff --git a/tests/shaders/out-parameter-indexing/vs-out-vec4.shader_test b/tests/shaders/out-parameter-indexing/vs-out-vec4.shader_test<br>
new file mode 100644<br>
index 0000000..3958e38<br>
--- /dev/null<br>
+++ b/tests/shaders/out-parameter-indexing/vs-out-vec4.shader_test<br>
@@ -0,0 +1,33 @@<br>
+[require]<br>
+GLSL >= 1.20<br>
+<br>
+[vertex shader]<br>
+<br>
+uniform int u = 1;<br>
+varying vec4 color;<br>
+<br>
+void func(out float f)<br>
+{<br>
+  f = 1.;<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+  vec4 v = vec4(0.);<br>
+<br>
+  func(v[u]);<br>
+  color = v;<br>
+  gl_Position = gl_Vertex;<br>
+}<br>
+<br>
+[fragment shader]<br>
+varying vec4 color;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = color;<br>
+}<br>
+<br>
+[test]<br>
+draw rect -1 -1 2 2<br>
+probe all rgb 0. 1. 0.<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.1.4<br>
<br>
_______________________________________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/piglit" target="_blank">http://lists.freedesktop.org/mailman/listinfo/piglit</a><br>
</font></span></blockquote></div><br></div></div>