1.设备上的图像对象:image2d_t和image3d_t
当主机将一个图像对象传递到设备上,设备上的内核函数会将它作为一个内核参数来访问。这个参数的数据类型和图像的维度有关。如果接受的是二维图像对象,参数的数据类型就是image2d_t,如果接受的是三维图像对象,参数的数据类型就是image3d_t.
缓存对象参数可以接受__global或__kernel等修饰符来指定在设备上存储缓存对象的位置。但因为很多设备都是将图像保存在特定的内存中,image2d_t和image3d_t的前面通常会有__read_only或__write_only等修饰符。换言之,一个图像可以读,可以写,但不能同时兼而有之。
图像对象的默认修饰符是__read_only,最前面的下划线可以省去。
假设,内核想从三维图像my_mpeg中读取数据,并将处理结果保存在二维图像my_jpg中。那么在用clCreateImage3D和clCreateImage2D函数创建完两个cl_mem结构之后,主机应用程序可能需要用到下面的代码行来设定内核参数:
clSetKernelArg(kernel, 0, sizeof(cl_mem), &my_mpeg)