• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#version 450 core
2// clang-format off
3#define PRECISION ${PRECISION}
4#define FORMAT ${FORMAT}
5
6#define OP(X) ${OPERATOR}
7// clang-format on
8
9layout(std430) buffer;
10
11// clang-format off
12$if not INPLACE:
13  layout(set = 0, binding = 0, FORMAT) uniform PRECISION restrict writeonly image3D uOutput;
14  layout(set = 0, binding = 1) uniform PRECISION sampler3D uInput;
15  layout(set = 0, binding = 2) uniform PRECISION restrict Block {
16    ivec4 extents;
17  }
18  uBlock;
19$else:
20  layout(set = 0, binding = 0, FORMAT) uniform PRECISION restrict image3D uInput;
21  layout(set = 0, binding = 1) uniform PRECISION restrict Block {
22    ivec4 extents;
23  }
24  uBlock;
25// clang-format on
26
27layout(local_size_x_id = 0, local_size_y_id = 1, local_size_z_id = 2) in;
28
29void main() {
30  const ivec3 pos = ivec3(gl_GlobalInvocationID);
31  if (any(greaterThanEqual(pos, uBlock.extents.xyz))) {
32    return;
33  }
34
35  // clang-format off
36  $if not INPLACE:
37    const vec4 v = texelFetch(uInput, pos, 0);
38    imageStore(uOutput, pos, OP(v));
39  $else:
40    vec4 v = imageLoad(uInput, pos);
41    imageStore(uInput, pos, OP(v));
42  // clang-format on
43}
44