对于正常值,1
用于表示true,0
表示false:
float a = 1.0f;
float b = 2.0f;
float c = (a > b); // this will be 0.0f
但是对于向量,1111...111
(32个二进制1)用于表示真,而0
用于表示false。要浮动,32个二进制1是-nan(不是带减号的数字):
typedef float v4 __attribute__((vector_size(sizeof(float)*4)));
v4 a = {1, 2, 3, 4};
v4 b = {0 ,1, 4, 5};
v4 c = (a > b); // this becomes { -nan, -nan, 0.0f, 0.0f }
我的问题是:
是否有可能以“矢量化”方式将c“转换”为{ 1.0f, 1.0f, 0.0f, 0.0f }
?
事实上,我想为像素的RGB做“钳制”(max(min(value, maximum), minimal)
)。如果上述情况无法实现,那么采用矢量化方式进行钳位的其他方法是什么?
PS:我更喜欢 非 -intrinsics 方式。