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.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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec3 result = texture(result_sampler, texcoord_in).xyz;
+ vec3 ref = texture(ref_sampler, texcoord_in).xyz;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+++ /dev/null
-#!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
+++ /dev/null
-#!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
+++ /dev/null
-#!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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec3 result = texture(result_sampler, texcoord_in).xyz;
+ vec3 ref = texture(ref_sampler, texcoord_in).xyz;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER framebuffer2 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref1 FORMAT B10G11R11_UFLOAT_PACK32
BUFFER ref2 FORMAT B10G11R11_UFLOAT_PACK32
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT B8G8R8A8_UNORM
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec3 result = texture(result_sampler, texcoord_in).xyz;
+ vec3 ref = texture(ref_sampler, texcoord_in).xyz;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT B8G8R8A8_UNORM
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec4 result = texture(result_sampler, texcoord_in);
+ vec4 ref = texture(ref_sampler, texcoord_in);
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT B8G8R8A8_UNORM
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+++ /dev/null
-#!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
+++ /dev/null
-#!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
+++ /dev/null
-#!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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT B8G8R8A8_UNORM
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec3 result = texture(result_sampler, texcoord_in).xyz;
+ vec3 ref = texture(ref_sampler, texcoord_in).xyz;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT B8G8R8A8_UNORM
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec4 result = texture(result_sampler, texcoord_in);
+ vec4 ref = texture(ref_sampler, texcoord_in);
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer1 FORMAT B8G8R8A8_UNORM
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT B8G8R8A8_UNORM
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R16G16_SFLOAT
BUFFER framebuffer1 FORMAT R16G16_SFLOAT
BUFFER framebuffer2 FORMAT R16G16_SFLOAT
BUFFER ref1 FORMAT R16G16_SFLOAT
BUFFER ref2 FORMAT R16G16_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
1.0 0.0
0.0 1.0
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R16G16_SFLOAT
BUFFER framebuffer1 FORMAT R16G16_SFLOAT
BUFFER framebuffer2 FORMAT R16G16_SFLOAT
BUFFER ref1 FORMAT R16G16_SFLOAT
BUFFER ref2 FORMAT R16G16_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
1.0 0.0
0.0 1.0
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+++ /dev/null
-#!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
+++ /dev/null
-#!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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R16G16_SFLOAT
BUFFER framebuffer1 FORMAT R16G16_SFLOAT
BUFFER framebuffer2 FORMAT R16G16_SFLOAT
BUFFER ref1 FORMAT R16G16_SFLOAT
BUFFER ref2 FORMAT R16G16_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
1.0 0.0
0.0 1.0
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R16G16_SFLOAT
BUFFER framebuffer1 FORMAT R16G16_SFLOAT
BUFFER framebuffer2 FORMAT R16G16_SFLOAT
BUFFER ref1 FORMAT R16G16_SFLOAT
BUFFER ref2 FORMAT R16G16_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R16G16_SFLOAT DATA
1.0 0.0
0.0 1.0
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32_SFLOAT
BUFFER framebuffer1 FORMAT R32_SFLOAT
BUFFER framebuffer2 FORMAT R32_SFLOAT
BUFFER ref1 FORMAT R32_SFLOAT
BUFFER ref2 FORMAT R32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R32_SFLOAT DATA
1.0
0.0
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+++ /dev/null
-#!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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32_SFLOAT
BUFFER framebuffer1 FORMAT R32_SFLOAT
BUFFER framebuffer2 FORMAT R32_SFLOAT
BUFFER ref1 FORMAT R32_SFLOAT
BUFFER ref2 FORMAT R32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R32_SFLOAT DATA
1.0
0.0
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec3 result = texture(result_sampler, texcoord_in).xyz;
+ vec3 ref = texture(ref_sampler, texcoord_in).xyz;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec4 result = texture(result_sampler, texcoord_in);
+ vec4 ref = texture(ref_sampler, texcoord_in);
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+++ /dev/null
-#!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
+++ /dev/null
-#!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
+++ /dev/null
-#!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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec2 result = texture(result_sampler, texcoord_in).xy;
+ vec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec3 result = texture(result_sampler, texcoord_in).xyz;
+ vec3 ref = texture(ref_sampler, texcoord_in).xyz;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec4 result = texture(result_sampler, texcoord_in);
+ vec4 ref = texture(ref_sampler, texcoord_in);
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer1 FORMAT R32G32B32A32_SFLOAT
BUFFER framebuffer2 FORMAT R32G32B32A32_SFLOAT
BUFFER ref1 FORMAT R32G32B32A32_SFLOAT
BUFFER ref2 FORMAT R32G32B32A32_SFLOAT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.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
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) usampler2D result_sampler;
+uniform layout(set=0, binding=1) usampler2D ref_sampler;
+void main()
+{
+ uint result = texture(result_sampler, texcoord_in).x;
+ uint ref = texture(ref_sampler, texcoord_in).x;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R8G8_UINT
BUFFER framebuffer1 FORMAT R8G8_UINT
BUFFER framebuffer2 FORMAT R8G8_UINT
BUFFER ref1 FORMAT R8G8_UINT
BUFFER ref2 FORMAT R8G8_UINT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R8G8_UINT DATA
255 0
0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) usampler2D result_sampler;
+uniform layout(set=0, binding=1) usampler2D ref_sampler;
+void main()
+{
+ uvec2 result = texture(result_sampler, texcoord_in).xy;
+ uvec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R8G8_UINT
BUFFER framebuffer1 FORMAT R8G8_UINT
BUFFER framebuffer2 FORMAT R8G8_UINT
BUFFER ref1 FORMAT R8G8_UINT
BUFFER ref2 FORMAT R8G8_UINT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R8G8_UINT DATA
255 0
0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+++ /dev/null
-#!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
+++ /dev/null
-#!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
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) usampler2D result_sampler;
+uniform layout(set=0, binding=1) usampler2D ref_sampler;
+void main()
+{
+ uint result = texture(result_sampler, texcoord_in).x;
+ uint ref = texture(ref_sampler, texcoord_in).x;
+ if (distance(result, ref) > 5)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R8G8_UINT
BUFFER framebuffer1 FORMAT R8G8_UINT
BUFFER framebuffer2 FORMAT R8G8_UINT
BUFFER ref1 FORMAT R8G8_UINT
BUFFER ref2 FORMAT R8G8_UINT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R8G8_UINT DATA
255 0
0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
for (int i = 0; i < 3; i++)
color_out[i] = color_in[i];
}
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) usampler2D result_sampler;
+uniform layout(set=0, binding=1) usampler2D ref_sampler;
+void main()
+{
+ uvec2 result = texture(result_sampler, texcoord_in).xy;
+ uvec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (distance(result, ref) > 5)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R8G8_UINT
BUFFER framebuffer1 FORMAT R8G8_UINT
BUFFER framebuffer2 FORMAT R8G8_UINT
BUFFER ref1 FORMAT R8G8_UINT
BUFFER ref2 FORMAT R8G8_UINT
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE R8G8_UINT DATA
255 0
0 255
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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_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
+CLEAR_COLOR pipeline_verify0 0 0 0 0
+CLEAR pipeline_verify0
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify1 0 0 0 0
+CLEAR pipeline_verify1
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+CLEAR_COLOR pipeline_verify2 0 0 0 0
+CLEAR pipeline_verify2
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
color_out0 = color_in0;
color_out1 = color_in1;
color_out2 = color_in2;
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
color_out = color_in;
}
END
}
END
+SHADER vertex vert_shader_verify GLSL
+#version 430
+layout(location = 0) in vec2 position_in;
+layout(location = 1) in vec2 texcoord_in;
+layout(location = 0) out vec2 texcoord_out;
+
+void main()
+{
+ gl_Position = vec4(position_in, 0, 1);
+ texcoord_out = texcoord_in;
+}
+END
+
+SHADER fragment frag_shader_verify_vec4 GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ vec4 result = texture(result_sampler, texcoord_in);
+ vec4 ref = texture(ref_sampler, texcoord_in);
+ if (result != ref)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
+SHADER fragment frag_shader_verify_float GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) sampler2D result_sampler;
+uniform layout(set=0, binding=1) sampler2D ref_sampler;
+void main()
+{
+ float result = texture(result_sampler, texcoord_in).x;
+ float ref = texture(ref_sampler, texcoord_in).x;
+ if (distance(result, ref) > 0.1)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
+SHADER fragment frag_shader_verify_uvec2 GLSL
+#version 430
+layout(location = 0) in vec2 texcoord_in;
+layout(location = 0) out vec4 frag_out;
+uniform layout(set=0, binding=0) usampler2D result_sampler;
+uniform layout(set=0, binding=1) usampler2D ref_sampler;
+void main()
+{
+ uvec2 result = texture(result_sampler, texcoord_in).xy;
+ uvec2 ref = texture(ref_sampler, texcoord_in).xy;
+ if (distance(result, ref) > 5)
+ frag_out = vec4(1, 0, 0, 1);
+ else
+ frag_out = vec4(0, 1, 0, 1);
+}
+END
+
BUFFER framebuffer0 FORMAT R16_SFLOAT
BUFFER framebuffer1 FORMAT R8G8_UINT
BUFFER framebuffer2 FORMAT B8G8R8A8_UNORM
BUFFER ref1 FORMAT R8G8_UINT
BUFFER ref2 FORMAT B8G8R8A8_UNORM
+BUFFER result0 FORMAT B8G8R8A8_UNORM
+BUFFER result1 FORMAT B8G8R8A8_UNORM
+BUFFER result2 FORMAT B8G8R8A8_UNORM
+
BUFFER position DATA_TYPE vec2<float> DATA
-1.0 -1.0
1.0 -1.0
-1.0 1.0
END
+BUFFER texcoord DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
BUFFER color0 DATA_TYPE B8G8R8A8_UNORM DATA
255 0 0 255
0 255 0 255
0.2
END
+SAMPLER sampler
+
PIPELINE graphics pipeline
ATTACH vert_shader
ATTACH frag_shader
FRAMEBUFFER_SIZE 60 60
END
+PIPELINE graphics pipeline_verify0
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify_float
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref0 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result0 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify1
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify_uvec2
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref1 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result1 AS color LOCATION 0
+ FRAMEBUFFER_SIZE 60 60
+END
+
+PIPELINE graphics pipeline_verify2
+ ATTACH vert_shader_verify
+ ATTACH frag_shader_verify_vec4
+ VERTEX_DATA position LOCATION 0
+ VERTEX_DATA texcoord LOCATION 1
+ BIND BUFFER framebuffer2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+ BIND BUFFER ref2 AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1
+ BIND BUFFER result2 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
+RUN pipeline_verify0 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN pipeline_verify1 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN pipeline_verify2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT result0 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result1 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
+EXPECT result2 IDX 0 0 SIZE 60 60 EQ_RGBA 0 255 0 255
void main()
{
- gl_Position = vec4(position_in, 0, 1);
+ gl_Position = vec4(position_in, 0, 1);
color_out0 = color_in0;
color_out1 = color_in1;
}
"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"
};
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