85
__device_inline int stack_load_int(float *stack, uint a)
87
kernel_assert(a < SVM_STACK_SIZE);
89
return __float_as_int(stack[a]);
92
__device_inline float stack_load_int_default(float *stack, uint a, uint value)
94
return (a == (uint)SVM_STACK_INVALID)? (int)value: stack_load_int(stack, a);
97
__device_inline void stack_store_int(float *stack, uint a, int i)
99
kernel_assert(a < SVM_STACK_SIZE);
101
stack[a] = __int_as_float(i);
85
104
__device_inline bool stack_valid(uint a)
87
106
return a != (uint)SVM_STACK_INVALID;
186
206
case NODE_CLOSURE_BSDF:
187
svm_node_closure_bsdf(kg, sd, stack, node, randb, path_flag);
207
svm_node_closure_bsdf(kg, sd, stack, node, randb, path_flag, &offset);
189
209
case NODE_CLOSURE_EMISSION:
190
210
svm_node_closure_emission(sd, stack, node);
195
215
case NODE_CLOSURE_HOLDOUT:
196
216
svm_node_closure_holdout(sd, stack, node);
218
case NODE_CLOSURE_AMBIENT_OCCLUSION:
219
svm_node_closure_ambient_occlusion(sd, stack, node);
198
221
case NODE_CLOSURE_VOLUME:
199
222
svm_node_closure_volume(kg, sd, stack, node, path_flag);
242
#ifdef __IMAGE_TEXTURES__
220
243
case NODE_TEX_IMAGE:
221
244
svm_node_tex_image(kg, sd, stack, node);
246
case NODE_TEX_IMAGE_BOX:
247
svm_node_tex_image_box(kg, sd, stack, node);
223
249
case NODE_TEX_ENVIRONMENT:
224
250
svm_node_tex_environment(kg, sd, stack, node);
253
#ifdef __PROCEDURAL_TEXTURES__
226
254
case NODE_TEX_SKY:
227
255
svm_node_tex_sky(kg, sd, stack, node.y, node.z);
247
275
case NODE_TEX_CHECKER:
248
276
svm_node_tex_checker(kg, sd, stack, node, &offset);
279
svm_node_tex_brick(kg, sd, stack, node, &offset);
251
282
case NODE_CAMERA:
252
283
svm_node_camera(kg, sd, stack, node.y, node.z, node.w);
254
285
case NODE_GEOMETRY:
255
svm_node_geometry(sd, stack, node.y, node.z);
286
svm_node_geometry(kg, sd, stack, node.y, node.z);
288
#ifdef __EXTRA_NODES__
257
289
case NODE_GEOMETRY_BUMP_DX:
258
svm_node_geometry_bump_dx(sd, stack, node.y, node.z);
290
svm_node_geometry_bump_dx(kg, sd, stack, node.y, node.z);
260
292
case NODE_GEOMETRY_BUMP_DY:
261
svm_node_geometry_bump_dy(sd, stack, node.y, node.z);
293
svm_node_geometry_bump_dy(kg, sd, stack, node.y, node.z);
263
295
case NODE_LIGHT_PATH:
264
296
svm_node_light_path(sd, stack, node.y, node.z, path_flag);
298
case NODE_OBJECT_INFO:
299
svm_node_object_info(kg, sd, stack, node.y, node.z);
301
case NODE_PARTICLE_INFO:
302
svm_node_particle_info(kg, sd, stack, node.y, node.z);
306
svm_node_hair_info(kg, sd, stack, node.y, node.z);
266
311
case NODE_CONVERT:
267
312
svm_node_convert(sd, stack, node.y, node.z, node.w);
272
317
case NODE_VALUE_V:
273
318
svm_node_value_v(kg, sd, stack, node.y, &offset);
320
#ifdef __EXTRA_NODES__
275
321
case NODE_INVERT:
276
322
svm_node_invert(sd, stack, node.y, node.z, node.w);
294
340
svm_node_hsv(kg, sd, stack, node.y, node.z, node.w, &offset);
297
344
svm_node_attr(kg, sd, stack, node);
346
#ifdef __EXTRA_NODES__
299
347
case NODE_ATTR_BUMP_DX:
300
348
svm_node_attr_bump_dx(kg, sd, stack, node);
302
350
case NODE_ATTR_BUMP_DY:
303
351
svm_node_attr_bump_dy(kg, sd, stack, node);
305
354
case NODE_FRESNEL:
306
355
svm_node_fresnel(sd, stack, node.y, node.z, node.w);
308
357
case NODE_LAYER_WEIGHT:
309
358
svm_node_layer_weight(sd, stack, node);
360
#ifdef __EXTRA_NODES__
311
361
case NODE_SET_DISPLACEMENT:
312
362
svm_node_set_displacement(sd, stack, node.y);
314
364
case NODE_SET_BUMP:
315
svm_node_set_bump(sd, stack, node.y, node.z, node.w);
365
svm_node_set_bump(kg, sd, stack, node);
318
368
svm_node_math(kg, sd, stack, node.y, node.z, node.w, &offset);
323
373
case NODE_NORMAL:
324
374
svm_node_normal(kg, sd, stack, node.y, node.z, node.w, &offset);
326
377
case NODE_MAPPING:
327
378
svm_node_mapping(kg, sd, stack, node.y, node.z, &offset);
381
svm_node_min_max(kg, sd, stack, node.y, node.z, &offset);
329
383
case NODE_TEX_COORD:
330
384
svm_node_tex_coord(kg, sd, stack, node.y, node.z);
386
#ifdef __EXTRA_NODES__
332
387
case NODE_TEX_COORD_BUMP_DX:
333
388
svm_node_tex_coord_bump_dx(kg, sd, stack, node.y, node.z);
335
390
case NODE_TEX_COORD_BUMP_DY:
336
391
svm_node_tex_coord_bump_dy(kg, sd, stack, node.y, node.z);
393
case NODE_CLOSURE_SET_NORMAL:
394
svm_node_set_normal(kg, sd, stack, node.y, node.z );
338
397
case NODE_EMISSION_SET_WEIGHT_TOTAL:
339
398
svm_node_emission_set_weight_total(kg, sd, node.y, node.z, node.w);
400
#ifdef __EXTRA_NODES__
341
401
case NODE_RGB_RAMP:
342
402
svm_node_rgb_ramp(kg, sd, stack, node, &offset);
344
404
case NODE_RGB_CURVES:
345
405
svm_node_rgb_curves(kg, sd, stack, node, &offset);
407
case NODE_VECTOR_CURVES:
408
svm_node_vector_curves(kg, sd, stack, node, &offset);
410
case NODE_LIGHT_FALLOFF:
411
svm_node_light_falloff(sd, stack, node);
414
#ifdef __ANISOTROPIC__
416
svm_node_tangent(kg, sd, stack, node);
419
#ifdef __NORMAL_MAP__
420
case NODE_NORMAL_MAP:
421
svm_node_normal_map(kg, sd, stack, node);
349
426
#ifndef __MULTI_CLOSURE__