On Fri, 2019-02-01 at 19:55 +0200, Andres Gomez wrote: > New tests for component aliasing with duplicated inputs which match > the same output variable in the previous stage. > > From Section 4.4.1 (Input Layout Qualifiers) of the GLSL 4.60 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." > > From Section 7.4.1 (Shader Interface Matching) of the OpenGL 4.60 spec: > > " * An output variable is considered to match an input variable in > the subsequent shader if: > > – the two variables match in name, type, and qualification, > and neither has a location qualifier, or > > – the two variables are declared with the same location and > component layout qualifiers and match in type and > qualification." > > Cc: Timothy Arceri <tarc...@itsqueeze.com> > Cc: Iago Toral Quiroga <ito...@igalia.com> > Cc: Ilia Mirkin <imir...@alum.mit.edu> > Signed-off-by: Andres Gomez <ago...@igalia.com>
Reviewed-by: Juan A. Suarez <jasua...@igalia.com> > --- > ...uplicated-input-overlap-double.shader_test | 62 +++++++++++++++++++ > ...to-fs-duplicated-input-overlap.shader_test | 59 ++++++++++++++++++ > 2 files changed, 121 insertions(+) > create mode 100644 > tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap-double.shader_test > create mode 100644 > tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap.shader_test > > diff --git > a/tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap-double.shader_test > > b/tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap-double.shader_test > new file mode 100644 > index 000000000..1c9117b9b > --- /dev/null > +++ > b/tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap-double.shader_test > @@ -0,0 +1,62 @@ > +// From Section 4.4.1 (Input Layout Qualifiers) of the GLSL 4.60 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." > +// > +// From Section 7.4.1 (Shader Interface Matching) of the OpenGL 4.60 spec: > +// > +// " * An output variable is considered to match an input variable > +// in the subsequent shader if: > +// > +// – the two variables match in name, type, and qualification, > +// and neither has a location qualifier, or > +// > +// – the two variables are declared with the same location and > +// component layout qualifiers and match in type and > +// qualification." > + > +[require] > +GLSL >= 1.50 > +GL_ARB_enhanced_layouts > +GL_ARB_gpu_shader_fp64 > +GL_ARB_separate_shader_objects > + > +[vertex shader] > +#version 150 > +#extension GL_ARB_enhanced_layouts: require > +#extension GL_ARB_gpu_shader_fp64: require > +#extension GL_ARB_separate_shader_objects: require > + > +// consumes Z/W components > +layout(location = 0, component = 2) flat out double a; > + > +void main() > +{ > + a = 1.0; > +} > + > +[fragment shader] > +#version 150 > +#extension GL_ARB_enhanced_layouts: require > +#extension GL_ARB_gpu_shader_fp64: require > +#extension GL_ARB_separate_shader_objects: require > + > +out vec4 color; > + > +// consumes Z/W components > +layout(location = 0, component = 2) flat in double b; > +layout(location = 0, component = 2) flat in double c; > + > +void main() > +{ > + color = vec4(c, b, 0.0, 1.0); > +} > + > +[test] > +link error > diff --git > a/tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap.shader_test > > b/tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap.shader_test > new file mode 100644 > index 000000000..3dea88a51 > --- /dev/null > +++ > b/tests/spec/arb_enhanced_layouts/linker/component-layout/vs-to-fs-duplicated-input-overlap.shader_test > @@ -0,0 +1,59 @@ > +// From Section 4.4.1 (Input Layout Qualifiers) of the GLSL 4.60 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." > +// > +// From Section 7.4.1 (Shader Interface Matching) of the OpenGL 4.60 spec: > +// > +// " * An output variable is considered to match an input variable > +// in the subsequent shader if: > +// > +// – the two variables match in name, type, and qualification, > +// and neither has a location qualifier, or > +// > +// – the two variables are declared with the same location and > +// component layout qualifiers and match in type and > +// qualification." > + > +[require] > +GLSL >= 1.40 > +GL_ARB_enhanced_layouts > +GL_ARB_separate_shader_objects > + > +[vertex shader] > +#version 140 > +#extension GL_ARB_enhanced_layouts: require > +#extension GL_ARB_separate_shader_objects: require > + > +// consume Y/Z/W components > +layout(location = 0, component = 1) out vec3 a; > + > +void main() > +{ > + a = vec3(1.0); > +} > + > +[fragment shader] > +#version 140 > +#extension GL_ARB_enhanced_layouts: require > +#extension GL_ARB_separate_shader_objects: require > + > +out vec4 color; > + > +// consume Y/Z/W components > +layout(location = 0, component = 1) in vec3 b; > +layout(location = 0, component = 1) in vec3 c; > + > +void main() > +{ > + color = vec4(c.x, b); > +} > + > +[test] > +link error _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit