[test][tint] Move dual source blending tests to extensions dir

And add another test for inputs / output

Bug: tint:2099
Change-Id: I60e84c92a1926eec64e3dde8c942ebb91f65480a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/160841
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl b/test/tint/extensions/dual_source_blending/input_output.wgsl
new file mode 100644
index 0000000..a498932
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl
@@ -0,0 +1,19 @@
+enable chromium_internal_dual_source_blending;
+
+struct FragInput {
+  @location(0) a : vec4<f32>,
+  @location(1) b : vec4<f32>,
+};
+
+struct FragOutput {
+  @location(0) @index(0) color : vec4<f32>,
+  @location(0) @index(1) blend : vec4<f32>,
+};
+
+@fragment
+fn frag_main(in : FragInput) -> FragOutput {
+  var output : FragOutput;
+  output.color = in.a;
+  output.blend = in.b;
+  return output;
+}
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.dxc.hlsl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..027baf9
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.dxc.hlsl
@@ -0,0 +1,32 @@
+struct FragInput {
+  float4 a;
+  float4 b;
+};
+struct FragOutput {
+  float4 color;
+  float4 blend;
+};
+struct tint_symbol_2 {
+  float4 a : TEXCOORD0;
+  float4 b : TEXCOORD1;
+};
+struct tint_symbol_3 {
+  float4 color : SV_Target0;
+  float4 blend : SV_Target1;
+};
+
+FragOutput frag_main_inner(FragInput tint_symbol) {
+  FragOutput output = (FragOutput)0;
+  output.color = tint_symbol.a;
+  output.blend = tint_symbol.b;
+  return output;
+}
+
+tint_symbol_3 frag_main(tint_symbol_2 tint_symbol_1) {
+  const FragInput tint_symbol_4 = {tint_symbol_1.a, tint_symbol_1.b};
+  const FragOutput inner_result = frag_main_inner(tint_symbol_4);
+  tint_symbol_3 wrapper_result = (tint_symbol_3)0;
+  wrapper_result.color = inner_result.color;
+  wrapper_result.blend = inner_result.blend;
+  return wrapper_result;
+}
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.fxc.hlsl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..027baf9
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.fxc.hlsl
@@ -0,0 +1,32 @@
+struct FragInput {
+  float4 a;
+  float4 b;
+};
+struct FragOutput {
+  float4 color;
+  float4 blend;
+};
+struct tint_symbol_2 {
+  float4 a : TEXCOORD0;
+  float4 b : TEXCOORD1;
+};
+struct tint_symbol_3 {
+  float4 color : SV_Target0;
+  float4 blend : SV_Target1;
+};
+
+FragOutput frag_main_inner(FragInput tint_symbol) {
+  FragOutput output = (FragOutput)0;
+  output.color = tint_symbol.a;
+  output.blend = tint_symbol.b;
+  return output;
+}
+
+tint_symbol_3 frag_main(tint_symbol_2 tint_symbol_1) {
+  const FragInput tint_symbol_4 = {tint_symbol_1.a, tint_symbol_1.b};
+  const FragOutput inner_result = frag_main_inner(tint_symbol_4);
+  tint_symbol_3 wrapper_result = (tint_symbol_3)0;
+  wrapper_result.color = inner_result.color;
+  wrapper_result.blend = inner_result.blend;
+  return wrapper_result;
+}
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.glsl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.glsl
new file mode 100644
index 0000000..8965ba2
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.glsl
@@ -0,0 +1,32 @@
+#version 310 es
+#extension GL_EXT_blend_func_extended : require
+precision highp float;
+
+layout(location = 0) in vec4 a_1;
+layout(location = 1) in vec4 b_1;
+layout(location = 0, index = 0) out vec4 color_1;
+layout(location = 0, index = 1) out vec4 blend_1;
+struct FragInput {
+  vec4 a;
+  vec4 b;
+};
+
+struct FragOutput {
+  vec4 color;
+  vec4 blend;
+};
+
+FragOutput frag_main(FragInput tint_symbol) {
+  FragOutput tint_symbol_1 = FragOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  tint_symbol_1.color = tint_symbol.a;
+  tint_symbol_1.blend = tint_symbol.b;
+  return tint_symbol_1;
+}
+
+void main() {
+  FragInput tint_symbol_2 = FragInput(a_1, b_1);
+  FragOutput inner_result = frag_main(tint_symbol_2);
+  color_1 = inner_result.color;
+  blend_1 = inner_result.blend;
+  return;
+}
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl
new file mode 100644
index 0000000..09c726a
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl
@@ -0,0 +1,39 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct FragInput {
+  float4 a;
+  float4 b;
+};
+
+struct FragOutput {
+  float4 color;
+  float4 blend;
+};
+
+struct tint_symbol_1 {
+  float4 a [[user(locn0)]];
+  float4 b [[user(locn1)]];
+};
+
+struct tint_symbol_2 {
+  float4 color [[color(0) index(0)]];
+  float4 blend [[color(0) index(1)]];
+};
+
+FragOutput frag_main_inner(FragInput in) {
+  FragOutput output = {};
+  output.color = in.a;
+  output.blend = in.b;
+  return output;
+}
+
+fragment tint_symbol_2 frag_main(tint_symbol_1 tint_symbol [[stage_in]]) {
+  FragInput const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b};
+  FragOutput const inner_result = frag_main_inner(tint_symbol_3);
+  tint_symbol_2 wrapper_result = {};
+  wrapper_result.color = inner_result.color;
+  wrapper_result.blend = inner_result.blend;
+  return wrapper_result;
+}
+
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.spvasm b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.spvasm
new file mode 100644
index 0000000..78a42ca
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.spvasm
@@ -0,0 +1,78 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %frag_main "frag_main" %a_1 %b_1 %color_1 %blend_1
+               OpExecutionMode %frag_main OriginUpperLeft
+               OpName %a_1 "a_1"
+               OpName %b_1 "b_1"
+               OpName %color_1 "color_1"
+               OpName %blend_1 "blend_1"
+               OpName %FragOutput "FragOutput"
+               OpMemberName %FragOutput 0 "color"
+               OpMemberName %FragOutput 1 "blend"
+               OpName %FragInput "FragInput"
+               OpMemberName %FragInput 0 "a"
+               OpMemberName %FragInput 1 "b"
+               OpName %frag_main_inner "frag_main_inner"
+               OpName %in "in"
+               OpName %output "output"
+               OpName %frag_main "frag_main"
+               OpDecorate %a_1 Location 0
+               OpDecorate %b_1 Location 1
+               OpDecorate %color_1 Location 0
+               OpDecorate %color_1 Index 0
+               OpDecorate %blend_1 Location 0
+               OpDecorate %blend_1 Index 1
+               OpMemberDecorate %FragOutput 0 Offset 0
+               OpMemberDecorate %FragOutput 1 Offset 16
+               OpMemberDecorate %FragInput 0 Offset 0
+               OpMemberDecorate %FragInput 1 Offset 16
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+        %a_1 = OpVariable %_ptr_Input_v4float Input
+        %b_1 = OpVariable %_ptr_Input_v4float Input
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %8 = OpConstantNull %v4float
+    %color_1 = OpVariable %_ptr_Output_v4float Output %8
+    %blend_1 = OpVariable %_ptr_Output_v4float Output %8
+ %FragOutput = OpTypeStruct %v4float %v4float
+  %FragInput = OpTypeStruct %v4float %v4float
+         %10 = OpTypeFunction %FragOutput %FragInput
+%_ptr_Function_FragOutput = OpTypePointer Function %FragOutput
+         %18 = OpConstantNull %FragOutput
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_1 = OpConstant %uint 1
+       %void = OpTypeVoid
+         %28 = OpTypeFunction %void
+%frag_main_inner = OpFunction %FragOutput None %10
+         %in = OpFunctionParameter %FragInput
+         %15 = OpLabel
+     %output = OpVariable %_ptr_Function_FragOutput Function %18
+         %22 = OpAccessChain %_ptr_Function_v4float %output %uint_0
+         %23 = OpCompositeExtract %v4float %in 0
+               OpStore %22 %23
+         %25 = OpAccessChain %_ptr_Function_v4float %output %uint_1
+         %26 = OpCompositeExtract %v4float %in 1
+               OpStore %25 %26
+         %27 = OpLoad %FragOutput %output
+               OpReturnValue %27
+               OpFunctionEnd
+  %frag_main = OpFunction %void None %28
+         %31 = OpLabel
+         %33 = OpLoad %v4float %a_1
+         %34 = OpLoad %v4float %b_1
+         %35 = OpCompositeConstruct %FragInput %33 %34
+         %32 = OpFunctionCall %FragOutput %frag_main_inner %35
+         %36 = OpCompositeExtract %v4float %32 0
+               OpStore %color_1 %36
+         %37 = OpCompositeExtract %v4float %32 1
+               OpStore %blend_1 %37
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.wgsl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.wgsl
new file mode 100644
index 0000000..d1e52a8
--- /dev/null
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.wgsl
@@ -0,0 +1,23 @@
+enable chromium_internal_dual_source_blending;
+
+struct FragInput {
+  @location(0)
+  a : vec4<f32>,
+  @location(1)
+  b : vec4<f32>,
+}
+
+struct FragOutput {
+  @location(0) @index(0)
+  color : vec4<f32>,
+  @location(0) @index(1)
+  blend : vec4<f32>,
+}
+
+@fragment
+fn frag_main(in : FragInput) -> FragOutput {
+  var output : FragOutput;
+  output.color = in.a;
+  output.blend = in.b;
+  return output;
+}
diff --git a/test/tint/shader_io/fragment_output_index.wgsl b/test/tint/extensions/dual_source_blending/output.wgsl
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl
rename to test/tint/extensions/dual_source_blending/output.wgsl
diff --git a/test/tint/shader_io/fragment_output_index.wgsl.expected.dxc.hlsl b/test/tint/extensions/dual_source_blending/output.wgsl.expected.dxc.hlsl
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl.expected.dxc.hlsl
rename to test/tint/extensions/dual_source_blending/output.wgsl.expected.dxc.hlsl
diff --git a/test/tint/shader_io/fragment_output_index.wgsl.expected.fxc.hlsl b/test/tint/extensions/dual_source_blending/output.wgsl.expected.fxc.hlsl
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl.expected.fxc.hlsl
rename to test/tint/extensions/dual_source_blending/output.wgsl.expected.fxc.hlsl
diff --git a/test/tint/shader_io/fragment_output_index.wgsl.expected.glsl b/test/tint/extensions/dual_source_blending/output.wgsl.expected.glsl
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl.expected.glsl
rename to test/tint/extensions/dual_source_blending/output.wgsl.expected.glsl
diff --git a/test/tint/shader_io/fragment_output_index.wgsl.expected.msl b/test/tint/extensions/dual_source_blending/output.wgsl.expected.msl
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl.expected.msl
rename to test/tint/extensions/dual_source_blending/output.wgsl.expected.msl
diff --git a/test/tint/shader_io/fragment_output_index.wgsl.expected.spvasm b/test/tint/extensions/dual_source_blending/output.wgsl.expected.spvasm
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl.expected.spvasm
rename to test/tint/extensions/dual_source_blending/output.wgsl.expected.spvasm
diff --git a/test/tint/shader_io/fragment_output_index.wgsl.expected.wgsl b/test/tint/extensions/dual_source_blending/output.wgsl.expected.wgsl
similarity index 100%
rename from test/tint/shader_io/fragment_output_index.wgsl.expected.wgsl
rename to test/tint/extensions/dual_source_blending/output.wgsl.expected.wgsl