#!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.

DEVICE_EXTENSION VK_KHR_shader_float16_int8
DEVICE_EXTENSION VK_KHR_16bit_storage
DEVICE_EXTENSION VK_KHR_storage_buffer_storage_class
DEVICE_FEATURE Float16Int8Features.shaderFloat16
DEVICE_FEATURE Storage16BitFeatures.storageBuffer16BitAccess

SHADER compute f16 GLSL
#version 450
#extension GL_AMD_gpu_shader_half_float : enable

layout(set=0, binding=0) buffer Buf {
  float16_t h[3];
} data;

void main() {
  int idx = int(gl_GlobalInvocationID.x);
  data.h[idx] = data.h[idx] * 2.0hf;
}
END

BUFFER buf DATA_TYPE float16 DATA
-0.0
2.4
-2.4
END

PIPELINE compute pipeline
  ATTACH f16

  BIND BUFFER buf AS storage DESCRIPTOR_SET 0 BINDING 0
END

RUN pipeline 3 1 1

EXPECT buf IDX 0 TOLERANCE 0.1 EQ 0.0
EXPECT buf IDX 2 TOLERANCE 0.1 EQ 4.8
EXPECT buf IDX 4 TOLERANCE 0.1 EQ -4.8
