2017-04-04 48 views
0

我正在编译Func到静态库,并在C程序中使用它。我收到一条消息:Output buffer f20 has type int32 but elem_size of the buffer passed in is 1 instead of 4。在这种情况下,我无法弄清楚我做错了什么。这里的Func输出缓冲区的类型为int32,但传递的缓冲区的elem_size为1而不是4

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位值..

回答

0

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

这是一个非常渺茫的机会,它是一个编译器问题,但更有可能是涉及陈旧的代码,或者您没有调用从该代码段编译的过滤器。