With no layered fb and unconfigured viewports, the values of gl_Layer/gl_ViewportIndex shouldn't matter for rendering. Make sure that they're being passed through correctly from GS to FS. (Out-of-range values may have undefined results for viewports, so only test with valid values.)
Similarly add tests that write layer/viewport in VS to make sure it appears properly in FS (as well as what happens when there's an intervening GS). Signed-off-by: Ilia Mirkin <[email protected]> --- v1 -> v2: - use passthrough vertex shader - changed tests to be 4 draws instead of 5, drawing each into separate quadrants and doing one check at the end. should make it easier to identify issues - added a vs test that uses AMD_vertex_shader_layer (tested using softpipe) v2 -> v3: - only use valid viewport ids (even though all the hw appears to render with it properly, it's undefined in opengl) - add AMD_vertex_shader_viewport_index tests (totally untested, no mesa support at all) - add versions of AMD_vertex_shader_* where there's an intervening GS which is specified to just throw away the VS values (but softpipe asserts) .../layer-gs-write-simple.shader_test | 53 +++++++++++++++++ .../layer-vs-gs-write-simple.shader_test | 64 +++++++++++++++++++++ .../layer-vs-write-gs-no-write-simple.shader_test | 63 +++++++++++++++++++++ .../layer-vs-write-simple.shader_test | 48 ++++++++++++++++ .../viewport-gs-write-simple.shader_test | 55 ++++++++++++++++++ .../viewport-vs-gs-write-simple.shader_test | 66 ++++++++++++++++++++++ ...iewport-vs-write-gs-no-write-simple.shader_test | 62 ++++++++++++++++++++ .../viewport-vs-write-simple.shader_test | 48 ++++++++++++++++ 8 files changed, 459 insertions(+) create mode 100644 tests/spec/arb_fragment_layer_viewport/layer-gs-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/layer-vs-gs-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/layer-vs-write-gs-no-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/layer-vs-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/viewport-gs-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/viewport-vs-gs-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/viewport-vs-write-gs-no-write-simple.shader_test create mode 100644 tests/spec/arb_fragment_layer_viewport/viewport-vs-write-simple.shader_test diff --git a/tests/spec/arb_fragment_layer_viewport/layer-gs-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/layer-gs-write-simple.shader_test new file mode 100644 index 0000000..bfafcb1 --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/layer-gs-write-simple.shader_test @@ -0,0 +1,53 @@ +[require] +GLSL >= 1.50 +GL_ARB_fragment_layer_viewport + +[vertex shader passthrough] + +[geometry shader] +#version 150 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +uniform int layer; + +void main() +{ + for (int i = 0; i < 3; i++) { + gl_Position = gl_in[i].gl_Position; + gl_Layer = layer; + EmitVertex(); + } +} + +[fragment shader] +#version 150 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int layer; + +void main() +{ + if (gl_Layer == layer) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int layer 0 +draw rect -1 -1 1 1 + +uniform int layer 1 +draw rect 0 -1 1 1 + +uniform int layer 10000 +draw rect -1 0 1 1 + +uniform int layer -10000 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/layer-vs-gs-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/layer-vs-gs-write-simple.shader_test new file mode 100644 index 0000000..aab8a5b --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/layer-vs-gs-write-simple.shader_test @@ -0,0 +1,64 @@ +[require] +GLSL >= 1.50 +GL_ARB_fragment_layer_viewport +GL_AMD_vertex_shader_layer + +[vertex shader] +#version 140 +#extension GL_AMD_vertex_shader_layer: enable +in vec4 piglit_vertex; +uniform int layer; + +void main() +{ + gl_Position = piglit_vertex; + gl_Layer = layer + 1; +} + +[geometry shader] +#version 150 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +uniform int layer; + +void main() +{ + for (int i = 0; i < 3; i++) { + gl_Position = gl_in[i].gl_Position; + gl_Layer = layer; + EmitVertex(); + } +} + +[fragment shader] +#version 150 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int layer; + +void main() +{ + if (gl_Layer == layer) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int layer 0 +draw rect -1 -1 1 1 + +uniform int layer 1 +draw rect 0 -1 1 1 + +uniform int layer 10000 +draw rect -1 0 1 1 + +uniform int layer -10000 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/layer-vs-write-gs-no-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/layer-vs-write-gs-no-write-simple.shader_test new file mode 100644 index 0000000..3dfc2c4 --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/layer-vs-write-gs-no-write-simple.shader_test @@ -0,0 +1,63 @@ +[require] +GLSL >= 1.50 +GL_ARB_fragment_layer_viewport +GL_AMD_vertex_shader_layer + +[vertex shader] +#version 140 +#extension GL_AMD_vertex_shader_layer: enable +in vec4 piglit_vertex; +uniform int layer; + +void main() +{ + gl_Position = piglit_vertex; + gl_Layer = layer; +} + +[geometry shader] +#version 150 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +uniform int layer; + +void main() +{ + for (int i = 0; i < 3; i++) { + gl_Position = gl_in[i].gl_Position; + EmitVertex(); + } +} + +[fragment shader] +#version 150 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int layer; + +void main() +{ + if (gl_Layer == 0) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int layer 0 +draw rect -1 -1 1 1 + +uniform int layer 1 +draw rect 0 -1 1 1 + +uniform int layer 10000 +draw rect -1 0 1 1 + +uniform int layer -10000 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/layer-vs-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/layer-vs-write-simple.shader_test new file mode 100644 index 0000000..fe453fb --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/layer-vs-write-simple.shader_test @@ -0,0 +1,48 @@ +[require] +GLSL >= 1.40 +GL_ARB_fragment_layer_viewport +GL_AMD_vertex_shader_layer + +[vertex shader] +#version 140 +#extension GL_AMD_vertex_shader_layer: enable +in vec4 piglit_vertex; +uniform int layer; + +void main() +{ + gl_Position = piglit_vertex; + gl_Layer = layer; +} + +[fragment shader] +#version 140 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int layer; + +void main() +{ + if (gl_Layer == layer) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int layer 0 +draw rect -1 -1 1 1 + +uniform int layer 1 +draw rect 0 -1 1 1 + +uniform int layer 10000 +draw rect -1 0 1 1 + +uniform int layer -10000 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/viewport-gs-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/viewport-gs-write-simple.shader_test new file mode 100644 index 0000000..a1248a9 --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/viewport-gs-write-simple.shader_test @@ -0,0 +1,55 @@ +[require] +GLSL >= 1.50 +GL_ARB_fragment_layer_viewport +GL_ARB_viewport_array + +[vertex shader passthrough] + +[geometry shader] +#version 150 +#extension GL_ARB_viewport_array: enable + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +uniform int viewport; + +void main() +{ + for (int i = 0; i < 3; i++) { + gl_Position = gl_in[i].gl_Position; + gl_ViewportIndex = viewport; + EmitVertex(); + } +} + +[fragment shader] +#version 150 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int viewport; + +void main() +{ + if (gl_ViewportIndex == viewport) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int viewport 0 +draw rect -1 -1 1 1 + +uniform int viewport 1 +draw rect 0 -1 1 1 + +uniform int viewport 14 +draw rect -1 0 1 1 + +uniform int viewport 15 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/viewport-vs-gs-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/viewport-vs-gs-write-simple.shader_test new file mode 100644 index 0000000..53612f1 --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/viewport-vs-gs-write-simple.shader_test @@ -0,0 +1,66 @@ +[require] +GLSL >= 1.50 +GL_ARB_fragment_layer_viewport +GL_ARB_viewport_array +GL_AMD_vertex_shader_viewport_index + +[vertex shader] +#version 140 +#extension GL_AMD_vertex_shader_viewport_index: enable +in vec4 piglit_vertex; +uniform int viewport; + +void main() +{ + gl_Position = piglit_vertex; + gl_ViewportIndex = viewport + 1; +} + +[geometry shader] +#version 150 +#extension GL_ARB_viewport_array: enable + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +uniform int viewport; + +void main() +{ + for (int i = 0; i < 3; i++) { + gl_Position = gl_in[i].gl_Position; + gl_ViewportIndex = viewport; + EmitVertex(); + } +} + +[fragment shader] +#version 150 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int viewport; + +void main() +{ + if (gl_ViewportIndex == viewport) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int viewport 0 +draw rect -1 -1 1 1 + +uniform int viewport 1 +draw rect 0 -1 1 1 + +uniform int viewport 14 +draw rect -1 0 1 1 + +uniform int viewport 15 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/viewport-vs-write-gs-no-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/viewport-vs-write-gs-no-write-simple.shader_test new file mode 100644 index 0000000..faec9f0 --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/viewport-vs-write-gs-no-write-simple.shader_test @@ -0,0 +1,62 @@ +[require] +GLSL >= 1.50 +GL_ARB_fragment_layer_viewport +GL_AMD_vertex_shader_viewport_index + +[vertex shader] +#version 140 +#extension GL_AMD_vertex_shader_viewport_index: enable +in vec4 piglit_vertex; +uniform int viewport; + +void main() +{ + gl_Position = piglit_vertex; + gl_ViewportIndex = viewport; +} + +[geometry shader] +#version 150 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; + +void main() +{ + for (int i = 0; i < 3; i++) { + gl_Position = gl_in[i].gl_Position; + EmitVertex(); + } +} + +[fragment shader] +#version 150 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int viewport; + +void main() +{ + if (gl_ViewportIndex == 0) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int viewport 0 +draw rect -1 -1 1 1 + +uniform int viewport 1 +draw rect 0 -1 1 1 + +uniform int viewport 14 +draw rect -1 0 1 1 + +uniform int viewport 15 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 diff --git a/tests/spec/arb_fragment_layer_viewport/viewport-vs-write-simple.shader_test b/tests/spec/arb_fragment_layer_viewport/viewport-vs-write-simple.shader_test new file mode 100644 index 0000000..d0a3c7c --- /dev/null +++ b/tests/spec/arb_fragment_layer_viewport/viewport-vs-write-simple.shader_test @@ -0,0 +1,48 @@ +[require] +GLSL >= 1.40 +GL_ARB_fragment_layer_viewport +GL_AMD_vertex_shader_viewport_index + +[vertex shader] +#version 140 +#extension GL_AMD_vertex_shader_viewport_index: enable +in vec4 piglit_vertex; +uniform int viewport; + +void main() +{ + gl_Position = piglit_vertex; + gl_ViewportIndex = viewport; +} + +[fragment shader] +#version 140 +#extension GL_ARB_fragment_layer_viewport: require + +uniform int viewport; + +void main() +{ + if (gl_ViewportIndex == viewport) + gl_FragColor = vec4(0,1,0,0); + else + gl_FragColor = vec4(1,0,0,0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear + +uniform int viewport 0 +draw rect -1 -1 1 1 + +uniform int viewport 1 +draw rect 0 -1 1 1 + +uniform int viewport 14 +draw rect -1 0 1 1 + +uniform int viewport 15 +draw rect 0 0 1 1 + +probe all rgb 0.0 1.0 0.0 -- 1.8.5.5 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
