1515
1616layout (std430) buffer ;
1717
18- layout (set = 0 , binding = 0 , ${IMAGE_FORMAT[DTYPE]}) uniform PRECISION restrict writeonly ${IMAGE_T[NDIM][DTYPE]} image_out;
19- layout (set = 0 , binding = 1 , ${IMAGE_FORMAT["int "]}) uniform PRECISION restrict writeonly ${IMAGE_T[NDIM]["int "]} image_idx;
20- layout (set = 0 , binding = 2 ) uniform PRECISION sampler3D image_in;
21-
22- layout (set = 0 , binding = 3 ) uniform PRECISION restrict OutLimits {
23- ivec3 out_limits;
24- };
25-
26- layout (set = 0 , binding = 4 ) uniform PRECISION restrict InSizes {
27- ivec4 in_sizes;
28- };
29-
30- layout (set = 0 , binding = 5 ) uniform PRECISION restrict Params {
31- ivec2 kernel_size;
32- ivec2 stride;
33- ivec2 padding;
34- ivec2 dilation;
35- };
18+ ${layout_declare_tensor(B, "w", "t_out", DTYPE, STORAGE)}
19+ ${layout_declare_tensor(B, "w", "t_idx", "int ", STORAGE)}
20+ ${layout_declare_tensor(B, "r", "t_in", DTYPE, STORAGE)}
21+ ${layout_declare_ubo(B, "ivec3 ", "out_limits")}
22+ ${layout_declare_ubo(B, "ivec4 ", "in_sizes")}
23+ ${layout_declare_ubo(B, "ivec2 ", "kernel_size", "ivec2 ", "stride", "ivec2 ", "padding", "ivec2 ", "dilation")}
3624
3725layout (local_size_x_id = 0 , local_size_y_id = 1 , local_size_z_id = 2 ) in ;
3826
@@ -54,7 +42,7 @@ void main() {
5442 for (int y = start.y; y < end.y; y += dilation.y) {
5543 for (int x = start.x; x < end.x; x += dilation.x) {
5644 if ((x >= 0 && x < in_sizes.x) && (y >= 0 && y < in_sizes.y)) {
57- const vec4 cur_texel = texelFetch(image_in , ivec3 (x, y, pos.z), 0 );
45+ const vec4 cur_texel = load_texel(t_in , ivec3 (x, y, pos.z));
5846
5947 // Set idx if value is greatest in the pool; else, keep the existing idx.
6048 ivec4 cur_idx = ivec4 (x + int (in_sizes.x) * y);
@@ -66,6 +54,6 @@ void main() {
6654 }
6755 }
6856
69- imageStore(image_out , pos, out_texel);
70- imageStore(image_idx , pos, idx_texel);
57+ imageStore(t_out , pos, out_texel);
58+ imageStore(t_idx , pos, idx_texel);
7159}
0 commit comments