Test results:
Nvidia GeForce 840M - NVIDIA 352.41

layout-location-block-with-aoa-member.shader_test - pass
layout-location-block-with-single-line-declaration-members.shader_test - fail
layout-location-block-with-struct-member.shader_test - pass

Mesa (master)

layout-location-block-with-aoa-member.shader_test - fail
layout-location-block-with-single-line-declaration-members.shader_test - pass
layout-location-block-with-struct-member.shader_test - fail
---
 ...yout-location-block-with-aoa-member.shader_test | 80 ++++++++++++++++++++++
 ...ith-single-line-declaration-members.shader_test | 76 ++++++++++++++++++++
 ...t-location-block-with-struct-member.shader_test | 76 ++++++++++++++++++++
 3 files changed, 232 insertions(+)
 create mode 100644 
tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test
 create mode 100644 
tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test
 create mode 100644 
tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test

diff --git 
a/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test
 
b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test
new file mode 100644
index 0000000..d32a5b5
--- /dev/null
+++ 
b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test
@@ -0,0 +1,80 @@
+// Test that inputs and outputs are not assigned overlapping locations when
+// using interface blocks and explicit locations.
+
+[require]
+GLSL >= 1.50
+GL_ARB_separate_shader_objects
+GL_ARB_arrays_of_arrays
+
+[vertex shader]
+#version 150
+#extension GL_ARB_arrays_of_arrays: require
+#extension GL_ARB_separate_shader_objects: require
+
+in vec4 piglit_vertex;
+
+layout(location = 0) out block {
+       vec4 a[2][2];
+       vec4 b;
+};
+
+void main()
+{
+       a[0][0] = vec4(1.0, 0.0, 0.0, 1.0);
+       a[0][1] = vec4(0.0, 1.0, 0.0, 1.0);
+       a[1][0] = vec4(0.0, 0.0, 1.0, 1.0);
+       a[1][1] = vec4(1.0, 0.0, 1.0, 1.0);
+       b = vec4(1.0, 1.0, 1.0, 1.0);
+
+       gl_Position = piglit_vertex;
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_arrays_of_arrays: require
+#extension GL_ARB_separate_shader_objects: require
+
+layout(location = 0) in block {
+       vec4 a[2][2];
+       vec4 b;
+};
+
+uniform int i;
+
+out vec4 color;
+
+void main()
+{
+       if (i < 4)
+               color = a[i/2][int(mod(i, 2))];
+       else
+               color = b;
+}
+
+[test]
+uniform int i 0
+draw rect 0 -1 1 1
+
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int i 1
+draw rect -1 0 1 1
+
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int i 2
+draw rect 0 0 1 1
+
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
+
+uniform int i 3
+draw rect -1 -0.5 1 0.5
+
+# shader runner has a window size of 250 * 250 so we need to tweak our
+# probe values to work around this.
+relative probe rect rgb (0.0, 0.3, 0.5, 0.20) (1.0, 0.0, 1.0)
+
+uniform int i 4
+draw rect -1 -1 1 0.5
+
+relative probe rect rgb (0.0, 0.0, 0.5, 0.25) (1.0, 1.0, 1.0)
diff --git 
a/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test
 
b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test
new file mode 100644
index 0000000..bb7714c
--- /dev/null
+++ 
b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test
@@ -0,0 +1,76 @@
+// Test that inputs and outputs are not assigned overlapping locations when
+// using interface blocks and explicit locations.
+
+[require]
+GLSL >= 1.50
+GL_ARB_separate_shader_objects
+GL_ARB_arrays_of_arrays
+
+[vertex shader]
+#version 150
+#extension GL_ARB_arrays_of_arrays: require
+#extension GL_ARB_separate_shader_objects: require
+
+in vec4 piglit_vertex;
+
+layout(location = 0) out block {
+       vec4 a, b, c;
+       vec4 d;
+};
+
+void main()
+{
+       a = vec4(1.0, 0.0, 0.0, 1.0);
+       b = vec4(0.0, 1.0, 0.0, 1.0);
+       c = vec4(0.0, 0.0, 1.0, 1.0);
+       d = vec4(1.0, 1.0, 1.0, 1.0);
+
+       gl_Position = piglit_vertex;
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_arrays_of_arrays: require
+#extension GL_ARB_separate_shader_objects: require
+
+layout(location = 0) in block {
+       vec4 a, b, c;
+       vec4 d;
+};
+
+uniform int i;
+
+out vec4 color;
+
+void main()
+{
+       if (i == 0)
+               color = a;
+       else if (i == 1)
+               color = b;
+       else if (i == 2)
+               color = c;
+       else if (i == 3)
+               color = d;
+}
+
+[test]
+uniform int i 0
+draw rect 0 -1 1 1
+
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int i 1
+draw rect -1 0 1 1
+
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int i 2
+draw rect 0 0 1 1
+
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
+
+uniform int i 3
+draw rect -1 -1 1 1
+
+relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 1.0, 1.0)
diff --git 
a/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test
 
b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test
new file mode 100644
index 0000000..2346a88
--- /dev/null
+++ 
b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test
@@ -0,0 +1,76 @@
+// Test that inputs and outputs are not assigned overlapping locations when
+// using interface blocks and explicit locations.
+
+[require]
+GLSL >= 1.50
+GL_ARB_separate_shader_objects
+
+[vertex shader]
+#version 150
+#extension GL_ARB_separate_shader_objects: require
+
+in vec4 piglit_vertex;
+
+struct S {
+       vec4 a;
+       vec4 b;
+};
+
+layout(location = 0) out block {
+       S s;
+       vec4 c;
+};
+
+void main()
+{
+       s.a = vec4(1.0, 0.0, 0.0, 1.0);
+       s.b = vec4(0.0, 1.0, 0.0, 1.0);
+       c = vec4(1.0, 1.0, 1.0, 1.0);
+
+       gl_Position = piglit_vertex;
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_separate_shader_objects: require
+
+struct S {
+       vec4 a;
+       vec4 b;
+};
+
+layout(location = 0) in block {
+       S s;
+       vec4 c;
+};
+
+uniform int i;
+
+out vec4 color;
+
+void main()
+{
+       if (i == 0)
+               color = s.a;
+       else if (i == 1)
+               color = s.b;
+       else
+               color = c;
+}
+
+[test]
+uniform int i 0
+draw rect 0 -1 1 1
+
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int i 1
+draw rect -1 0 1 1
+
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int i 2
+draw rect 0 0 1 1
+
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
+
-- 
2.4.3

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to