Test results: Nvidia GeForce 840M - NVIDIA 352.41 layout-location-block-with-aoa-member.shader_test - pass layout-location-block-with-single-line-declaration-members.shader_test - fail layout-location-block-with-struct-member.shader_test - pass
Mesa (master) layout-location-block-with-aoa-member.shader_test - fail layout-location-block-with-single-line-declaration-members.shader_test - pass layout-location-block-with-struct-member.shader_test - fail --- ...yout-location-block-with-aoa-member.shader_test | 80 ++++++++++++++++++++++ ...ith-single-line-declaration-members.shader_test | 76 ++++++++++++++++++++ ...t-location-block-with-struct-member.shader_test | 76 ++++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test create mode 100644 tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test create mode 100644 tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test diff --git a/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test new file mode 100644 index 0000000..d32a5b5 --- /dev/null +++ b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-aoa-member.shader_test @@ -0,0 +1,80 @@ +// Test that inputs and outputs are not assigned overlapping locations when +// using interface blocks and explicit locations. + +[require] +GLSL >= 1.50 +GL_ARB_separate_shader_objects +GL_ARB_arrays_of_arrays + +[vertex shader] +#version 150 +#extension GL_ARB_arrays_of_arrays: require +#extension GL_ARB_separate_shader_objects: require + +in vec4 piglit_vertex; + +layout(location = 0) out block { + vec4 a[2][2]; + vec4 b; +}; + +void main() +{ + a[0][0] = vec4(1.0, 0.0, 0.0, 1.0); + a[0][1] = vec4(0.0, 1.0, 0.0, 1.0); + a[1][0] = vec4(0.0, 0.0, 1.0, 1.0); + a[1][1] = vec4(1.0, 0.0, 1.0, 1.0); + b = vec4(1.0, 1.0, 1.0, 1.0); + + gl_Position = piglit_vertex; +} + +[fragment shader] +#version 150 +#extension GL_ARB_arrays_of_arrays: require +#extension GL_ARB_separate_shader_objects: require + +layout(location = 0) in block { + vec4 a[2][2]; + vec4 b; +}; + +uniform int i; + +out vec4 color; + +void main() +{ + if (i < 4) + color = a[i/2][int(mod(i, 2))]; + else + color = b; +} + +[test] +uniform int i 0 +draw rect 0 -1 1 1 + +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0) + +uniform int i 1 +draw rect -1 0 1 1 + +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 1.0, 0.0) + +uniform int i 2 +draw rect 0 0 1 1 + +relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0) + +uniform int i 3 +draw rect -1 -0.5 1 0.5 + +# shader runner has a window size of 250 * 250 so we need to tweak our +# probe values to work around this. +relative probe rect rgb (0.0, 0.3, 0.5, 0.20) (1.0, 0.0, 1.0) + +uniform int i 4 +draw rect -1 -1 1 0.5 + +relative probe rect rgb (0.0, 0.0, 0.5, 0.25) (1.0, 1.0, 1.0) diff --git a/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test new file mode 100644 index 0000000..bb7714c --- /dev/null +++ b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-single-line-declaration-members.shader_test @@ -0,0 +1,76 @@ +// Test that inputs and outputs are not assigned overlapping locations when +// using interface blocks and explicit locations. + +[require] +GLSL >= 1.50 +GL_ARB_separate_shader_objects +GL_ARB_arrays_of_arrays + +[vertex shader] +#version 150 +#extension GL_ARB_arrays_of_arrays: require +#extension GL_ARB_separate_shader_objects: require + +in vec4 piglit_vertex; + +layout(location = 0) out block { + vec4 a, b, c; + vec4 d; +}; + +void main() +{ + a = vec4(1.0, 0.0, 0.0, 1.0); + b = vec4(0.0, 1.0, 0.0, 1.0); + c = vec4(0.0, 0.0, 1.0, 1.0); + d = vec4(1.0, 1.0, 1.0, 1.0); + + gl_Position = piglit_vertex; +} + +[fragment shader] +#version 150 +#extension GL_ARB_arrays_of_arrays: require +#extension GL_ARB_separate_shader_objects: require + +layout(location = 0) in block { + vec4 a, b, c; + vec4 d; +}; + +uniform int i; + +out vec4 color; + +void main() +{ + if (i == 0) + color = a; + else if (i == 1) + color = b; + else if (i == 2) + color = c; + else if (i == 3) + color = d; +} + +[test] +uniform int i 0 +draw rect 0 -1 1 1 + +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0) + +uniform int i 1 +draw rect -1 0 1 1 + +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 1.0, 0.0) + +uniform int i 2 +draw rect 0 0 1 1 + +relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0) + +uniform int i 3 +draw rect -1 -1 1 1 + +relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 1.0, 1.0) diff --git a/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test new file mode 100644 index 0000000..2346a88 --- /dev/null +++ b/tests/spec/arb_separate_shader_objects/execution/layout-location-block-with-struct-member.shader_test @@ -0,0 +1,76 @@ +// Test that inputs and outputs are not assigned overlapping locations when +// using interface blocks and explicit locations. + +[require] +GLSL >= 1.50 +GL_ARB_separate_shader_objects + +[vertex shader] +#version 150 +#extension GL_ARB_separate_shader_objects: require + +in vec4 piglit_vertex; + +struct S { + vec4 a; + vec4 b; +}; + +layout(location = 0) out block { + S s; + vec4 c; +}; + +void main() +{ + s.a = vec4(1.0, 0.0, 0.0, 1.0); + s.b = vec4(0.0, 1.0, 0.0, 1.0); + c = vec4(1.0, 1.0, 1.0, 1.0); + + gl_Position = piglit_vertex; +} + +[fragment shader] +#version 150 +#extension GL_ARB_separate_shader_objects: require + +struct S { + vec4 a; + vec4 b; +}; + +layout(location = 0) in block { + S s; + vec4 c; +}; + +uniform int i; + +out vec4 color; + +void main() +{ + if (i == 0) + color = s.a; + else if (i == 1) + color = s.b; + else + color = c; +} + +[test] +uniform int i 0 +draw rect 0 -1 1 1 + +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0) + +uniform int i 1 +draw rect -1 0 1 1 + +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 1.0, 0.0) + +uniform int i 2 +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.4.3 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit