# 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 rect -1 -1 1 1
relative probe rect rgba (0.0, 0.0, 0.5, 0.5) (1.0,   0,   0, 1.0)

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

ssbo 0 subdata vec4 0 0.0 1.0 0.0 1.0
draw rect -1  0 1 1
relative probe rect rgba (0.0, 0.5, 0.5, 0.5) (  0, 1.0,   0, 1.0)

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

ssbo 0 subdata vec4 0 0.0 0.0 1.0 1.0
draw rect  0 -1 1 1
relative probe rect rgba (0.5, 0.0, 0.5, 0.5) (  0,   0, 1.0, 1.0)

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

ssbo 0 subdata vec4 0 0.5 0.0 0.5 1.0
draw rect  0  0 1 1
relative probe rect rgba (0.5, 0.5, 0.5, 0.5) (0.5,   0, 0.5, 1.0)

ssbo 0 subdata vec4 0 1.0 0.0 0.0 1.0
draw arrays TRIANGLE_LIST 18 6

relative probe rect rgba (0.0, 0.0, 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.0, 0.5, 0.5, 0.5) (0.5,   0, 0.5, 1.0)
relative probe rect rgba (0.5, 0.5, 0.5, 0.5) (1.0,   0,   0, 1.0)
