输出缓冲区的类型为int32,但传入的缓冲区的elem_size为1而不是4

时间:2017-04-04 15:00:23

标签: c++ halide

我正在将Func编译为静态库,并在C程序中使用它。我收到一条消息:Output buffer f20 has type int32 but elem_size of the buffer passed in is 1 instead of 4。在这种情况下,我无法弄清楚我做错了什么。这是Func

Var x, y, c;
Func out;
out(c, x, y) = cast<uint8_t>(255);

如果我理解正确,解析的输出类型应为uint8_t。以下是我在C程序中创建缓冲区的方法:

buffer_t buffer;

buffer.extent[0] = 4;
buffer.extent[1] = width;
buffer.extent[2] = height;
buffer.elem_size = 1;
buffer.host = data;
buffer.stride[0] = 1;
buffer.stride[1] = 4;
buffer.stride[2] = stride;

fill_buffer(&buffer);

缓冲区确实包含uint8_t个值,我将elem_size设置为1,因此我不明白如何使卤化物将其用作8位值..

1 个答案:

答案 0 :(得分:0)

这里很难给出答案,除了确认你的期望是正确的。如果直接以直接方式编译out,则输出缓冲区elem_size应为1.问题是它出错的原因。如果在HL_DEBUG_CODEGEN env变量设置为2或更高的情况下进行编译,则会有调试输出显示Halide实际编译的IR。 (可选择您可以调用compile_to_lowered_stmt将降低的IR转储到文件中。)这可能有助于说明为什么这不起作用。

这是编译器问题的可能性非常小,但更有可能是涉及陈旧代码,或者您没有调用从该代码段编译的过滤器。