有一个shuffle
of OpenCL在文档中的例子。
//Examples that are not valid are:
uint8 mask;
short16 a;
short8 b;
b = shuffle(a, mask); // invalid
但我不明白为什么。我用AndroidStudio在Android上测试了这一点,结果显示:构建程序失败了:BC代码:9:9:{9:9-9:16}:错误:没有匹配的内置函数调用‘洗牌’。然后,我将short改为int,如下所示:
uint8 mask;
int16 a;
int8 b;
b = shuffle(a, mask);
没什么大不了的。我从文件中找不到任何原因,有人能帮我吗?谢谢!
发布于 2018-09-14 18:15:42
我认为规范中描述的关键部分是:
掩码中每个元素的大小必须与结果中每个元素的大小匹配。
我认为这意味着如果您想要洗牌short
s的向量,则您的掩码必须是ushort
的向量;uint8
的掩码只适用于对元素为4个字节的向量进行洗牌--换句话说,int
、uint
和float
。
因此,以下内容应再次有效:
ushort8 mask; // <-- changed
short16 a;
short8 b;
b = shuffle(a, mask); // now valid
https://stackoverflow.com/questions/52298334
复制相似问题