OpenCL read_imagef 精度

OpenCL read_imagef precision

我正在尝试将图像放大 254 倍。 read_imagef return 结果不是线性的而是阶梯式的——我观察到每 15 个点跳跃一次。 sampler的精度是多少

输入为 9 个值,输出为 2304 个值。

输出摘录:

x   read_imagef
120 120
121 120.9375
122 121.875
123 122.8125
124 123.75
125 124.6875
126 125.625
127 126.5625
128 128.4375
129 129.375
130 130.3125
131 131.25
132 132.1875
133 133.125
134 134.0625
135 135
136 135.9375
137 136.875
138 137.8125
139 138.75
140 139.6875
141 140.625
142 141.5625
143 143.4375
144 144.375
145 145.3125
146 146.25
147 147.1875
148 148.125
149 149.0625
150 150

我希望 read_imagef return 是 x 的值。

P.S。我已经在 Mali GPU 上试过了。

插值精度由实现(通常是硬件)定义,通常至少为 8 位。

你给出的数字实际上看起来比我预期的更糟糕:121, 120.9375(?) 122 .. 127, 126.5625(?), 128.

使用采样器进行插值可以放大图像,其中 8 位精度很好。对于更详细的内容(如高度图),您应该在 OpenCL 中进行插值而不是依赖采样器。

您也可以 运行 位(隐含的只有 23 加 1)计算浮点坐标。像 2304 这样的值对整数部分使用 11(10 加 1)位,小数部分只剩下 13 位。