#!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 HLSL
struct VS_OUTPUT {
  float4 pos : SV_POSITION;
  float4 color : COLOR;
};

VS_OUTPUT main(float4 pos : POSITION,
               float4 color : COLOR) {
  VS_OUTPUT vout;
  vout.pos = pos;
  vout.color = color;
  return vout;
}
END

SHADER fragment frag_shader HLSL
float4 main(float4 color : COLOR) : SV_TARGET {
  return color;
}
END

BUFFER position_buf DATA_TYPE R8G8_SNORM DATA
# Full frame
-128 -128
 127  127
-128  127
-128 -128
 127  127
 127 -128

# Half frame
   0 -128
 127  127
   0  127
   0 -128
 127  127
 127 -128

# Quarter frame
-128    0
   0  127
-128  127
-128    0
   0  127
   0    0

# Quarter frame
   0    0
 127  127
   0  127
   0    0
 127  127
 127    0
END

BUFFER vert_color DATA_TYPE R8G8B8A8_UNORM DATA
255   0   0 255
255   0   0 255
255   0   0 255
255   0   0 255
255   0   0 255
255   0   0 255

  0 255   0 255
  0 255   0 255
  0 255   0 255
  0 255   0 255
  0 255   0 255
  0 255   0 255

  0   0 255 255
  0   0 255 255
  0   0 255 255
  0   0 255 255
  0   0 255 255
  0   0 255 255

127 127 127 255
127 127 127 255
127 127 127 255
127 127 127 255
127 127 127 255
127 127 127 255
END

BUFFER framebuffer FORMAT B8G8R8A8_UNORM

PIPELINE graphics pipeline
  ATTACH vtex_shader
  ATTACH frag_shader

  VERTEX_DATA position_buf LOCATION 0
  VERTEX_DATA vert_color LOCATION 1

  BIND BUFFER framebuffer AS color LOCATION 0
END

CLEAR pipeline

RUN pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 6
EXPECT framebuffer IDX 0 0 SIZE 250 250 EQ_RGB 255 0 0

RUN pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 6 COUNT 6
EXPECT framebuffer IDX   0 0 SIZE 125 250 EQ_RGB 255   0 0
EXPECT framebuffer IDX 125 0 SIZE 125 250 EQ_RGB 0   255 0

RUN pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 12 COUNT 6
EXPECT framebuffer IDX   0   0 SIZE 125 125 EQ_RGB 255   0   0
EXPECT framebuffer IDX 125   0 SIZE 125 250 EQ_RGB 0   255   0
EXPECT framebuffer IDX   0 125 SIZE 125 125 EQ_RGB 0     0 255

RUN pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 18 COUNT 6
EXPECT framebuffer IDX   0   0 SIZE 125 125 EQ_RGB 255   0   0
EXPECT framebuffer IDX 125   0 SIZE 125 125 EQ_RGB 0   255   0
EXPECT framebuffer IDX   0 125 SIZE 125 125 EQ_RGB 0     0 255
EXPECT framebuffer IDX 125 125 SIZE 125 125 EQ_RGB 127 127 127
