Test multiple fragment output locations
authorAri Suonpaa <ari.suonpaa@siru.fi>
Tue, 12 May 2020 06:53:41 +0000 (09:53 +0300)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 4 Jun 2020 18:25:49 +0000 (14:25 -0400)
Added tests that write to multiple fragment output
locations. One test group uses an output array and
another shuffles the writes based on fragment
coordinates.

VK-GL-CTS Issue: 2179

New tests:

dEQP-VK.draw.output_location.*

Components: Vulkan
Change-Id: If3a5d49dd171874b6451581616ca67141124a283

52 files changed:
AndroidGen.mk
android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp-output-float.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp-output-float.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump-output-float.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp-output-vec3.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp-output-vec3.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump-output-vec3.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-highp-output-float.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-highp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-lowp-output-float.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-lowp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-mediump-output-float.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-mediump.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-highp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-lowp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-mediump.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp-output-vec3.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp-output-vec3.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump-output-vec2.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump-output-vec3.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-highp-output-uint.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-highp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-lowp-output-uint.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-lowp.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-mediump-output-uint.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-mediump.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/shuffle/inputs-outputs-mod.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/draw/output_location/shuffle/inputs-outputs.amber [new file with mode: 0644]
external/vulkancts/modules/vulkan/draw/CMakeLists.txt
external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/draw/vktDrawTests.cpp
external/vulkancts/mustpass/master/vk-default.txt

index d1f1a10..3cb30fe 100644 (file)
@@ -130,6 +130,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/draw/vktDrawInvertedDepthRangesTests.cpp \
        external/vulkancts/modules/vulkan/draw/vktDrawMultipleInterpolationTests.cpp \
        external/vulkancts/modules/vulkan/draw/vktDrawNegativeViewportHeightTests.cpp \
+       external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.cpp \
        external/vulkancts/modules/vulkan/draw/vktDrawScissorTests.cpp \
        external/vulkancts/modules/vulkan/draw/vktDrawShaderDrawParametersTests.cpp \
        external/vulkancts/modules/vulkan/draw/vktDrawShaderLayerTests.cpp \
index 97cfc64..68f6127 100644 (file)
@@ -145717,6 +145717,50 @@ dEQP-VK.draw.explicit_vertex_parameter.smooth_sample_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.noperspective_sample_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.smooth_centroid_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.noperspective_centroid_samples_64
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp-output-vec2
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp-output-vec2
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp-output-vec3
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp-output-vec3
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump-output-vec3
+dEQP-VK.draw.output_location.array.r16g16-sfloat-highp
+dEQP-VK.draw.output_location.array.r16g16-sfloat-highp-output-float
+dEQP-VK.draw.output_location.array.r16g16-sfloat-lowp
+dEQP-VK.draw.output_location.array.r16g16-sfloat-lowp-output-float
+dEQP-VK.draw.output_location.array.r16g16-sfloat-mediump
+dEQP-VK.draw.output_location.array.r16g16-sfloat-mediump-output-float
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp-output-vec3
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp-output-vec3
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump-output-vec3
+dEQP-VK.draw.output_location.array.r32-sfloat-highp
+dEQP-VK.draw.output_location.array.r32-sfloat-lowp
+dEQP-VK.draw.output_location.array.r32-sfloat-mediump
+dEQP-VK.draw.output_location.array.r8g8-uint-highp
+dEQP-VK.draw.output_location.array.r8g8-uint-highp-output-uint
+dEQP-VK.draw.output_location.array.r8g8-uint-lowp
+dEQP-VK.draw.output_location.array.r8g8-uint-lowp-output-uint
+dEQP-VK.draw.output_location.array.r8g8-uint-mediump
+dEQP-VK.draw.output_location.array.r8g8-uint-mediump-output-uint
+dEQP-VK.draw.output_location.shuffle.inputs-outputs
+dEQP-VK.draw.output_location.shuffle.inputs-outputs-mod
 dEQP-VK.compute.basic.concurrent_compute
 dEQP-VK.compute.cooperative_matrix.length.float32_float32.buffer.rowmajor
 dEQP-VK.compute.cooperative_matrix.length.float32_float32.buffer.colmajor
index d383ebb..7654a63 100644 (file)
@@ -448434,6 +448434,50 @@ dEQP-VK.draw.explicit_vertex_parameter.smooth_sample_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.noperspective_sample_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.smooth_centroid_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.noperspective_centroid_samples_64
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp-output-vec2
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp-output-vec2
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp-output-vec3
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp-output-vec3
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump-output-vec3
+dEQP-VK.draw.output_location.array.r16g16-sfloat-highp
+dEQP-VK.draw.output_location.array.r16g16-sfloat-highp-output-float
+dEQP-VK.draw.output_location.array.r16g16-sfloat-lowp
+dEQP-VK.draw.output_location.array.r16g16-sfloat-lowp-output-float
+dEQP-VK.draw.output_location.array.r16g16-sfloat-mediump
+dEQP-VK.draw.output_location.array.r16g16-sfloat-mediump-output-float
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp-output-vec3
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp-output-vec3
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump-output-vec3
+dEQP-VK.draw.output_location.array.r32-sfloat-highp
+dEQP-VK.draw.output_location.array.r32-sfloat-lowp
+dEQP-VK.draw.output_location.array.r32-sfloat-mediump
+dEQP-VK.draw.output_location.array.r8g8-uint-highp
+dEQP-VK.draw.output_location.array.r8g8-uint-highp-output-uint
+dEQP-VK.draw.output_location.array.r8g8-uint-lowp
+dEQP-VK.draw.output_location.array.r8g8-uint-lowp-output-uint
+dEQP-VK.draw.output_location.array.r8g8-uint-mediump
+dEQP-VK.draw.output_location.array.r8g8-uint-mediump-output-uint
+dEQP-VK.draw.output_location.shuffle.inputs-outputs
+dEQP-VK.draw.output_location.shuffle.inputs-outputs-mod
 dEQP-VK.compute.basic.empty_shader
 dEQP-VK.compute.basic.concurrent_compute
 dEQP-VK.compute.basic.ubo_to_ssbo_single_invocation
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp-output-float.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp-output-float.amber
new file mode 100644 (file)
index 0000000..aae7452
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out highp float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out highp float frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp-output-vec2.amber
new file mode 100644 (file)
index 0000000..e70eb2b
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out highp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out highp vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-highp.amber
new file mode 100644 (file)
index 0000000..fbcd9f5
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out highp vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out highp vec3 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp-output-float.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp-output-float.amber
new file mode 100644 (file)
index 0000000..bd0d5ce
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out lowp float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out lowp float frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp-output-vec2.amber
new file mode 100644 (file)
index 0000000..ff63314
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out lowp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out lowp vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-lowp.amber
new file mode 100644 (file)
index 0000000..9b02cb9
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out lowp vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out lowp vec3 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump-output-float.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump-output-float.amber
new file mode 100644 (file)
index 0000000..62c1559
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out mediump float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out mediump float frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump-output-vec2.amber
new file mode 100644 (file)
index 0000000..f45a265
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out mediump vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out mediump vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b10g11r11-ufloat-pack32-mediump.amber
new file mode 100644 (file)
index 0000000..6625674
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in[3];
+layout(location = 0) smooth out vec3 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in[3];
+layout(location = 0) out mediump vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out mediump vec3 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER ref0 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp-output-vec2.amber
new file mode 100644 (file)
index 0000000..c58c617
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out highp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp-output-vec3.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp-output-vec3.amber
new file mode 100644 (file)
index 0000000..d0b5d13
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out highp vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xyz;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec3 frag_out;
+void main()
+{
+    frag_out = color_in.xyz;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-highp.amber
new file mode 100644 (file)
index 0000000..429f3ad
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out highp vec4 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp-output-vec2.amber
new file mode 100644 (file)
index 0000000..97e38af
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out lowp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out lowp vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp-output-vec3.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp-output-vec3.amber
new file mode 100644 (file)
index 0000000..d513377
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out lowp vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xyz;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out lowp vec3 frag_out;
+void main()
+{
+    frag_out = color_in.xyz;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-lowp.amber
new file mode 100644 (file)
index 0000000..909a486
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out lowp vec4 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out lowp vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump-output-vec2.amber
new file mode 100644 (file)
index 0000000..6818bd4
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out mediump vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out mediump vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump-output-vec3.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump-output-vec3.amber
new file mode 100644 (file)
index 0000000..5a0858f
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out mediump vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xyz;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out mediump vec3 frag_out;
+void main()
+{
+    frag_out = color_in.xyz;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/b8g8r8a8-unorm-mediump.amber
new file mode 100644 (file)
index 0000000..ee040c1
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out mediump vec4 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out mediump vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE B8G8R8A8_UNORM DATA
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+END
+
+BUFFER color2 DATA_TYPE B8G8R8A8_UNORM DATA
+  0   0 255 255
+255 255   0 255
+255   0   0 255
+  0 255   0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-highp-output-float.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-highp-output-float.amber
new file mode 100644 (file)
index 0000000..9bf2fbd
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in[3];
+layout(location = 0) smooth out vec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in[3];
+layout(location = 0) out highp float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in;
+layout(location = 0) smooth out vec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in;
+layout(location = 0) out highp float frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16G16_SFLOAT
+BUFFER framebuffer1 FORMAT R16G16_SFLOAT
+BUFFER framebuffer2 FORMAT R16G16_SFLOAT
+
+BUFFER ref0 FORMAT R16G16_SFLOAT
+BUFFER ref1 FORMAT R16G16_SFLOAT
+BUFFER ref2 FORMAT R16G16_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
+1.0 0.0
+0.0 1.0
+0.0 0.0
+1.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R16G16_SFLOAT DATA
+0.0 1.0
+0.0 0.0
+1.0 1.0
+1.0 0.0
+END
+
+BUFFER color2 DATA_TYPE R16G16_SFLOAT DATA
+0.0 0.0
+1.0 1.0
+1.0 0.0
+0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-highp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-highp.amber
new file mode 100644 (file)
index 0000000..f83c249
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in[3];
+layout(location = 0) smooth out vec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in[3];
+layout(location = 0) out highp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in;
+layout(location = 0) smooth out vec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in;
+layout(location = 0) out highp vec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16G16_SFLOAT
+BUFFER framebuffer1 FORMAT R16G16_SFLOAT
+BUFFER framebuffer2 FORMAT R16G16_SFLOAT
+
+BUFFER ref0 FORMAT R16G16_SFLOAT
+BUFFER ref1 FORMAT R16G16_SFLOAT
+BUFFER ref2 FORMAT R16G16_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
+1.0 0.0
+0.0 1.0
+0.0 0.0
+1.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R16G16_SFLOAT DATA
+0.0 1.0
+0.0 0.0
+1.0 1.0
+1.0 0.0
+END
+
+BUFFER color2 DATA_TYPE R16G16_SFLOAT DATA
+0.0 0.0
+1.0 1.0
+1.0 0.0
+0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-lowp-output-float.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-lowp-output-float.amber
new file mode 100644 (file)
index 0000000..8bfe403
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in[3];
+layout(location = 0) smooth out vec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in[3];
+layout(location = 0) out lowp float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in;
+layout(location = 0) smooth out vec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in;
+layout(location = 0) out lowp float frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16G16_SFLOAT
+BUFFER framebuffer1 FORMAT R16G16_SFLOAT
+BUFFER framebuffer2 FORMAT R16G16_SFLOAT
+
+BUFFER ref0 FORMAT R16G16_SFLOAT
+BUFFER ref1 FORMAT R16G16_SFLOAT
+BUFFER ref2 FORMAT R16G16_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
+1.0 0.0
+0.0 1.0
+0.0 0.0
+1.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R16G16_SFLOAT DATA
+0.0 1.0
+0.0 0.0
+1.0 1.0
+1.0 0.0
+END
+
+BUFFER color2 DATA_TYPE R16G16_SFLOAT DATA
+0.0 0.0
+1.0 1.0
+1.0 0.0
+0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-lowp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-lowp.amber
new file mode 100644 (file)
index 0000000..91f210e
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in[3];
+layout(location = 0) smooth out vec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in[3];
+layout(location = 0) out lowp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in;
+layout(location = 0) smooth out vec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in;
+layout(location = 0) out lowp vec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16G16_SFLOAT
+BUFFER framebuffer1 FORMAT R16G16_SFLOAT
+BUFFER framebuffer2 FORMAT R16G16_SFLOAT
+
+BUFFER ref0 FORMAT R16G16_SFLOAT
+BUFFER ref1 FORMAT R16G16_SFLOAT
+BUFFER ref2 FORMAT R16G16_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
+1.0 0.0
+0.0 1.0
+0.0 0.0
+1.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R16G16_SFLOAT DATA
+0.0 1.0
+0.0 0.0
+1.0 1.0
+1.0 0.0
+END
+
+BUFFER color2 DATA_TYPE R16G16_SFLOAT DATA
+0.0 0.0
+1.0 1.0
+1.0 0.0
+0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-mediump-output-float.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-mediump-output-float.amber
new file mode 100644 (file)
index 0000000..37b6d42
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in[3];
+layout(location = 0) smooth out vec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in[3];
+layout(location = 0) out mediump float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in;
+layout(location = 0) smooth out vec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in;
+layout(location = 0) out mediump float frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16G16_SFLOAT
+BUFFER framebuffer1 FORMAT R16G16_SFLOAT
+BUFFER framebuffer2 FORMAT R16G16_SFLOAT
+
+BUFFER ref0 FORMAT R16G16_SFLOAT
+BUFFER ref1 FORMAT R16G16_SFLOAT
+BUFFER ref2 FORMAT R16G16_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
+1.0 0.0
+0.0 1.0
+0.0 0.0
+1.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R16G16_SFLOAT DATA
+0.0 1.0
+0.0 0.0
+1.0 1.0
+1.0 0.0
+END
+
+BUFFER color2 DATA_TYPE R16G16_SFLOAT DATA
+0.0 0.0
+1.0 1.0
+1.0 0.0
+0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-mediump.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r16g16-sfloat-mediump.amber
new file mode 100644 (file)
index 0000000..ab6dd50
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in[3];
+layout(location = 0) smooth out vec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in[3];
+layout(location = 0) out mediump vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 color_in;
+layout(location = 0) smooth out vec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec2 color_in;
+layout(location = 0) out mediump vec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16G16_SFLOAT
+BUFFER framebuffer1 FORMAT R16G16_SFLOAT
+BUFFER framebuffer2 FORMAT R16G16_SFLOAT
+
+BUFFER ref0 FORMAT R16G16_SFLOAT
+BUFFER ref1 FORMAT R16G16_SFLOAT
+BUFFER ref2 FORMAT R16G16_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
+1.0 0.0
+0.0 1.0
+0.0 0.0
+1.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R16G16_SFLOAT DATA
+0.0 1.0
+0.0 0.0
+1.0 1.0
+1.0 0.0
+END
+
+BUFFER color2 DATA_TYPE R16G16_SFLOAT DATA
+0.0 0.0
+1.0 1.0
+1.0 0.0
+0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-highp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-highp.amber
new file mode 100644 (file)
index 0000000..e222881
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in float color_in[3];
+layout(location = 0) smooth out float color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in float color_in[3];
+layout(location = 0) out highp float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in float color_in;
+layout(location = 0) smooth out float color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in float color_in;
+layout(location = 0) out highp float frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32_SFLOAT
+BUFFER framebuffer1 FORMAT R32_SFLOAT
+BUFFER framebuffer2 FORMAT R32_SFLOAT
+
+BUFFER ref0 FORMAT R32_SFLOAT
+BUFFER ref1 FORMAT R32_SFLOAT
+BUFFER ref2 FORMAT R32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32_SFLOAT DATA
+1.0
+0.0
+0.0
+1.0
+END
+
+BUFFER color1 DATA_TYPE R32_SFLOAT DATA
+0.0
+0.0
+1.0
+1.0
+END
+
+BUFFER color2 DATA_TYPE R32_SFLOAT DATA
+0.0
+1.0
+1.0
+0.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-lowp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-lowp.amber
new file mode 100644 (file)
index 0000000..6fb5f17
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in float color_in[3];
+layout(location = 0) smooth out float color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in float color_in[3];
+layout(location = 0) out lowp float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in float color_in;
+layout(location = 0) smooth out float color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in float color_in;
+layout(location = 0) out lowp float frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32_SFLOAT
+BUFFER framebuffer1 FORMAT R32_SFLOAT
+BUFFER framebuffer2 FORMAT R32_SFLOAT
+
+BUFFER ref0 FORMAT R32_SFLOAT
+BUFFER ref1 FORMAT R32_SFLOAT
+BUFFER ref2 FORMAT R32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32_SFLOAT DATA
+1.0
+0.0
+0.0
+1.0
+END
+
+BUFFER color1 DATA_TYPE R32_SFLOAT DATA
+0.0
+0.0
+1.0
+1.0
+END
+
+BUFFER color2 DATA_TYPE R32_SFLOAT DATA
+0.0
+1.0
+1.0
+0.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-mediump.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32-sfloat-mediump.amber
new file mode 100644 (file)
index 0000000..769eade
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in float color_in[3];
+layout(location = 0) smooth out float color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in float color_in[3];
+layout(location = 0) out mediump float frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in float color_in;
+layout(location = 0) smooth out float color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in float color_in;
+layout(location = 0) out mediump float frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32_SFLOAT
+BUFFER framebuffer1 FORMAT R32_SFLOAT
+BUFFER framebuffer2 FORMAT R32_SFLOAT
+
+BUFFER ref0 FORMAT R32_SFLOAT
+BUFFER ref1 FORMAT R32_SFLOAT
+BUFFER ref2 FORMAT R32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32_SFLOAT DATA
+1.0
+0.0
+0.0
+1.0
+END
+
+BUFFER color1 DATA_TYPE R32_SFLOAT DATA
+0.0
+0.0
+1.0
+1.0
+END
+
+BUFFER color2 DATA_TYPE R32_SFLOAT DATA
+0.0
+1.0
+1.0
+0.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp-output-vec2.amber
new file mode 100644 (file)
index 0000000..fbac98a
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out highp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp-output-vec3.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp-output-vec3.amber
new file mode 100644 (file)
index 0000000..e1b0b29
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out highp vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xyz;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec3 frag_out;
+void main()
+{
+    frag_out = color_in.xyz;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-highp.amber
new file mode 100644 (file)
index 0000000..fef288c
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out highp vec4 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp-output-vec2.amber
new file mode 100644 (file)
index 0000000..5bab42a
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out lowp vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out lowp vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp-output-vec3.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp-output-vec3.amber
new file mode 100644 (file)
index 0000000..213ab95
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out lowp vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xyz;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out lowp vec3 frag_out;
+void main()
+{
+    frag_out = color_in.xyz;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-lowp.amber
new file mode 100644 (file)
index 0000000..7abe705
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out lowp vec4 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out lowp vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump-output-vec2.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump-output-vec2.amber
new file mode 100644 (file)
index 0000000..f158f74
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out mediump vec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xy;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out mediump vec2 frag_out;
+void main()
+{
+    frag_out = color_in.xy;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump-output-vec3.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump-output-vec3.amber
new file mode 100644 (file)
index 0000000..eb9c9ca
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out mediump vec3 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].xyz;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out mediump vec3 frag_out;
+void main()
+{
+    frag_out = color_in.xyz;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r32g32b32a32-sfloat-mediump.amber
new file mode 100644 (file)
index 0000000..7185e28
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in[3];
+layout(location = 0) smooth out vec4 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in[3];
+layout(location = 0) out mediump vec4 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out mediump vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
+BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER ref0 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
+BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R32G32B32A32_SFLOAT DATA
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+END
+
+BUFFER color1 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 1.0 0.0 1.0
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+END
+
+BUFFER color2 DATA_TYPE R32G32B32A32_SFLOAT DATA
+0.0 0.0 1.0 1.0
+1.0 1.0 0.0 1.0
+1.0 0.0 0.0 1.0
+0.0 1.0 0.0 1.0
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-highp-output-uint.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-highp-output-uint.amber
new file mode 100644 (file)
index 0000000..395996c
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in[3];
+layout(location = 0) flat out uvec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in[3];
+layout(location = 0) out highp uint frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out highp uint frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT R8G8_UINT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT R8G8_UINT
+
+BUFFER ref0 FORMAT R8G8_UINT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT R8G8_UINT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8_UINT DATA
+255   0
+  0 255
+  0   0
+255 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R8G8_UINT DATA
+  0   0
+255 255
+255   0
+  0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-highp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-highp.amber
new file mode 100644 (file)
index 0000000..b67e53b
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in[3];
+layout(location = 0) flat out uvec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in[3];
+layout(location = 0) out highp uvec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out highp uvec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R8G8_UINT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT R8G8_UINT
+
+BUFFER ref0 FORMAT R8G8_UINT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT R8G8_UINT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8_UINT DATA
+255   0
+  0 255
+  0   0
+255 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R8G8_UINT DATA
+  0   0
+255 255
+255   0
+  0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-lowp-output-uint.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-lowp-output-uint.amber
new file mode 100644 (file)
index 0000000..1b9cf1f
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in[3];
+layout(location = 0) flat out uvec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in[3];
+layout(location = 0) out lowp uint frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out lowp uint frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT R8G8_UINT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT R8G8_UINT
+
+BUFFER ref0 FORMAT R8G8_UINT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT R8G8_UINT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8_UINT DATA
+255   0
+  0 255
+  0   0
+255 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R8G8_UINT DATA
+  0   0
+255 255
+255   0
+  0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-lowp.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-lowp.amber
new file mode 100644 (file)
index 0000000..cd7d8af
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in[3];
+layout(location = 0) flat out uvec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in[3];
+layout(location = 0) out lowp uvec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out lowp uvec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R8G8_UINT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT R8G8_UINT
+
+BUFFER ref0 FORMAT R8G8_UINT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT R8G8_UINT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8_UINT DATA
+255   0
+  0 255
+  0   0
+255 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R8G8_UINT DATA
+  0   0
+255 255
+255   0
+  0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-mediump-output-uint.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-mediump-output-uint.amber
new file mode 100644 (file)
index 0000000..31ae57b
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in[3];
+layout(location = 0) flat out uvec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in[3];
+layout(location = 0) out mediump uint frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i].x;
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out mediump uint frag_out;
+void main()
+{
+    frag_out = color_in.x;
+}
+END
+
+BUFFER framebuffer0 FORMAT R8G8_UINT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT R8G8_UINT
+
+BUFFER ref0 FORMAT R8G8_UINT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT R8G8_UINT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8_UINT DATA
+255   0
+  0 255
+  0   0
+255 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R8G8_UINT DATA
+  0   0
+255 255
+255   0
+  0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-mediump.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/array/r8g8-uint-mediump.amber
new file mode 100644 (file)
index 0000000..30a46c9
--- /dev/null
@@ -0,0 +1,155 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in[3];
+layout(location = 0) flat out uvec2 color_out[3];
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    for (int i = 0; i < 3; i++)
+        color_out[i] = color_in[i];
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in[3];
+layout(location = 0) out mediump uvec2 frag_out[3];
+void main()
+{
+    for (int i = 0; i < 3; i++)
+        frag_out[i] = color_in[i];
+}
+END
+
+SHADER vertex vert_shader_ref GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out mediump uvec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R8G8_UINT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT R8G8_UINT
+
+BUFFER ref0 FORMAT R8G8_UINT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT R8G8_UINT
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8_UINT DATA
+255   0
+  0 255
+  0   0
+255 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R8G8_UINT DATA
+  0   0
+255 255
+255   0
+  0 255
+END
+
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+CLEAR_COLOR pipeline 0 0 0 0
+CLEAR pipeline
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref0 0 0 0 0
+CLEAR pipeline_ref0
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref1 0 0 0 0
+CLEAR pipeline_ref1
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_ref2 0 0 0 0
+CLEAR pipeline_ref2
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/shuffle/inputs-outputs-mod.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/shuffle/inputs-outputs-mod.amber
new file mode 100644 (file)
index 0000000..7a9c6d7
--- /dev/null
@@ -0,0 +1,202 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in0;
+layout(location = 2) in uvec2 color_in1;
+layout(location = 3) in float color_in2;
+layout(location = 0) smooth out vec4 color_out0;
+layout(location = 1) flat out uvec2 color_out1;
+layout(location = 2) smooth out float color_out2;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out0 = color_in0;
+    color_out1 = color_in1;
+    color_out2 = color_in2;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in0;
+layout(location = 1) flat in uvec2 color_in1;
+layout(location = 2) smooth in float color_in2;
+layout(location = 0) out mediump float frag_out0;
+layout(location = 1) out lowp uvec2 frag_out1;
+layout(location = 2) out highp vec4 frag_out2;
+void main()
+{
+    frag_out0 = color_in2;
+    frag_out1 = color_in1;
+    frag_out2 = color_in0;
+}
+END
+
+SHADER vertex vert_shader_ref0 GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec3 color_in;
+layout(location = 0) smooth out vec3 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref0 GLSL
+#version 430
+layout(location = 0) smooth in vec3 color_in;
+layout(location = 0) out mediump vec3 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+SHADER vertex vert_shader_ref1 GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in uvec2 color_in;
+layout(location = 0) flat out uvec2 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref1 GLSL
+#version 430
+layout(location = 0) flat in uvec2 color_in;
+layout(location = 0) out lowp uvec2 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+SHADER vertex vert_shader_ref2 GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in;
+layout(location = 0) smooth out vec4 color_out;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out = color_in;
+}
+END
+
+SHADER fragment frag_shader_ref2 GLSL
+#version 430
+layout(location = 0) smooth in vec4 color_in;
+layout(location = 0) out highp vec4 frag_out;
+void main()
+{
+    frag_out = color_in;
+}
+END
+
+BUFFER framebuffer0 FORMAT R16_SFLOAT
+BUFFER framebuffer1 FORMAT R8G8_UINT
+BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT R16_SFLOAT
+BUFFER ref1 FORMAT R8G8_UINT
+BUFFER ref2 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
+255   0   0 255
+  0 255   0 255
+  0   0 255 255
+255 255   0 255
+END
+
+BUFFER color1 DATA_TYPE R8G8_UINT DATA
+  0 255
+  0   0
+255 255
+255   0
+END
+
+BUFFER color2 DATA_TYPE R16_SFLOAT DATA
+0.5
+1.0
+0.3
+0.2
+END
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  VERTEX_DATA color2 LOCATION 3
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  BIND BUFFER framebuffer2 AS color LOCATION 2
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref0
+  ATTACH frag_shader_ref0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color2 LOCATION 1
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref1
+  ATTACH frag_shader_ref1
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color1 LOCATION 1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref2
+  ATTACH vert_shader_ref2
+  ATTACH frag_shader_ref2
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  BIND BUFFER ref2 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN pipeline_ref0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN pipeline_ref1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN pipeline_ref2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
+EXPECT framebuffer2 EQ_BUFFER ref2
diff --git a/external/vulkancts/data/vulkan/amber/draw/output_location/shuffle/inputs-outputs.amber b/external/vulkancts/data/vulkan/amber/draw/output_location/shuffle/inputs-outputs.amber
new file mode 100644 (file)
index 0000000..b9582f5
--- /dev/null
@@ -0,0 +1,136 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec4 color_in0;
+layout(location = 2) in vec4 color_in1;
+layout(location = 0) out vec4 color_out0;
+layout(location = 1) out vec4 color_out1;
+
+void main()
+{
+       gl_Position = vec4(position_in, 0, 1);
+    color_out0 = color_in0;
+    color_out1 = color_in1;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+layout(location = 0) in vec4 color_in0;
+layout(location = 1) in vec4 color_in1;
+layout(location = 0) out vec4 frag_out0;
+layout(location = 1) out vec4 frag_out1;
+void main()
+{
+    if (((int(gl_FragCoord.x) / 5) % 2) == ((int(gl_FragCoord.y) / 5) % 2))
+    {
+        frag_out0 = color_in0;
+        frag_out1 = color_in1;
+    }
+    else
+    {
+        frag_out0 = color_in1;
+        frag_out1 = color_in0;
+    }
+}
+END
+
+SHADER vertex vert_shader_ref PASSTHROUGH
+
+SHADER fragment frag_shader_ref0 GLSL
+#version 430
+layout(location = 0) out vec4 frag_out;
+void main()
+{
+    if (((int(gl_FragCoord.x) / 5) % 2) == ((int(gl_FragCoord.y) / 5) % 2))
+        frag_out = vec4(1, 0, 0, 1);
+    else
+        frag_out = vec4(0, 1, 0, 1);
+}
+END
+
+SHADER fragment frag_shader_ref1 GLSL
+#version 430
+layout(location = 0) out vec4 frag_out;
+void main()
+{
+    if (((int(gl_FragCoord.x) / 5) % 2) == ((int(gl_FragCoord.y) / 5) % 2))
+        frag_out = vec4(0, 1, 0, 1);
+    else
+        frag_out = vec4(1, 0, 0, 1);
+}
+END
+
+
+BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
+BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
+
+BUFFER ref0 FORMAT B8G8R8A8_UNORM
+BUFFER ref1 FORMAT B8G8R8A8_UNORM
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+
+BUFFER color0 DATA_TYPE R8G8B8A8_UNORM DATA
+255   0   0 255
+255   0   0 255
+255   0   0 255
+255   0   0 255
+END
+
+BUFFER color1 DATA_TYPE R8G8B8A8_UNORM DATA
+  0 255   0 255
+  0 255   0 255
+  0 255   0 255
+  0 255   0 255
+END
+
+PIPELINE graphics pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA color0 LOCATION 1
+  VERTEX_DATA color1 LOCATION 2
+  BIND BUFFER framebuffer0 AS color LOCATION 0
+  BIND BUFFER framebuffer1 AS color LOCATION 1
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref0
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref0
+  BIND BUFFER ref0 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_ref1
+  ATTACH vert_shader_ref
+  ATTACH frag_shader_ref1
+  BIND BUFFER ref1 AS color LOCATION 0
+  FRAMEBUFFER_SIZE 60 60
+END
+
+RUN pipeline DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN pipeline_ref0 DRAW_RECT POS 0 0 SIZE 60 60
+RUN pipeline_ref1 DRAW_RECT POS 0 0 SIZE 60 60
+EXPECT framebuffer0 EQ_BUFFER ref0
+EXPECT framebuffer1 EQ_BUFFER ref1
index f24ec31..8c8bb09 100644 (file)
@@ -44,6 +44,8 @@ set(DEQP_VK_DRAW_SRCS
        vktDrawDiscardRectanglesTests.cpp
        vktDrawExplicitVertexParameterTests.cpp
        vktDrawExplicitVertexParameterTests.hpp
+       vktDrawOutputLocationTests.cpp
+       vktDrawOutputLocationTests.hpp
 )
 
 set(DEQP_VK_DRAW_LIBS
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.cpp
new file mode 100644 (file)
index 0000000..30c1cd4
--- /dev/null
@@ -0,0 +1,137 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 Google Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Fragment output location tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktDrawOutputLocationTests.hpp"
+#include "vktTestGroupUtil.hpp"
+#include "amber/vktAmberTestCase.hpp"
+
+#include "tcuTestCase.hpp"
+
+#include <string>
+
+namespace vkt
+{
+namespace Draw
+{
+namespace
+{
+
+void createTests (tcu::TestCaseGroup* testGroup)
+{
+       tcu::TestContext& testCtx = testGroup->getTestContext();
+
+       // .array
+       {
+               tcu::TestCaseGroup* const       array           = new tcu::TestCaseGroup(testCtx, "array", "Test output location array");
+               static const char                       dataDir[]       = "draw/output_location/array";
+
+               static const std::string        cases[]         =
+               {
+                       "b10g11r11-ufloat-pack32-highp",
+                       "b10g11r11-ufloat-pack32-highp-output-float",
+                       "b10g11r11-ufloat-pack32-highp-output-vec2",
+                       "b10g11r11-ufloat-pack32-lowp",
+                       "b10g11r11-ufloat-pack32-lowp-output-float",
+                       "b10g11r11-ufloat-pack32-lowp-output-vec2",
+                       "b10g11r11-ufloat-pack32-mediump",
+                       "b10g11r11-ufloat-pack32-mediump-output-float",
+                       "b10g11r11-ufloat-pack32-mediump-output-vec2",
+                       "b8g8r8a8-unorm-highp",
+                       "b8g8r8a8-unorm-highp-output-vec2",
+                       "b8g8r8a8-unorm-highp-output-vec3",
+                       "b8g8r8a8-unorm-lowp",
+                       "b8g8r8a8-unorm-lowp-output-vec2",
+                       "b8g8r8a8-unorm-lowp-output-vec3",
+                       "b8g8r8a8-unorm-mediump",
+                       "b8g8r8a8-unorm-mediump-output-vec2",
+                       "b8g8r8a8-unorm-mediump-output-vec3",
+                       "r16g16-sfloat-highp",
+                       "r16g16-sfloat-highp-output-float",
+                       "r16g16-sfloat-lowp",
+                       "r16g16-sfloat-lowp-output-float",
+                       "r16g16-sfloat-mediump",
+                       "r16g16-sfloat-mediump-output-float",
+                       "r32g32b32a32-sfloat-highp",
+                       "r32g32b32a32-sfloat-highp-output-vec2",
+                       "r32g32b32a32-sfloat-highp-output-vec3",
+                       "r32g32b32a32-sfloat-lowp",
+                       "r32g32b32a32-sfloat-lowp-output-vec2",
+                       "r32g32b32a32-sfloat-lowp-output-vec3",
+                       "r32g32b32a32-sfloat-mediump",
+                       "r32g32b32a32-sfloat-mediump-output-vec2",
+                       "r32g32b32a32-sfloat-mediump-output-vec3",
+                       "r32-sfloat-highp",
+                       "r32-sfloat-lowp",
+                       "r32-sfloat-mediump",
+                       "r8g8-uint-highp",
+                       "r8g8-uint-highp-output-uint",
+                       "r8g8-uint-lowp",
+                       "r8g8-uint-lowp-output-uint",
+                       "r8g8-uint-mediump",
+                       "r8g8-uint-mediump-output-uint"
+               };
+
+               testGroup->addChild(array);
+
+               for (int i = 0; i < DE_LENGTH_OF_ARRAY(cases); ++i)
+               {
+                       const std::string                       fileName        = cases[i] + ".amber";
+                       cts_amber::AmberTestCase*       testCase        = cts_amber::createAmberTestCase(testCtx, cases[i].c_str(), "", dataDir, fileName);
+
+                       array->addChild(testCase);
+               }
+       }
+
+       // .shuffle
+       {
+               tcu::TestCaseGroup* const       shuffle         = new tcu::TestCaseGroup(testCtx, "shuffle", "Test output location shuffling");
+               static const char                       dataDir[]       = "draw/output_location/shuffle";
+
+               static const std::string        cases[]         =
+               {
+                       "inputs-outputs",
+                       "inputs-outputs-mod"
+               };
+
+               testGroup->addChild(shuffle);
+
+               for (int i = 0; i < DE_LENGTH_OF_ARRAY(cases); ++i)
+               {
+                       const std::string                       fileName        = cases[i] + ".amber";
+                       cts_amber::AmberTestCase*       testCase        = cts_amber::createAmberTestCase(testCtx, cases[i].c_str(), "", dataDir, fileName);
+
+                       shuffle->addChild(testCase);
+               }
+       }
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createOutputLocationTests (tcu::TestContext& testCtx)
+{
+       return createTestGroup(testCtx, "output_location", "Fragment output location tests", createTests);
+}
+
+}      // Draw
+}      // vkt
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.hpp b/external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.hpp
new file mode 100644 (file)
index 0000000..e0b1f23
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef _VKTDRAWOUTPUTLOCATIONTESTS_HPP
+#define _VKTDRAWOUTPUTLOCATIONTESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 Google Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Fragment output location tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vkDefs.hpp"
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace Draw
+{
+
+tcu::TestCaseGroup* createOutputLocationTests (tcu::TestContext& testCtx);
+
+} // Draw
+} // vkt
+
+#endif // _VKTDRAWOUTPUTLOCATIONTESTS_HPP
index 67a2b4f..0b5b63a 100644 (file)
@@ -41,6 +41,7 @@
 #include "vktDrawMultipleInterpolationTests.hpp"
 #include "vktDrawDiscardRectanglesTests.hpp"
 #include "vktDrawExplicitVertexParameterTests.hpp"
+#include "vktDrawOutputLocationTests.hpp"
 
 namespace vkt
 {
@@ -71,6 +72,7 @@ void createChildren (tcu::TestCaseGroup* group)
        group->addChild(createMultipleInterpolationTests        (testCtx));
        group->addChild(createDiscardRectanglesTests            (testCtx));
        group->addChild(createExplicitVertexParameterTests      (testCtx));
+       group->addChild(createOutputLocationTests               (testCtx));
 }
 
 } // anonymous
index bb15ba8..111e011 100644 (file)
@@ -448347,6 +448347,50 @@ dEQP-VK.draw.explicit_vertex_parameter.smooth_sample_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.noperspective_sample_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.smooth_centroid_samples_64
 dEQP-VK.draw.explicit_vertex_parameter.noperspective_centroid_samples_64
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-highp-output-vec2
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-lowp-output-vec2
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump-output-float
+dEQP-VK.draw.output_location.array.b10g11r11-ufloat-pack32-mediump-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-highp-output-vec3
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-lowp-output-vec3
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump-output-vec2
+dEQP-VK.draw.output_location.array.b8g8r8a8-unorm-mediump-output-vec3
+dEQP-VK.draw.output_location.array.r16g16-sfloat-highp
+dEQP-VK.draw.output_location.array.r16g16-sfloat-highp-output-float
+dEQP-VK.draw.output_location.array.r16g16-sfloat-lowp
+dEQP-VK.draw.output_location.array.r16g16-sfloat-lowp-output-float
+dEQP-VK.draw.output_location.array.r16g16-sfloat-mediump
+dEQP-VK.draw.output_location.array.r16g16-sfloat-mediump-output-float
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-highp-output-vec3
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-lowp-output-vec3
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump-output-vec2
+dEQP-VK.draw.output_location.array.r32g32b32a32-sfloat-mediump-output-vec3
+dEQP-VK.draw.output_location.array.r32-sfloat-highp
+dEQP-VK.draw.output_location.array.r32-sfloat-lowp
+dEQP-VK.draw.output_location.array.r32-sfloat-mediump
+dEQP-VK.draw.output_location.array.r8g8-uint-highp
+dEQP-VK.draw.output_location.array.r8g8-uint-highp-output-uint
+dEQP-VK.draw.output_location.array.r8g8-uint-lowp
+dEQP-VK.draw.output_location.array.r8g8-uint-lowp-output-uint
+dEQP-VK.draw.output_location.array.r8g8-uint-mediump
+dEQP-VK.draw.output_location.array.r8g8-uint-mediump-output-uint
+dEQP-VK.draw.output_location.shuffle.inputs-outputs
+dEQP-VK.draw.output_location.shuffle.inputs-outputs-mod
 dEQP-VK.compute.basic.empty_shader
 dEQP-VK.compute.basic.concurrent_compute
 dEQP-VK.compute.basic.ubo_to_ssbo_single_invocation