#!amber
#
# Copyright 2019 The Amber Authors.
#
# 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
#
#     https://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 vtex_shader GLSL
#version 430

layout(location = 0) in vec4 position;
layout(location = 0) out vec4 frag_color;

layout(set = 0, binding = 0) readonly buffer block1 {
  vec4 in_color;
};

void main() {
  gl_Position = position;
  frag_color = in_color;
}
END

SHADER fragment frag_shader GLSL
#version 430

layout(location = 0) in vec4 frag_color;
layout(location = 0) out vec4 final_color;

void main() {
  final_color = frag_color;
}
END

BUFFER data_buf1 DATA_TYPE vec4<float> DATA  1 0  0 1 END
BUFFER data_buf2 DATA_TYPE vec4<float> DATA  0 1  0 1 END
BUFFER data_buf3 DATA_TYPE vec4<float> DATA  0 0  1 1 END
BUFFER data_buf4 DATA_TYPE vec4<float> DATA .5 0 .5 1 END

BUFFER frame FORMAT B8G8R8A8_UNORM

PIPELINE graphics pipeline1
  ATTACH vtex_shader
  ATTACH frag_shader

  FRAMEBUFFER_SIZE 800 600
  BIND BUFFER frame AS color LOCATION 0
  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
END
DERIVE_PIPELINE pipeline2 FROM pipeline1
  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
END
DERIVE_PIPELINE pipeline3 FROM pipeline1
  BIND BUFFER data_buf3 AS storage DESCRIPTOR_SET 0 BINDING 0
END
DERIVE_PIPELINE pipeline4 FROM pipeline1
  BIND BUFFER data_buf4 AS storage DESCRIPTOR_SET 0 BINDING 0
END

CLEAR pipeline1
RUN pipeline1 DRAW_RECT POS   0   0 SIZE 400 300
RUN pipeline2 DRAW_RECT POS   0 300 SIZE 400 300
RUN pipeline3 DRAW_RECT POS 400   0 SIZE 400 300
RUN pipeline4 DRAW_RECT POS 400 300 SIZE 400 300

EXPECT frame IDX   0   0 SIZE 400 300 EQ_RGBA 255   0   0 255
EXPECT frame IDX   0 300 SIZE 400 300 EQ_RGBA   0 255   0 255
EXPECT frame IDX 400   0 SIZE 400 300 EQ_RGBA   0   0 255 255
EXPECT frame IDX 400 300 SIZE 400 300 EQ_RGBA 127   0 127 255
