2017-04-04 56 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轉儲到文件。)這可能有助於說明爲什麼這不起作用。

這是一個非常渺茫的機會,它是一個編譯器問題,但更有可能是涉及陳舊的代碼,或者您沒有調用從該代碼段編譯的過濾器。