#!amber
# Copyright 2021 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 compute compute_shader GLSL
#version 460

layout(local_size_x = 4, local_size_y = 4, local_size_z = 1) in;

layout(binding = 0, r32f) uniform readonly image3D inImg;
layout(binding = 1, r32f) uniform image3D outImg;

void main() {
  // Get current pixel
  const int current_x = int(gl_GlobalInvocationID.x);
  const int current_y = int(gl_GlobalInvocationID.y);

  for (int idx = 0; idx < 4; ++idx) {
    vec4 result = imageLoad(inImg, ivec3(current_x, current_y, 3 - idx));
    imageStore(outImg, ivec3(current_x, current_y, idx), result);
  }
}
END

IMAGE outputImage DATA_TYPE float DIM_3D WIDTH 4 HEIGHT 4 DEPTH 4 FILL 0.0

IMAGE inputImage DATA_TYPE float DIM_3D WIDTH 4 HEIGHT 4 DEPTH 4 DATA
  0.110 0.111 0.112 0.113
  0.120 0.121 0.122 0.123
  0.130 0.131 0.132 0.133
  0.140 0.141 0.142 0.143

  0.210 0.211 0.212 0.213
  0.220 0.221 0.222 0.223
  0.230 0.231 0.232 0.233
  0.240 0.241 0.242 0.243

  0.310 0.311 0.312 0.313
  0.320 0.321 0.322 0.323
  0.330 0.331 0.332 0.333
  0.340 0.341 0.342 0.343

  0.410 0.411 0.412 0.413
  0.420 0.421 0.422 0.423
  0.430 0.431 0.432 0.433
  0.440 0.441 0.442 0.443
END

IMAGE expectedImage DATA_TYPE float DIM_3D WIDTH 4 HEIGHT 4 DEPTH 4 DATA
  0.410 0.411 0.412 0.413
  0.420 0.421 0.422 0.423
  0.430 0.431 0.432 0.433
  0.440 0.441 0.442 0.443

  0.310 0.311 0.312 0.313
  0.320 0.321 0.322 0.323
  0.330 0.331 0.332 0.333
  0.340 0.341 0.342 0.343

  0.210 0.211 0.212 0.213
  0.220 0.221 0.222 0.223
  0.230 0.231 0.232 0.233
  0.240 0.241 0.242 0.243

  0.110 0.111 0.112 0.113
  0.120 0.121 0.122 0.123
  0.130 0.131 0.132 0.133
  0.140 0.141 0.142 0.143
END

PIPELINE compute pipeline
  ATTACH compute_shader

  BIND BUFFER inputImage AS storage_image DESCRIPTOR_SET 0 BINDING 0
  BIND BUFFER outputImage AS storage_image DESCRIPTOR_SET 0 BINDING 1
END

RUN pipeline 1 1 1

EXPECT outputImage EQ_BUFFER expectedImage

