Blender V4.3
lookup_table.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
8
9/* Interpolated lookup table access */
10
11ccl_device float lookup_table_read(KernelGlobals kg, float x, int offset, int size)
12{
13 x = saturatef(x) * (size - 1);
14
15 int index = min(float_to_int(x), size - 1);
16 int nindex = min(index + 1, size - 1);
17 float t = x - index;
18
19 float data0 = kernel_data_fetch(lookup_table, index + offset);
20 if (t == 0.0f) {
21 return data0;
22 }
23
24 float data1 = kernel_data_fetch(lookup_table, nindex + offset);
25 return (1.0f - t) * data0 + t * data1;
26}
27
29 KernelGlobals kg, float x, float y, int offset, int xsize, int ysize)
30{
31 y = saturatef(y) * (ysize - 1);
32
33 int index = min(float_to_int(y), ysize - 1);
34 int nindex = min(index + 1, ysize - 1);
35 float t = y - index;
36
37 float data0 = lookup_table_read(kg, x, offset + xsize * index, xsize);
38 if (t == 0.0f) {
39 return data0;
40 }
41
42 float data1 = lookup_table_read(kg, x, offset + xsize * nindex, xsize);
43 return (1.0f - t) * data0 + t * data1;
44}
45
47 KernelGlobals kg, float x, float y, float z, int offset, int xsize, int ysize, int zsize)
48{
49 z = saturatef(z) * (zsize - 1);
50
51 int index = min(float_to_int(z), zsize - 1);
52 int nindex = min(index + 1, zsize - 1);
53 float t = z - index;
54
55 float data0 = lookup_table_read_2D(kg, x, y, offset + xsize * ysize * index, xsize, ysize);
56 if (t == 0.0f) {
57 return data0;
58 }
59
60 float data1 = lookup_table_read_2D(kg, x, y, offset + xsize * ysize * nindex, xsize, ysize);
61 return (1.0f - t) * data0 + t * data1;
62}
63
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ccl_device
#define CCL_NAMESPACE_END
#define saturatef(x)
CCL_NAMESPACE_BEGIN ccl_device float lookup_table_read(KernelGlobals kg, float x, int offset, int size)
ccl_device float lookup_table_read_2D(KernelGlobals kg, float x, float y, int offset, int xsize, int ysize)
ccl_device float lookup_table_read_3D(KernelGlobals kg, float x, float y, float z, int offset, int xsize, int ysize, int zsize)
#define min(a, b)
Definition sort.c:32
ccl_device_inline int float_to_int(float f)
Definition util/math.h:424