[Piglit] [PATCH 18/18] arb_geometry_shader4: Test that gl_VerticesIn is const.
Fabian Bieler
fabianbieler at fastmail.fm
Fri May 31 05:56:48 PDT 2013
Test that gl_VerticesIn can be used as a valid constant expression.
Also test that it evaluates to 3 for triangles.
---
.../compiler/verticesin-const-expression.geom | 31 ++++++++
.../compiler/verticesin-const.geom | 31 ++++++++
.../linker/verticesin-const.shader_test | 91 ++++++++++++++++++++++
3 files changed, 153 insertions(+)
create mode 100644 tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom
create mode 100644 tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom
create mode 100644 tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test
diff --git a/tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom b/tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom
new file mode 100644
index 0000000..f4b77f7
--- /dev/null
+++ b/tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom
@@ -0,0 +1,31 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.30
+// require_extensions: GL_ARB_geometry_shader4
+// [end config]
+
+#version 130
+#extension GL_ARB_geometry_shader4: enable
+
+uniform int idx;
+uniform sampler2D tex;
+uniform sampler2D tex_array[10];
+
+void main()
+{
+ //All quotes are from the glsl 1.3 specification.
+
+ //"Samplers aggregated into arrays within a shader [...] can only be indexed with integral constant expressions"
+ texture(tex_array[gl_VerticesIn * 2 - 2], vec2(0, 0));
+
+ //"When an array size is specified in a declaration, it must be an integral constant expression"
+ float array[gl_VerticesIn * 2 - 2];
+ array[idx];
+
+ //"Initializers for const declarations must be constant expression"
+ const int var = gl_VerticesIn * 2 - 2;
+
+ //"The offset value must be a constant expression."
+ textureOffset(tex, vec2(0, 0), ivec2(gl_VerticesIn * 2 - 2));
+}
+
diff --git a/tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom b/tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom
new file mode 100644
index 0000000..f7aec2a
--- /dev/null
+++ b/tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom
@@ -0,0 +1,31 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.30
+// require_extensions: GL_ARB_geometry_shader4
+// [end config]
+
+#version 130
+#extension GL_ARB_geometry_shader4: enable
+
+uniform int idx;
+uniform sampler2D tex;
+uniform sampler2D tex_array[7];
+
+void main()
+{
+ //All quotes are from the glsl 1.3 specification.
+
+ //"Samplers aggregated into arrays within a shader [...] can only be indexed with integral constant expressions"
+ texture(tex_array[gl_VerticesIn], vec2(0, 0));
+
+ //"When an array size is specified in a declaration, it must be an integral constant expression"
+ float array[gl_VerticesIn];
+ array[idx];
+
+ //"Initializers for const declarations must be constant expression"
+ const int var = gl_VerticesIn;
+
+ //"The offset value must be a constant expression."
+ textureOffset(tex, vec2(0, 0), ivec2(gl_VerticesIn));
+}
+
diff --git a/tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test b/tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test
new file mode 100644
index 0000000..5f697ee
--- /dev/null
+++ b/tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test
@@ -0,0 +1,91 @@
+[require]
+GL >= 2.0
+GLSL >= 1.30
+GL_ARB_geometry_shader4
+
+[vertex shader]
+#version 130
+
+in vec4 vertex;
+
+out float gs_input[6];
+void main()
+{
+ for (int i = 0; i < 6; i++)
+ gs_input[i] = 0.5;
+ gl_Position = vertex;
+}
+
+[geometry shader]
+#version 130
+#extension GL_ARB_geometry_shader4: enable
+#line 22
+
+uniform int zero;
+uniform sampler2D tex;
+uniform sampler2D tex_array[7];
+
+in float gs_input[][6];
+
+out vec4 color;
+
+void main()
+{
+ for (int i = 0; i < gl_VerticesIn; i++) {
+ vec4 c = vec4(0, 0, 0, 1);
+ c.x = texture(tex_array[gl_VerticesIn], vec2(0.5, 0.5)).x;
+
+ const int three = gl_VerticesIn;
+ if (three == 3)
+ c.y = 1.0;
+ else
+ c.y = 0.0;
+
+ //We sample from a row of 8 pixels, the left 4 blue and the right 4 white.
+ //Since we only use the red channel, the left 4 are 0, and the right 4 are 1.
+ //sample twice from the fith pixel in the row:
+ c.z = textureOffset(tex, vec2(3.0/16.0, 0.75), ivec2(gl_VerticesIn, 0)).x;
+ c.z *= textureOffset(tex, vec2(15.0/16.0, 0.75), ivec2(gl_VerticesIn, 0)).x;
+
+ gl_Position = gl_PositionIn[i];
+ color = c;
+ EmitVertex();
+ }
+}
+
+[geometry layout]
+input type GL_TRIANGLES
+output type GL_TRIANGLE_STRIP
+vertices out 3
+
+[fragment shader]
+#version 130
+
+in vec4 color;
+
+void main()
+{
+ gl_FragColor = color;
+}
+
+[vertex data]
+vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0 1.0
+-1.0 1.0
+
+[test]
+uniform int tex_array[0] 1
+uniform int tex_array[1] 1
+uniform int tex_array[2] 1
+uniform int tex_array[3] 2
+uniform int tex_array[4] 1
+uniform int tex_array[5] 1
+uniform int tex_array[6] 1
+uniform int tex 0
+texture rgbw 0 (8, 8)
+texture checkerboard 1 0 (8, 8) (0.0, 0.0, 0.0, 0.0) (0.0, 0.0, 0.0, 0.0)
+texture checkerboard 2 0 (8, 8) (1.0, 1.0, 1.0, 1.0) (1.0, 1.0, 1.0, 1.0)
+draw arrays GL_TRIANGLE_FAN 0 4
+probe all rgb 1.0 1.0 1.0
--
1.8.1.2
More information about the Piglit
mailing list