1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#include "Halide.h"
namespace {
class Shuffler : public Halide::Generator<Shuffler> {
public:
Input<Buffer<int32_t, 1>> input{"input"};
Output<Buffer<int32_t, 1>> output{"output"};
void generate() {
// The +1 is just to get a Broadcast node
output(x) = upsample(upsample(input))(x) + 1;
output.vectorize(x, natural_vector_size<int32_t>());
}
private:
Func upsample(Func f) {
Func u;
u(x) = f(x / 2 + 1);
return u;
}
Var x;
};
} // namespace
HALIDE_REGISTER_GENERATOR(Shuffler, shuffler)
|