diff options
author | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2017-08-01 11:24:06 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2018-04-04 20:35:50 -0400 |
commit | 342ec5b58838b8a1649752a9a4a9f9bba89145ec (patch) | |
tree | 1db8f0c523a158cc8f626ee99d28db0c9d185b20 | |
parent | 965b55efbdf37985c731d68259012fdc5cef3d09 (diff) |
arb_gpu_shader5: add interpolateAt* tests with input in a struct
The fact that this should be allowed was clarified in GLSL 4.60.
3 files changed, 181 insertions, 0 deletions
diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.shader_test new file mode 100644 index 000000000..081ba2b10 --- /dev/null +++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.shader_test @@ -0,0 +1,59 @@ +# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.60 spec: +# +# "For all of the interpolation functions, interpolant must be an l-value +# from an in declaration; this can include a variable, a block or +# structure member, an array element, or some combination of these." +# + +[require] +GLSL >= 1.50 +GL_ARB_gpu_shader5 + +[vertex shader] +in vec4 piglit_vertex; + +struct S { + vec3 a; + vec2 b; /* second variable to test that varying packing doesn't break anything */ +}; + +out S vs2ps; + +void main() +{ + gl_Position = piglit_vertex; + + vs2ps.a = piglit_vertex.xyz; + vs2ps.b = vec2(0.0, 1.0); +} + +[fragment shader] +#extension GL_ARB_gpu_shader5 : enable + +struct S { + vec3 a; + vec2 b; +}; + +in S vs2ps; + +out vec4 color; + +void main() +{ + /* All pixels are fully covered, so these should be the same. */ + vec3 delta = vs2ps.a - interpolateAtCentroid(vs2ps.a); + + if (delta != vec3(0.0)) { + color = vec4(1.0, delta.x + 0.5, delta.y + 0.5, delta.z + 0.5); + } else { + color = vec4(vs2ps.b.x, vs2ps.b.y, 0.0, 1.0); + } +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 1.0 diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.shader_test new file mode 100644 index 000000000..93a507daf --- /dev/null +++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.shader_test @@ -0,0 +1,63 @@ +# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.60 spec: +# +# "For all of the interpolation functions, interpolant must be an l-value +# from an in declaration; this can include a variable, a block or +# structure member, an array element, or some combination of these." +# + +[require] +GLSL >= 1.50 +GL_ARB_gpu_shader5 + +[vertex shader] +in vec4 piglit_vertex; + +struct S { + vec3 a; + vec2 b; /* second variable to test that varying packing doesn't break anything */ +}; + +out S vs2ps; + +void main() +{ + gl_Position = piglit_vertex; + + vs2ps.a = piglit_vertex.xyz; + vs2ps.b = vec2(0.0, 1.0); +} + +[fragment shader] +#extension GL_ARB_gpu_shader5 : enable + +struct S { + vec3 a; + vec2 b; +}; + +in S vs2ps; + +uniform vec2 u_offset; + +out vec4 color; + +void main() +{ + /* u_offset is always 0, so these should be the same. */ + vec3 delta = vs2ps.a - interpolateAtOffset(vs2ps.a, u_offset); + + if (delta != vec3(0.0)) { + color = vec4(1.0, delta.x + 0.5, delta.y + 0.5, delta.z + 0.5); + } else { + color = vec4(vs2ps.b.x, vs2ps.b.y, 0.0, 1.0); + } +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform vec2 u_offset 0 0 + +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 1.0 diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-struct.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-struct.shader_test new file mode 100644 index 000000000..4bb07e8a5 --- /dev/null +++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-struct.shader_test @@ -0,0 +1,59 @@ +# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.60 spec: +# +# "For all of the interpolation functions, interpolant must be an l-value +# from an in declaration; this can include a variable, a block or +# structure member, an array element, or some combination of these." +# + +[require] +GLSL >= 1.50 +GL_ARB_gpu_shader5 + +[vertex shader] +in vec4 piglit_vertex; + +struct S { + vec3 a; + vec2 b; /* second variable to test that varying packing doesn't break anything */ +}; + +out S vs2ps; + +void main() +{ + gl_Position = piglit_vertex; + + vs2ps.a = piglit_vertex.xyz; + vs2ps.b = vec2(0.0, 1.0); +} + +[fragment shader] +#extension GL_ARB_gpu_shader5 : enable + +struct S { + vec3 a; + vec2 b; +}; + +in S vs2ps; + +out vec4 color; + +void main() +{ + /* There is no multi-sampling, so these should be the same. */ + vec3 delta = vs2ps.a - interpolateAtSample(vs2ps.a, 0); + + if (delta != vec3(0.0)) { + color = vec4(1.0, delta.x + 0.5, delta.y + 0.5, delta.z + 0.5); + } else { + color = vec4(vs2ps.b.x, vs2ps.b.y, 0.0, 1.0); + } +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 1.0 |