--- .../block-member-location-overlap-aoa.shader_test | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tests/spec/arb_enhanced_layouts/linker/block-member-locations/block-member-location-overlap-aoa.shader_test
diff --git a/tests/spec/arb_enhanced_layouts/linker/block-member-locations/block-member-location-overlap-aoa.shader_test b/tests/spec/arb_enhanced_layouts/linker/block-member-locations/block-member-location-overlap-aoa.shader_test new file mode 100644 index 0000000..42526ab --- /dev/null +++ b/tests/spec/arb_enhanced_layouts/linker/block-member-locations/block-member-location-overlap-aoa.shader_test @@ -0,0 +1,62 @@ +// From Section 4.4.1 (Input Layout Qualifiers) of the GLSL 4.50 spec: +// +// "Location aliasing is causing two variables or block members to have the +// same location number. Component aliasing is assigning the same (or +// overlapping) component numbers for two location aliases. (Recall if +// component is not used, components are assigned starting with 0.) With +// one exception, location aliasing is allowed only if it does not cause +// component aliasing; it is a compile-time or link-time error to cause +// component aliasing. Further, when location aliasing, the aliases +// sharing the location must have the same underlying numerical type +// (floating-point or integer) and the same auxiliary storage and +// interpolation qualification." + +[require] +GLSL >= 1.50 +GL_ARB_arrays_of_arrays +GL_ARB_enhanced_layouts +GL_ARB_separate_shader_objects + +[vertex shader] +#version 150 +#extension GL_ARB_arrays_of_arrays: require +#extension GL_ARB_enhanced_layouts: require +#extension GL_ARB_separate_shader_objects: require + +layout(location = 0) out block { + vec4 a; + layout(location = 1) float f1[2][2]; + layout(location = 4) float f2; // ERROR: Location 4 used by f1[1][1] +}; + +void main() +{ + a = vec4(1.0); + f1[0][0] = 0.0; + f1[0][1] = 0.25; + f1[1][0] = 0.5; + f1[1][1] = 0.75; + f2 = 1.0; +} + +[fragment shader] +#version 150 +#extension GL_ARB_arrays_of_arrays: require +#extension GL_ARB_enhanced_layouts: require +#extension GL_ARB_separate_shader_objects: require + +layout(location = 0) in block { + vec4 a; + layout(location = 1) float f1[2][2]; + layout(location = 4) float f2; // ERROR: Location 4 used by f1[1][1] +}; + +out vec4 color; + +void main() +{ + color = vec4(f1[0][0] + a.x, f1[1][1] + a.y, f2 + a.z, a.w); +} + +[test] +link error -- 2.4.3 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit