arb_gpu_shader_fp64: test passing an array from vs->gs->fs works.

Submitted by Dave Airlie on Oct. 12, 2015, 4:49 a.m.

Details

Message ID 1444625390-3388-1-git-send-email-airlied@gmail.com
State New
Headers show

Not browsing as part of any series.

Commit Message

Dave Airlie Oct. 12, 2015, 4:49 a.m.
From: Dave Airlie <airlied@redhat.com>

This adds two variants on the same basic test, passing
an array of values from vs->gs->fs. The second variant
just initialised the array from 64-bit attributes.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 .../execution/gs-fs-vs-double-array.shader_test    | 73 ++++++++++++++++++++
 .../gs-fs-vs-attrib-double-array.shader_test       | 77 ++++++++++++++++++++++
 2 files changed, 150 insertions(+)
 create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/gs-fs-vs-double-array.shader_test
 create mode 100644 tests/spec/arb_vertex_attrib_64bit/execution/gs-fs-vs-attrib-double-array.shader_test

Patch hide | download patch | download mbox

diff --git a/tests/spec/arb_gpu_shader_fp64/execution/gs-fs-vs-double-array.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/gs-fs-vs-double-array.shader_test
new file mode 100644
index 0000000..99eeb79
--- /dev/null
+++ b/tests/spec/arb_gpu_shader_fp64/execution/gs-fs-vs-double-array.shader_test
@@ -0,0 +1,73 @@ 
+# test passing a double array from vs->gs->fs works.
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader_fp64
+
+[vertex shader]
+#version 150
+#extension GL_ARB_gpu_shader_fp64 : require
+in vec4 vertex;
+
+out VS {
+	vec4 vs_vertex;
+	double vs_var0[2];
+};
+
+void main()
+{
+        vs_vertex = vertex;
+	vs_var0[0] = 1.0LF;
+	vs_var0[1] = 2.0LF;
+}
+
+[geometry shader]
+#version 150
+#extension GL_ARB_gpu_shader_fp64 : require
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+
+in VS {
+	vec4 vs_vertex;
+	double vs_var0[2];
+} inp[3];
+
+out GS {
+	flat double gs_var0[2];
+};
+
+void main()
+{
+	for (int i = 0; i < 3; i++) {
+		gl_Position = inp[i].vs_vertex;
+		gs_var0[0] = inp[i].vs_var0[0] + 3.0LF;
+		gs_var0[1] = inp[i].vs_var0[1] + 4.0LF;
+ 	        EmitVertex();
+        }
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_gpu_shader_fp64 : require
+
+in GS {
+	flat double gs_var0[2];
+};
+
+void main()
+{
+  if (gs_var0[0] == 4.0LF && gs_var0[1] == 6.0LF)
+     gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+  else
+     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[vertex data]
+vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_vertex_attrib_64bit/execution/gs-fs-vs-attrib-double-array.shader_test b/tests/spec/arb_vertex_attrib_64bit/execution/gs-fs-vs-attrib-double-array.shader_test
new file mode 100644
index 0000000..e20fe9e
--- /dev/null
+++ b/tests/spec/arb_vertex_attrib_64bit/execution/gs-fs-vs-attrib-double-array.shader_test
@@ -0,0 +1,77 @@ 
+# test passing a double array from vs->gs->fs works.
+# this variant inputs values from vertex varyings w
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader_fp64
+GL_ARB_vertex_attrib_64bit
+
+[vertex shader]
+#version 150
+#extension GL_ARB_gpu_shader_fp64 : require
+#extension GL_ARB_vertex_attrib_64bit : require
+in dvec2 values;
+in vec4 vertex;
+
+out VS {
+	vec4 vs_vertex;
+	double vs_var0[2];
+};
+
+void main()
+{
+        vs_vertex = vertex;
+	vs_var0[0] = values.x;
+	vs_var0[1] = values.y;
+}
+
+[geometry shader]
+#version 150
+#extension GL_ARB_gpu_shader_fp64 : require
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+
+in VS {
+	vec4 vs_vertex;
+	double vs_var0[2];
+} inp[3];
+
+out GS {
+	flat double gs_var0[2];
+};
+
+void main()
+{
+	for (int i = 0; i < 3; i++) {
+		gl_Position = inp[i].vs_vertex;
+		gs_var0[0] = inp[i].vs_var0[0] + 3.0LF;
+		gs_var0[1] = inp[i].vs_var0[1] + 4.0LF;
+ 	        EmitVertex();
+        }
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_gpu_shader_fp64 : require
+
+in GS {
+	flat double gs_var0[2];
+};
+
+void main()
+{
+  if (gs_var0[0] == 5.0LF && gs_var0[1] == 7.0LF)
+     gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+  else
+     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[vertex data]
+vertex/float/2 values/double/2
+-1.0 -1.0 2.0 3.0
+ 1.0 -1.0 2.0 3.0
+ 1.0  1.0 2.0 3.0
+-1.0  1.0 2.0 3.0
+
+[test]
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0