26 if ((f < 0.0f || f > 1.0f) && extrapolate) {
39 return t0 + dy * f * (table_size - 1);
46 const float t = f - (
float)
i;
50 if (interpolate && t > 0.0f) {
51 a = (1.0f - t) * a + t *
fetch_float(kg, offset +
i + 1);
64 if ((f < 0.0f || f > 1.0f) && extrapolate) {
77 return t0 + dy * f * (table_size - 1);
84 const float t = f - (
float)
i;
88 if (interpolate && t > 0.0f) {
103 const uint interpolate = node.
z;
119 offset += table_size;
141 const float range_x = max_x - min_x;
144 const float r =
rgb_ramp_lookup(kg, offset, relpos.
x,
true, extrapolate, table_size).
x;
145 const float g =
rgb_ramp_lookup(kg, offset, relpos.
y,
true, extrapolate, table_size).
y;
146 const float b =
rgb_ramp_lookup(kg, offset, relpos.
z,
true, extrapolate, table_size).
z;
148 color = (1.0f - fac) * color + fac *
make_float3(r, g,
b);
151 offset += table_size;
161 uint value_in_offset;
173 const float range =
max -
min;
174 const float relpos = (
in -
min) / range;
178 in = (1.0f - fac) *
in + fac *
v;
181 offset += table_size;
ATTR_WARN_UNUSED_RESULT const BMVert * v
ccl_device_inline float4 fetch_node_float(KernelGlobals kg, const int offset)
ccl_device_inline float stack_load_float(const ccl_private float *stack, const uint a)
ccl_device_inline void stack_store_float(ccl_private float *stack, const uint a, const float f)
ccl_device_inline uint4 read_node(KernelGlobals kg, ccl_private int *const offset)
ccl_device_inline void stack_store_float3(ccl_private float *stack, const uint a, const float3 f)
ccl_device_forceinline void svm_unpack_node_uchar3(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z)
ccl_device_forceinline void svm_unpack_node_uchar4(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z, ccl_private uint *w)
ccl_device_inline bool stack_valid(const uint a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(const ccl_private float *stack, const uint a)
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define ccl_device_noinline
#define CCL_NAMESPACE_END
constexpr T clamp(T, U, U) RET
ccl_device_inline int float_to_int(const float f)
ccl_device_noinline int svm_node_curves(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline int svm_node_curve(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_inline float fetch_float(KernelGlobals kg, const int offset)
ccl_device_inline float float_ramp_lookup(KernelGlobals kg, const int offset, float f, bool interpolate, bool extrapolate, const int table_size)
ccl_device_noinline int svm_node_rgb_ramp(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
ccl_device_inline float4 rgb_ramp_lookup(KernelGlobals kg, const int offset, float f, bool interpolate, bool extrapolate, const int table_size)