Blender V5.0
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
7#include "kernel/globals.h"
8#include "kernel/types.h"
9
11
12/* Interpolated lookup table access */
13
14ccl_device float lookup_table_read(KernelGlobals kg, float x, const int offset, const int size)
15{
16 x = saturatef(x) * (size - 1);
17
18 const int index = min(float_to_int(x), size - 1);
19 const int nindex = min(index + 1, size - 1);
20 const float t = x - index;
21
22 const float data0 = kernel_data_fetch(lookup_table, index + offset);
23 if (t == 0.0f) {
24 return data0;
25 }
26
27 const float data1 = kernel_data_fetch(lookup_table, nindex + offset);
28 return (1.0f - t) * data0 + t * data1;
29}
30
32 KernelGlobals kg, const float x, float y, const int offset, const int xsize, const int ysize)
33{
34 y = saturatef(y) * (ysize - 1);
35
36 const int index = min(float_to_int(y), ysize - 1);
37 const int nindex = min(index + 1, ysize - 1);
38 const float t = y - index;
39
40 const float data0 = lookup_table_read(kg, x, offset + xsize * index, xsize);
41 if (t == 0.0f) {
42 return data0;
43 }
44
45 const float data1 = lookup_table_read(kg, x, offset + xsize * nindex, xsize);
46 return (1.0f - t) * data0 + t * data1;
47}
48
50 const float x,
51 float y,
52 float z,
53 const int offset,
54 const int xsize,
55 const int ysize,
56 const int zsize)
57{
58 z = saturatef(z) * (zsize - 1);
59
60 const int index = min(float_to_int(z), zsize - 1);
61 const int nindex = min(index + 1, zsize - 1);
62 const float t = z - index;
63
64 const float data0 = lookup_table_read_2D(kg, x, y, offset + xsize * ysize * index, xsize, ysize);
65 if (t == 0.0f) {
66 return data0;
67 }
68
69 const float data1 = lookup_table_read_2D(
70 kg, x, y, offset + xsize * ysize * nindex, xsize, ysize);
71 return (1.0f - t) * data0 + t * data1;
72}
73
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#define CCL_NAMESPACE_END
#define saturatef(x)
ccl_device float lookup_table_read_2D(KernelGlobals kg, const float x, float y, const int offset, const int xsize, const int ysize)
ccl_device float lookup_table_read_3D(KernelGlobals kg, const float x, float y, float z, const int offset, const int xsize, const int ysize, const int zsize)
CCL_NAMESPACE_BEGIN ccl_device float lookup_table_read(KernelGlobals kg, float x, const int offset, const int size)
ccl_device_inline int float_to_int(const float f)
Definition math_base.h:407
#define ccl_device
#define min(a, b)
Definition sort.cc:36