Add tests for varying linking by location

In Vulkan varyings are linked by location only, so having name
mismatches or collisions must not affect validity of a pipeline.

Bug: 29056634
Change-Id: I3579b02064c1b5cb9862b48795b16357319ce7af
diff --git a/android/cts/master/com.drawelements.deqp.vk.xml b/android/cts/master/com.drawelements.deqp.vk.xml
index 1a42095..06923c8 100644
--- a/android/cts/master/com.drawelements.deqp.vk.xml
+++ b/android/cts/master/com.drawelements.deqp.vk.xml
@@ -207562,6 +207562,12 @@
 						<Test name="differing_interpolation_2">
 							<TestInstance/>
 						</Test>
+						<Test name="differing_name_1">
+							<TestInstance/>
+						</Test>
+						<Test name="differing_name_2">
+							<TestInstance/>
+						</Test>
 					</TestCase>
 					<TestCase name="basic_types">
 						<Test name="float">
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index df1b257..5a243f7 100644
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
@@ -63849,6 +63849,8 @@
 dEQP-VK.glsl.linkage.varying.rules.differing_precision_2
 dEQP-VK.glsl.linkage.varying.rules.differing_precision_3
 dEQP-VK.glsl.linkage.varying.rules.differing_interpolation_2
+dEQP-VK.glsl.linkage.varying.rules.differing_name_1
+dEQP-VK.glsl.linkage.varying.rules.differing_name_2
 dEQP-VK.glsl.linkage.varying.basic_types.float
 dEQP-VK.glsl.linkage.varying.basic_types.vec2
 dEQP-VK.glsl.linkage.varying.basic_types.vec3
diff --git a/external/vulkancts/data/vulkan/glsl/es310/linkage.test b/external/vulkancts/data/vulkan/glsl/es310/linkage.test
index d463062..d9a2352 100644
--- a/external/vulkancts/data/vulkan/glsl/es310/linkage.test
+++ b/external/vulkancts/data/vulkan/glsl/es310/linkage.test
@@ -294,6 +294,79 @@
 			""
 		end
 
+		# differing name (linking is done by location only in SPIR-V)
+		case differing_name_1
+			version 310 es
+			desc "varying declared with matching location but different name"
+			values
+			{
+				input float in0		= [ 2.0 | 5.0 | -3.0 | 4.0 ];
+				input float in1		= [ 4.0 | 1.0 | -0.5 | 2.0 ];
+				output float out0	= [ -2.0 | 4.0 | -2.5 | 2.0 ];
+			}
+
+			vertex ""
+				#version 310 es
+				${VERTEX_DECLARATIONS}
+				layout(location = 0) out highp float vtxVarB;
+				layout(location = 2) out highp float vtxVarA;
+				void main()
+				{
+					vtxVarA = in0;
+					vtxVarB = in1;
+					${VERTEX_OUTPUT}
+				}
+			""
+			fragment ""
+				#version 310 es
+				precision mediump float;
+				${FRAGMENT_DECLARATIONS}
+				layout(location = 2) in highp float fragVarA;
+				layout(location = 0) in highp float fragVarB;
+				void main()
+				{
+					out0 = fragVarA - fragVarB;
+					${FRAGMENT_OUTPUT}
+				}
+			""
+		end
+
+		# differing name (linking is done by location only in SPIR-V)
+		case differing_name_2
+			version 310 es
+			desc "varying declared with matching location but different name"
+			values
+			{
+				input float in0		= [ 2.0 | 5.0 | -3.0 | 4.0 ];
+				input float in1		= [ 4.0 | 1.0 | -0.5 | 2.0 ];
+				output float out0	= [ -2.0 | 4.0 | -2.5 | 2.0 ];
+			}
+
+			vertex ""
+				#version 310 es
+				${VERTEX_DECLARATIONS}
+				layout(location = 0) out highp float varA;
+				layout(location = 2) out highp float varB;
+				void main()
+				{
+					varA = in0;
+					varB = in1;
+					${VERTEX_OUTPUT}
+				}
+			""
+			fragment ""
+				#version 310 es
+				precision mediump float;
+				${FRAGMENT_DECLARATIONS}
+				layout(location = 2) in highp float varA;
+				layout(location = 0) in highp float varB;
+				void main()
+				{
+					out0 = varB - varA;
+					${FRAGMENT_OUTPUT}
+				}
+			""
+		end
 	end
 
 	group basic_types "Basic varying types"