当我尝试更新OpenCL内核中的float3
变量时,我得到了一些看似奇怪的结果。把它煮沸:
float3 vel = float3( 0 ); // a
vel = float3( 0, 1, 0 ); // b
vel = (float3)( 0, 2, 0 ); // c
如果我在每次通话后打印vel
:
if( get_global_id( 0 ) == 0 )
printf( "[%d]: vel: ( %f, %f, %f )\n", index, vel.x, vel.y, vel.z );
然后我看到a)正确初始化vel
,但是b)没有做任何事情。 c)工作。有谁知道为什么我不能用新的float3
对象更新变量,因为我在b中做了什么?这就是我以前用C ++和glsl做的方式。或者可能是驱动程序错误?
在运行OS X 10.11.5的macbook pro上使用OpenCL 1.2。
答案 0 :(得分:3)
只有c)
是初始化/使用矢量类型的正确方法。 a)
和b)
可能是Mac实施中的一个错误(在我试过的2个GPU和1CPU上没有编译)。
初始化矢量类型的几种方法:
float3 vel = (float3)( 1,1,1 );
float3 vel2 = (float3) 1; // it will be ( 1,1,1 )
float3 vel3 = 1; // it will be ( 1,1,1 )
有关矢量类型用法的更多信息:spec
答案 1 :(得分:2)