# Copyright 2018 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.

[vertex shader]
#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;
}

[fragment shader]
#version 430

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

void main() {
  final_color = frag_color;
}

[vertex data]
#        position
     0/R8G8_SNORM

#    Entire frame
#         R8   G8
        -128 -128
         127  127
        -128  127

        -128 -128
         127  127
         127 -128

#      Half frame
#         R8   G8
           0 -128
         127  127
           0  127

           0 -128
         127  127
         127 -128

#   Quarter frame
#         R8   G8
        -128    0
           0  127
        -128  127

        -128    0
           0  127
           0    0

#   Quarter frame
#         R8   G8
           0    0
         127  127
           0  127

           0    0
         127  127
         127    0

[test]
clear

ssbo 0 subdata vec4 0 1.0 0.0 0.0 1.0
draw arrays TRIANGLE_LIST 0 6
relative probe rect rgb (0.0, 0.0, 1.0, 1.0) (1.0, 0, 0)

ssbo 0 subdata vec4 0 0.0 1.0 0.0 1.0
draw arrays TRIANGLE_LIST 6 6
relative probe rect rgb (0.0, 0.0, 0.5, 1.0) (1.0, 0, 0)
relative probe rect rgb (0.5, 0.0, 0.5, 1.0) (0, 1.0, 0)

ssbo 0 subdata vec4 0 0.0 0.0 1.0 1.0
draw arrays TRIANGLE_LIST 12 6
relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0, 0)
relative probe rect rgb (0.5, 0.0, 0.5, 1.0) (0, 1.0, 0)
relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0, 0, 1.0)

ssbo 0 subdata vec4 0 0.5 0.5 0.5 1.0
draw arrays TRIANGLE_LIST 18 6
relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0, 0)
relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0, 1.0, 0)
relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0, 0, 1.0)
relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (0.5, 0.5, 0.5)

ssbo 0 subdata vec4 0 1.0 0.0 0.0 1.0
draw rect -1 -1 1 1

ssbo 0 subdata vec4 0 0.0 1.0 0.0 1.0
draw rect -1  0 1 1

ssbo 0 subdata vec4 0 0.0 0.0 1.0 1.0
draw rect  0 -1 1 1

ssbo 0 subdata vec4 0 0.5 0.0 0.5 1.0
draw rect  0  0 1 1

relative probe rect rgba (0.0, 0.0, 0.5, 0.5) (1.0,   0,   0, 1.0)
relative probe rect rgba (0.0, 0.5, 0.5, 0.5) (  0, 1.0,   0, 1.0)
relative probe rect rgba (0.5, 0.0, 0.5, 0.5) (  0,   0, 1.0, 1.0)
relative probe rect rgba (0.5, 0.5, 0.5, 0.5) (0.5,   0, 0.5, 1.0)
