在生成器中的特定域上执行 Func

Executing Func over a specific domain in generator

我有这个用黑色填充区域 (0,0,100,100) 的示例生成器:

class MyGen : public Generator<MyGen>
{
public:
    Var x, y;
    Output<Func> output { "output", Int(32), 2 };

    void generate()
    {
        output(x, y) = x + y;
        RDom dom = RDom(0, 100, 0, 100);
        output(dom.x, dom.y) = 0;
    }

    void schedule()
    {
    }
};

区域填充正确,但由于纯定义,图像的其余部分是渐变(x+y)。

有没有办法编写一个不会被执行的纯定义(例如 output(x,y) = output(x,y))?

我可以在特定域(例如定义区域的 Input<int> 上执行 Func 而不影响图像的其余部分吗?

以下是如何编写未执行的纯定义:

output(x, y) = undef<int>();

虽然对于输出以外的任何东西都有点危险,因为 Halide 不会静态检查未定义值的使用。 valgrind 是你的朋友。