<div dir="ltr">Hi,<div>It could be also useful to have a test that actually verifies the value written to uniform from host is read used by GPU. This uniform array problem causes assert in debug builds of Mesa but it would pass the compile in release mode. Also, there is potential for out-of-bounds access for array on stack in brw::vec4_visitor::pack_uniform_registers in Mesa.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Sep 3, 2013 at 2:51 PM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">These test that a uniform array used only as a function argument is not<br>
improperly optimized out or has its length reduced.<br>
<br>
Cc: Dominik Behr <<a href="mailto:dbehr@chromium.org">dbehr@chromium.org</a>><br>
Reported-by: Dominik Behr <<a href="mailto:dbehr@chromium.org">dbehr@chromium.org</a>><br>
---<br>
 .../glsl-fs-max-array-access-forward-declaration.frag    | 16 ++++++++++++++++<br>
 tests/shaders/glsl-fs-max-array-access-function.frag     | 14 ++++++++++++++<br>
 .../glsl-vs-max-array-access-forward-declaration.vert    | 16 ++++++++++++++++<br>
 tests/shaders/glsl-vs-max-array-access-function.vert     | 15 +++++++++++++++<br>
 4 files changed, 61 insertions(+)<br>
 create mode 100644 tests/shaders/glsl-fs-max-array-access-forward-declaration.frag<br>
 create mode 100644 tests/shaders/glsl-fs-max-array-access-function.frag<br>
 create mode 100644 tests/shaders/glsl-vs-max-array-access-forward-declaration.vert<br>
 create mode 100644 tests/shaders/glsl-vs-max-array-access-function.vert<br>
<br>
diff --git a/tests/shaders/glsl-fs-max-array-access-forward-declaration.frag b/tests/shaders/glsl-fs-max-array-access-forward-declaration.frag<br>
new file mode 100644<br>
index 0000000..e92859b<br>
--- /dev/null<br>
+++ b/tests/shaders/glsl-fs-max-array-access-forward-declaration.frag<br>
@@ -0,0 +1,16 @@<br>
+// [config]<br>
+// expect_result: pass<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+<br>
+uniform float a[3];<br>
+<br>
+float func(float array[3]);<br>
+<br>
+void main() {<br>
+       gl_FragColor = vec4(func(a), vec3(1.0));<br>
+}<br>
+<br>
+float func(float array[3]) {<br>
+       return array[2];<br>
+}<br>
diff --git a/tests/shaders/glsl-fs-max-array-access-function.frag b/tests/shaders/glsl-fs-max-array-access-function.frag<br>
new file mode 100644<br>
index 0000000..a3208dc<br>
--- /dev/null<br>
+++ b/tests/shaders/glsl-fs-max-array-access-function.frag<br>
@@ -0,0 +1,14 @@<br>
+// [config]<br>
+// expect_result: pass<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+<br>
+uniform float a[3];<br>
+<br>
+float func(float array[3]) {<br>
+       return array[2];<br>
+}<br>
+<br>
+void main() {<br>
+       gl_FragColor = vec4(func(a), vec3(1.0));<br>
+}<br>
diff --git a/tests/shaders/glsl-vs-max-array-access-forward-declaration.vert b/tests/shaders/glsl-vs-max-array-access-forward-declaration.vert<br>
new file mode 100644<br>
index 0000000..4306e78<br>
--- /dev/null<br>
+++ b/tests/shaders/glsl-vs-max-array-access-forward-declaration.vert<br>
@@ -0,0 +1,16 @@<br>
+// [config]<br>
+// expect_result: pass<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+<br>
+uniform float a[3];<br>
+<br>
+float func(float array[3]);<br>
+<br>
+void main() {<br>
+       gl_Position = vec4(func(a), vec3(1.0));<br>
+}<br>
+<br>
+float func(float array[3]) {<br>
+       return array[2];<br>
+}<br>
diff --git a/tests/shaders/glsl-vs-max-array-access-function.vert b/tests/shaders/glsl-vs-max-array-access-function.vert<br>
new file mode 100644<br>
index 0000000..45592c5<br>
--- /dev/null<br>
+++ b/tests/shaders/glsl-vs-max-array-access-function.vert<br>
@@ -0,0 +1,15 @@<br>
+// [config]<br>
+// expect_result: pass<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+<br>
+uniform float a[3];<br>
+<br>
+float func(float array[3]) {<br>
+       return array[2];<br>
+}<br>
+<br>
+void main()<br>
+{<br>
+       gl_Position = vec4(func(a), vec3(1.0));<br>
+}<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.3.2<br>
<br>
</font></span></blockquote></div><br></div>