图像和采集器对象
GPU原本设计为高性能地渲染3维图形。3维图形管线最重要的特性之一是对多边形表面应用纹理图像。因此,GPU逐步发展为可以极为高性能地访问和过滤纹理图像。尽管大多数图像操作可以使用第7章介绍的通用内存对象来模拟,但与使用图像对象相比,那些模拟的方法往往会大大降低性能。另外,利用图像对象,可以非常容易地完成诸如纹理边缘钳制和过滤等操作。
因此,首先要了解OpenCL中存在图像对象的主要原因是:这样允许程序充分利用GPU中的高性能纹理硬件。此外还可以从其他硬件得到另外一些优点,因此图像对象是OpenCL中处理2维和3维图像数据的最佳方法。
图像对象封装了有关一个图像的多种信息:
1)图像大小:2维图像的宽度和高度(以及3维图像的深度)。
2)图像格式:内存中图像像素的位深度和布局。
3)内存访问标志:例如,图像用于读还是写,或者是否可同时读、写。
内核中从图像对象获取数据时需要采样器。采样器告诉图像读取函数如何访问图像。
4)坐标模式:从图像获取数据所用的纹理坐标规格化至范围[0…1]还是范围[0…image_dim - 1]。
5)寻地模式:当坐标超出图像边界范围时,从图像获取数据的行为。
6)过滤模式:从图像获取数据时,