Blender  V2.93
svm_math_util.h
Go to the documentation of this file.
1 /*
2  * Copyright 2011-2014 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
18 
19 ccl_device void svm_vector_math(float *value,
20  float3 *vector,
22  float3 a,
23  float3 b,
24  float3 c,
25  float param1)
26 {
27  switch (type) {
29  *vector = a + b;
30  break;
32  *vector = a - b;
33  break;
35  *vector = a * b;
36  break;
39  break;
41  *vector = cross(a, b);
42  break;
44  *vector = project(a, b);
45  break;
47  *vector = reflect(a, b);
48  break;
50  *vector = refract(a, normalize(b), param1);
51  break;
53  *vector = faceforward(a, b, c);
54  break;
56  *value = dot(a, b);
57  break;
59  *value = distance(a, b);
60  break;
62  *value = len(a);
63  break;
65  *vector = a * param1;
66  break;
69  break;
72  break;
74  *vector = floor(a);
75  break;
77  *vector = ceil(a);
78  break;
80  *vector = make_float3(safe_modulo(a.x, b.x), safe_modulo(a.y, b.y), safe_modulo(a.z, b.z));
81  break;
83  *vector = make_float3(wrapf(a.x, b.x, c.x), wrapf(a.y, b.y, c.y), wrapf(a.z, b.z, c.z));
84  break;
86  *vector = a - floor(a);
87  break;
89  *vector = fabs(a);
90  break;
92  *vector = min(a, b);
93  break;
95  *vector = max(a, b);
96  break;
98  *vector = make_float3(sinf(a.x), sinf(a.y), sinf(a.z));
99  break;
101  *vector = make_float3(cosf(a.x), cosf(a.y), cosf(a.z));
102  break;
104  *vector = make_float3(tanf(a.x), tanf(a.y), tanf(a.z));
105  break;
106  default:
107  *vector = zero_float3();
108  *value = 0.0f;
109  }
110 }
111 
112 ccl_device float svm_math(NodeMathType type, float a, float b, float c)
113 {
114  switch (type) {
115  case NODE_MATH_ADD:
116  return a + b;
117  case NODE_MATH_SUBTRACT:
118  return a - b;
119  case NODE_MATH_MULTIPLY:
120  return a * b;
121  case NODE_MATH_DIVIDE:
122  return safe_divide(a, b);
123  case NODE_MATH_POWER:
124  return safe_powf(a, b);
125  case NODE_MATH_LOGARITHM:
126  return safe_logf(a, b);
127  case NODE_MATH_SQRT:
128  return safe_sqrtf(a);
129  case NODE_MATH_INV_SQRT:
130  return inversesqrtf(a);
131  case NODE_MATH_ABSOLUTE:
132  return fabsf(a);
133  case NODE_MATH_RADIANS:
134  return a * (M_PI_F / 180.0f);
135  case NODE_MATH_DEGREES:
136  return a * (180.0f / M_PI_F);
137  case NODE_MATH_MINIMUM:
138  return fminf(a, b);
139  case NODE_MATH_MAXIMUM:
140  return fmaxf(a, b);
141  case NODE_MATH_LESS_THAN:
142  return a < b;
144  return a > b;
145  case NODE_MATH_ROUND:
146  return floorf(a + 0.5f);
147  case NODE_MATH_FLOOR:
148  return floorf(a);
149  case NODE_MATH_CEIL:
150  return ceilf(a);
151  case NODE_MATH_FRACTION:
152  return a - floorf(a);
153  case NODE_MATH_MODULO:
154  return safe_modulo(a, b);
155  case NODE_MATH_TRUNC:
156  return a >= 0.0f ? floorf(a) : ceilf(a);
157  case NODE_MATH_SNAP:
158  return floorf(safe_divide(a, b)) * b;
159  case NODE_MATH_WRAP:
160  return wrapf(a, b, c);
161  case NODE_MATH_PINGPONG:
162  return pingpongf(a, b);
163  case NODE_MATH_SINE:
164  return sinf(a);
165  case NODE_MATH_COSINE:
166  return cosf(a);
167  case NODE_MATH_TANGENT:
168  return tanf(a);
169  case NODE_MATH_SINH:
170  return sinhf(a);
171  case NODE_MATH_COSH:
172  return coshf(a);
173  case NODE_MATH_TANH:
174  return tanhf(a);
175  case NODE_MATH_ARCSINE:
176  return safe_asinf(a);
177  case NODE_MATH_ARCCOSINE:
178  return safe_acosf(a);
180  return atanf(a);
181  case NODE_MATH_ARCTAN2:
182  return atan2f(a, b);
183  case NODE_MATH_SIGN:
184  return compatible_signf(a);
185  case NODE_MATH_EXPONENT:
186  return expf(a);
187  case NODE_MATH_COMPARE:
188  return ((a == b) || (fabsf(a - b) <= fmaxf(c, FLT_EPSILON))) ? 1.0f : 0.0f;
190  return a * b + c;
192  return smoothminf(a, b, c);
194  return -smoothminf(-a, -b, c);
195  default:
196  return 0.0f;
197  }
198 }
199 
200 /* Calculate color in range 800..12000 using an approximation
201  * a/x+bx+c for R and G and ((at + b)t + c)t + d) for B
202  * Max absolute error for RGB is (0.00095, 0.00077, 0.00057),
203  * which is enough to get the same 8 bit/channel color.
204  */
205 
207  {2.52432244e+03f, -1.06185848e-03f, 3.11067539e+00f},
208  {3.37763626e+03f, -4.34581697e-04f, 1.64843306e+00f},
209  {4.10671449e+03f, -8.61949938e-05f, 6.41423749e-01f},
210  {4.66849800e+03f, 2.85655028e-05f, 1.29075375e-01f},
211  {4.60124770e+03f, 2.89727618e-05f, 1.48001316e-01f},
212  {3.78765709e+03f, 9.36026367e-06f, 3.98995841e-01f},
213 };
214 
216  {-7.50343014e+02f, 3.15679613e-04f, 4.73464526e-01f},
217  {-1.00402363e+03f, 1.29189794e-04f, 9.08181524e-01f},
218  {-1.22075471e+03f, 2.56245413e-05f, 1.20753416e+00f},
219  {-1.42546105e+03f, -4.01730887e-05f, 1.44002695e+00f},
220  {-1.18134453e+03f, -2.18913373e-05f, 1.30656109e+00f},
221  {-5.00279505e+02f, -4.59745390e-06f, 1.09090465e+00f},
222 };
223 
225  {0.0f, 0.0f, 0.0f, 0.0f}, /* zeros should be optimized by compiler */
226  {0.0f, 0.0f, 0.0f, 0.0f},
227  {0.0f, 0.0f, 0.0f, 0.0f},
228  {-2.02524603e-11f, 1.79435860e-07f, -2.60561875e-04f, -1.41761141e-02f},
229  {-2.22463426e-13f, -1.55078698e-08f, 3.81675160e-04f, -7.30646033e-01f},
230  {6.72595954e-13f, -2.73059993e-08f, 4.24068546e-04f, -7.52204323e-01f},
231 };
232 
234 {
235  /* TODO(lukas): Reimplement in XYZ. */
236 
237  if (t >= 12000.0f) {
238  return make_float3(0.826270103f, 0.994478524f, 1.56626022f);
239  }
240  else if (t < 965.0f) {
241  /* For 800 <= t < 965 color does not change in OSL implementation, so keep color the same */
242  return make_float3(4.70366907f, 0.0f, 0.0f);
243  }
244 
245  /* Manually align for readability. */
246  /* clang-format off */
247  int i = (t >= 6365.0f) ? 5 :
248  (t >= 3315.0f) ? 4 :
249  (t >= 1902.0f) ? 3 :
250  (t >= 1449.0f) ? 2 :
251  (t >= 1167.0f) ? 1 :
252  0;
253  /* clang-format on */
254 
255  ccl_constant float *r = blackbody_table_r[i];
256  ccl_constant float *g = blackbody_table_g[i];
257  ccl_constant float *b = blackbody_table_b[i];
258 
259  const float t_inv = 1.0f / t;
260  return make_float3(r[0] * t_inv + r[1] * t + r[2],
261  g[0] * t_inv + g[1] * t + g[2],
262  ((b[0] * t + b[1]) * t + b[2]) * t + b[3]);
263 }
264 
266 {
267  if (gamma == 0.0f)
268  return make_float3(1.0f, 1.0f, 1.0f);
269 
270  if (color.x > 0.0f)
271  color.x = powf(color.x, gamma);
272  if (color.y > 0.0f)
273  color.y = powf(color.y, gamma);
274  if (color.z > 0.0f)
275  color.z = powf(color.z, gamma);
276 
277  return color;
278 }
279 
MINLINE float safe_sqrtf(float a)
MINLINE float safe_logf(float a, float base)
MINLINE float safe_acosf(float a)
MINLINE float safe_powf(float base, float exponent)
MINLINE float safe_divide(float a, float b)
MINLINE float safe_asinf(float a)
@ NODE_VECTOR_MATH_NORMALIZE
@ NODE_VECTOR_MATH_LENGTH
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_CEIL
@ NODE_VECTOR_MATH_MODULO
@ NODE_VECTOR_MATH_ADD
@ NODE_VECTOR_MATH_COSINE
@ NODE_VECTOR_MATH_REFLECT
@ NODE_VECTOR_MATH_WRAP
@ NODE_VECTOR_MATH_REFRACT
@ NODE_VECTOR_MATH_DOT_PRODUCT
@ NODE_VECTOR_MATH_ABSOLUTE
@ NODE_VECTOR_MATH_DIVIDE
@ NODE_VECTOR_MATH_TANGENT
@ NODE_VECTOR_MATH_DISTANCE
@ NODE_VECTOR_MATH_FLOOR
@ NODE_VECTOR_MATH_SNAP
@ NODE_VECTOR_MATH_SINE
@ NODE_VECTOR_MATH_FRACTION
@ NODE_VECTOR_MATH_PROJECT
@ NODE_VECTOR_MATH_MULTIPLY
@ NODE_VECTOR_MATH_SCALE
@ NODE_VECTOR_MATH_MAXIMUM
@ NODE_VECTOR_MATH_FACEFORWARD
@ NODE_VECTOR_MATH_SUBTRACT
@ NODE_VECTOR_MATH_MINIMUM
@ NODE_MATH_SINH
@ NODE_MATH_SMOOTH_MIN
@ NODE_MATH_TRUNC
@ NODE_MATH_COSH
@ NODE_MATH_SIGN
@ NODE_MATH_DEGREES
@ NODE_MATH_MODULO
@ NODE_MATH_ABSOLUTE
@ NODE_MATH_DIVIDE
@ NODE_MATH_SINE
@ NODE_MATH_ARCTAN2
@ NODE_MATH_ARCCOSINE
@ NODE_MATH_MULTIPLY_ADD
@ NODE_MATH_POWER
@ NODE_MATH_WRAP
@ NODE_MATH_ARCTANGENT
@ NODE_MATH_MINIMUM
@ NODE_MATH_SQRT
@ NODE_MATH_CEIL
@ NODE_MATH_TANH
@ NODE_MATH_GREATER_THAN
@ NODE_MATH_ADD
@ NODE_MATH_FRACTION
@ NODE_MATH_EXPONENT
@ NODE_MATH_LESS_THAN
@ NODE_MATH_ARCSINE
@ NODE_MATH_MAXIMUM
@ NODE_MATH_LOGARITHM
@ NODE_MATH_COMPARE
@ NODE_MATH_INV_SQRT
@ NODE_MATH_MULTIPLY
@ NODE_MATH_PINGPONG
@ NODE_MATH_ROUND
@ NODE_MATH_FLOOR
@ NODE_MATH_SUBTRACT
@ NODE_MATH_COSINE
@ NODE_MATH_SNAP
@ NODE_MATH_TANGENT
@ NODE_MATH_SMOOTH_MAX
@ NODE_MATH_RADIANS
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
#define sinf(x)
#define cosf(x)
#define ccl_device
#define ccl_constant
#define expf(x)
#define ccl_device_inline
#define ccl_static_constant
#define tanf(x)
#define powf(x, y)
#define CCL_NAMESPACE_END
#define atan2f(x, y)
#define fmaxf(x, y)
#define ceilf(x)
#define atanf(x)
#define fminf(x, y)
#define floorf(x)
#define tanhf(x)
#define sinhf(x)
#define coshf(x)
#define fabsf(x)
#define make_float3(x, y, z)
MINLINE float smoothminf(float a, float b, float c)
MINLINE float pingpongf(float value, float scale)
MINLINE float compatible_signf(float f)
MINLINE float wrapf(float value, float max, float min)
static unsigned c
Definition: RandGen.cpp:97
static unsigned a[3]
Definition: RandGen.cpp:92
vector project(vector v, vector v_proj)
Definition: node_math.h:66
float safe_modulo(float a, float b)
Definition: node_math.h:29
#define min(a, b)
Definition: sort.c:51
float z
Definition: sky_float3.h:35
float y
Definition: sky_float3.h:35
float x
Definition: sky_float3.h:35
ccl_static_constant float blackbody_table_g[6][3]
CCL_NAMESPACE_BEGIN ccl_device void svm_vector_math(float *value, float3 *vector, NodeVectorMathType type, float3 a, float3 b, float3 c, float param1)
Definition: svm_math_util.h:19
ccl_static_constant float blackbody_table_b[6][4]
ccl_device float3 svm_math_blackbody_color(float t)
ccl_device float svm_math(NodeMathType type, float a, float b, float c)
ccl_static_constant float blackbody_table_r[6][3]
ccl_device_inline float3 svm_math_gamma_color(float3 color, float gamma)
NodeMathType
Definition: svm_types.h:271
NodeVectorMathType
Definition: svm_types.h:314
float max
__forceinline avxf cross(const avxf &a, const avxf &b)
Definition: util_avxf.h:119
ccl_device_inline float inversesqrtf(float f)
Definition: util_math.h:591
#define M_PI_F
Definition: util_math.h:43
ccl_device_inline float distance(const float2 &a, const float2 &b)
ccl_device_inline float2 normalize(const float2 &a)
ccl_device_inline float dot(const float2 &a, const float2 &b)
ccl_device_inline float2 floor(const float2 &a)
ccl_device_inline float2 safe_normalize(const float2 &a)
ccl_device_inline float2 fabs(const float2 &a)
ccl_device_inline float3 safe_divide_float3_float3(const float3 a, const float3 b)
ccl_device_inline float3 refract(const float3 incident, const float3 normal, const float eta)
ccl_device_inline float3 faceforward(const float3 vector, const float3 incident, const float3 reference)
ccl_device_inline float3 ceil(const float3 &a)
ccl_device_inline float3 zero_float3()
ccl_device_inline float3 reflect(const float3 incident, const float3 normal)
uint len