30 lines
927 B
Common Lisp
30 lines
927 B
Common Lisp
kernel void kernel_pad(
|
|
global const void * src0_ptr,
|
|
ulong src0_offset,
|
|
global void * dst_ptr,
|
|
ulong dst_offset,
|
|
int s_ne0, int s_ne1, int s_ne2,
|
|
int d_ne0, int d_ne1, int d_ne2
|
|
) {
|
|
global const float * src0 = (global const float *)((global const char *)src0_ptr + src0_offset);
|
|
global float * dst = (global float *)((global char *)dst_ptr + dst_offset);
|
|
|
|
int nidx = get_global_id(0);
|
|
int idx_d1 = get_group_id(1);
|
|
int idx_d2 = get_group_id(2);
|
|
|
|
if (nidx >= d_ne0) {
|
|
return;
|
|
}
|
|
|
|
int dst_el_offset = nidx + idx_d1 * d_ne0 + idx_d2 * d_ne0 * d_ne1;
|
|
|
|
bool in_src_bounds = (nidx < s_ne0) && (idx_d1 < s_ne1) && (idx_d2 < s_ne2);
|
|
|
|
if (in_src_bounds) {
|
|
int src_el_offset = nidx + idx_d1 * s_ne0 + idx_d2 * s_ne0 * s_ne1;
|
|
dst[dst_el_offset] = src0[src_el_offset];
|
|
} else {
|
|
dst[dst_el_offset] = 0.0f;
|
|
}
|
|
}
|