[Piglit] [PATCH] arb_gpu_shader5: adding an const-nonconst struct-sampler indexing

Alejandro PiƱeiro apinheiro at igalia.com
Fri Sep 4 10:48:31 PDT 2015


Right now there are tests for the following indexing combination:
  a) No struct - non const sampler indexing
  b) Non const struct indexing - single sampler
  c) Non const struct indexing - const sampler indexing
  d) Non const struct indexing - non const sampler indexing

This commit adds the following combination:
  e) Const struct indexing - non const sampler indexing
---

To provide some context, right now:

a) and b) pass on i965,
c) fails on i965
d) fails on i965 with the IR path, but crashes with the NIR path.

I have been taking a look to why there is a different behaviour
IR vs NIR on d), at least to check if there was a easy solution
to avoid the crash. On that use case the nir tree resulting
includes two sampler offset on the same texture operation, so it
raises and assertion on nir_validate. I concluded that it would
not be trivial to get the NIR path not crashing, as it is likely
it is needed to someone jumps in to solve c) and d), that seems
to be a corner case that was not contemplated on current
implementation of arb_gpu_shader5.

In any case, while investigating this, I tried out the outcome
of a const struct indexing and a non const sampler indexing (so
e)) and it works fine on i965. So just for the sake of 
completeness Im submitting this combination. 

 .../fs-struct-const-sampler-nonconst.shader_test   | 72 +++++++++++++++++
 .../gs-struct-const-sampler-nonconst.shader_test   | 91 ++++++++++++++++++++++
 .../vs-struct-const-sampler-nonconst.shader_test   | 84 ++++++++++++++++++++
 3 files changed, 247 insertions(+)
 create mode 100644 tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test
 create mode 100644 tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test
 create mode 100644 tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test

diff --git a/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test
new file mode 100644
index 0000000..80069ea
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test
@@ -0,0 +1,72 @@
+# This test verifies that dynamically uniform indexing of sampler arrays
+# in the fragment shader behaves correctly.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader passthrough]
+
+[fragment shader]
+#version 150
+#extension GL_ARB_gpu_shader5: require
+
+struct S {
+   sampler2D tex[4];
+};
+
+uniform S s[2];
+
+uniform int n;
+
+out vec4 color;
+
+void main()
+{
+	color = texture(s[1].tex[n], vec2(0.75, 0.25));
+}
+
+[test]
+clear color 0.2 0.2 0.2 0.2
+clear
+
+uniform int s[1].tex[0] 0
+uniform int s[1].tex[1] 1
+uniform int s[1].tex[2] 2
+uniform int s[1].tex[3] 3
+
+texture checkerboard 0 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 1.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 1.0, 1.0, 1.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+uniform int n 0
+draw rect -1 -1 1 1
+
+relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int n 1
+draw rect 0 -1 1 1
+
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int n 2
+draw rect -1 0 1 1
+
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
+
+uniform int n 3
+draw rect 0 0 1 1
+
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
diff --git a/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test
new file mode 100644
index 0000000..cf6795c
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test
@@ -0,0 +1,91 @@
+# This test verifies that dynamically uniform indexing of sampler arrays
+# in the geometry shader behaves correctly.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader passthrough]
+
+[geometry shader]
+#version 150
+#extension GL_ARB_gpu_shader5: require
+
+struct S {
+   sampler2D tex[4];
+};
+
+uniform S s[2];
+
+uniform int n;
+
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+out vec4 color;
+
+void main()
+{
+	for (int i = 0; i < 3; i++) {
+		gl_Position = gl_in[i].gl_Position;
+		color = texture(s[1].tex[n], vec2(0.75, 0.25));
+		EmitVertex();
+	}
+	EndPrimitive();
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_gpu_shader5: require
+
+in vec4 color;
+out vec4 out_color;
+
+void main()
+{
+	out_color = color;
+}
+
+[test]
+clear color 0.2 0.2 0.2 0.2
+clear
+
+uniform int s[1].tex[0] 0
+uniform int s[1].tex[1] 1
+uniform int s[1].tex[2] 2
+uniform int s[1].tex[3] 3
+
+texture checkerboard 0 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 1.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 1.0, 1.0, 1.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+uniform int n 0
+draw rect -1 -1 1 1
+
+relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int n 1
+draw rect 0 -1 1 1
+
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int n 2
+draw rect -1 0 1 1
+
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
+
+uniform int n 3
+draw rect 0 0 1 1
+
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
diff --git a/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test
new file mode 100644
index 0000000..9388675
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test
@@ -0,0 +1,84 @@
+# This test verifies that dynamically uniform indexing of sampler arrays
+# in the vertex shader behaves correctly.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+#version 150
+#extension GL_ARB_gpu_shader5: require
+
+struct S {
+   sampler2D tex[4];
+};
+
+uniform S s[2];
+
+uniform int n;
+
+in vec4 piglit_vertex;
+out vec4 color;
+
+void main()
+{
+	gl_Position = piglit_vertex;
+	color = texture(s[1].tex[n], vec2(0.75, 0.25));
+}
+
+[fragment shader]
+#version 150
+#extension GL_ARB_gpu_shader5: require
+
+in vec4 color;
+out vec4 out_color;
+
+void main()
+{
+	out_color = color;
+}
+
+[test]
+clear color 0.2 0.2 0.2 0.2
+clear
+
+uniform int s[1].tex[0] 0
+uniform int s[1].tex[1] 1
+uniform int s[1].tex[2] 2
+uniform int s[1].tex[3] 3
+
+texture checkerboard 0 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 1.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 1.0, 1.0, 1.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+uniform int n 0
+draw rect -1 -1 1 1
+
+relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int n 1
+draw rect 0 -1 1 1
+
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int n 2
+draw rect -1 0 1 1
+
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
+
+uniform int n 3
+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.1.4



More information about the Piglit mailing list