81#ifdef __SHADER_RAYTRACE__
88#ifdef __KERNEL_USE_DATA_CONSTANTS__
89# define SVM_CASE(node) \
91 if (!kernel_data_svm_usage_##node) \
94# define SVM_CASE(node) case node:
98template<u
int node_feature_mask, ShaderType type,
typename ConstIntegratorGenericState>
100 ConstIntegratorGenericState
state,
103 const uint32_t path_flag)
134 kg, sd, stack, closure_weight, node, path_flag, offset);
309 kg, sd, stack, closure_weight, node, path_flag, offset);
338 svm_node_hair_info(kg, sd, stack, node.
y, node.
z);
341#if defined(__POINTCLOUD__)
343 svm_node_point_info(kg, sd, stack, node.
y, node.
z);
451#ifdef __SHADER_RAYTRACE__
453 svm_node_bevel<node_feature_mask>(kg,
state, sd, stack, node);
456 svm_node_ao<node_feature_mask>(kg,
state, sd, stack, node);
482 SVM_CASE(NODE_MIX_VECTOR_NON_UNIFORM)
486 kernel_assert(!
"Unknown node type was passed to the SVM machine");
ccl_device void svm_node_aov_color(KernelGlobals kg, ConstIntegratorGenericState state, ccl_private float *stack, const uint4 node, ccl_global float *render_buffer)
CCL_NAMESPACE_BEGIN ccl_device_inline bool svm_node_aov_check(const uint32_t path_flag, const ccl_global float *render_buffer)
ccl_device void svm_node_aov_value(KernelGlobals kg, ConstIntegratorGenericState state, ccl_private float *stack, const uint4 node, ccl_global float *render_buffer)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_blackbody(KernelGlobals kg, ccl_private float *stack, const uint temperature_offset, const uint col_offset)
ccl_device_noinline int svm_node_tex_brick(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_brightness(ccl_private float *stack, const uint in_color, const uint out_color, const uint node)
ccl_device_noinline void svm_node_leave_bump_eval(ccl_private ShaderData *sd, ccl_private float *stack, const uint offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_enter_bump_eval(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint offset)
ccl_device_noinline void svm_node_tex_checker(ccl_private float *stack, const uint4 node)
CCL_NAMESPACE_BEGIN ccl_device_noinline int svm_node_clamp(KernelGlobals kg, ccl_private float *stack, const uint value_stack_offset, const uint parameters_stack_offsets, const uint result_stack_offset, int offset)
ccl_device_noinline int svm_node_principled_volume(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const Spectrum closure_weight, const uint4 node, const uint32_t path_flag, int offset)
ccl_device_noinline void svm_node_closure_holdout(ccl_private ShaderData *sd, ccl_private float *stack, Spectrum closure_weight, const uint4 node)
ccl_device_noinline void svm_node_closure_background(ccl_private ShaderData *sd, ccl_private float *stack, Spectrum closure_weight, const uint4 node)
ccl_device_noinline void svm_node_volume_coefficients(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, Spectrum scatter_coeffs, const uint4 node, const uint32_t path_flag)
ccl_device_noinline void svm_node_closure_emission(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, Spectrum closure_weight, const uint4 node)
ccl_device void svm_node_emission_weight(ccl_private float *stack, ccl_private Spectrum *closure_weight, const uint4 node)
ccl_device void svm_node_closure_set_weight(ccl_private Spectrum *closure_weight, const uint r, uint g, const uint b)
ccl_device_noinline void svm_node_closure_volume(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, Spectrum closure_weight, const uint4 node)
ccl_device_noinline void svm_node_mix_closure(ccl_private float *stack, const uint4 node)
ccl_device void svm_node_closure_weight(ccl_private float *stack, ccl_private Spectrum *closure_weight, const uint weight_offset)
ccl_device void svm_node_set_normal(ccl_private ShaderData *sd, ccl_private float *stack, const uint in_direction, const uint out_normal)
ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, Spectrum closure_weight, const uint4 node, const uint32_t path_flag, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_convert(KernelGlobals kg, ccl_private float *stack, const uint type, const uint from, const uint to)
ccl_device_noinline void svm_node_tex_image_box(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline int svm_node_tex_image(KernelGlobals kg, ccl_private ShaderData *, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline void svm_node_tex_environment(KernelGlobals kg, ccl_private ShaderData *, ccl_private float *stack, const uint4 node)
ccl_device_inline float stack_load_float(const ccl_private float *stack, const uint a)
ccl_device_inline uint4 read_node(KernelGlobals kg, ccl_private int *const offset)
#define kernel_assert(cond)
#define IF_KERNEL_NODES_FEATURE(feature)
const ThreadKernelGlobalsCPU * KernelGlobals
#define CCL_NAMESPACE_END
ccl_device void svm_node_set_displacement(ccl_private ShaderData *sd, ccl_private float *stack, const uint fac_offset)
ccl_device_noinline int svm_node_vector_displacement(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline int svm_node_set_bump(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline void svm_node_displacement(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_fresnel(ccl_private ShaderData *sd, ccl_private float *stack, const uint ior_offset, const uint ior_value, const uint node)
ccl_device_noinline void svm_node_layer_weight(ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline int svm_node_tex_gabor(KernelGlobals kg, ccl_private float *stack, const uint type, const uint stack_offsets_1, const uint stack_offsets_2, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_gamma(ccl_private float *stack, const uint in_gamma, const uint in_color, const uint out_color)
ccl_device_noinline void svm_node_tex_gradient(ccl_private float *stack, const uint4 node)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_hsv(ccl_private float *stack, const uint4 node)
ccl_device_noinline void svm_node_invert(ccl_private float *stack, const uint in_fac, const uint in_color, const uint out_color)
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
ccl_device_noinline void svm_node_attr_bump_dx(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline void svm_node_attr_bump_dy(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline void svm_node_attr(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_camera(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint out_vector, const uint out_zdepth, const uint out_distance)
ccl_device_noinline void svm_node_particle_info(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint out_offset)
ccl_device_noinline void svm_node_geometry_bump_dy(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint out_offset, const float bump_filter_width)
ccl_device_noinline void svm_node_geometry_bump_dx(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint out_offset, const float bump_filter_width)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_geometry(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint out_offset)
ccl_device_noinline void svm_node_object_info(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint out_offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_ies(KernelGlobals kg, ccl_private ShaderData *, ccl_private float *stack, const uint4 node)
ccl_device_noinline int svm_node_vector_math(KernelGlobals kg, ccl_private float *stack, const uint type, const uint inputs_stack_offsets, const uint outputs_stack_offsets, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_math(ccl_private float *stack, const uint type, const uint inputs_stack_offsets, const uint result_stack_offset)
ccl_device void svm_eval_nodes(KernelGlobals kg, ConstIntegratorGenericState state, ccl_private ShaderData *sd, ccl_global float *render_buffer, const uint32_t path_flag)
@ SHADER_TYPE_DISPLACEMENT
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_light_path(KernelGlobals kg, ConstIntegratorGenericState state, const ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint out_offset, const uint32_t path_flag)
ccl_device_noinline void svm_node_light_falloff(ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline int svm_node_tex_magic(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline int svm_node_vector_map_range(ccl_private float *stack, const uint value_stack_offset, const uint parameters_stack_offsets, const uint results_stack_offsets, const int offset)
ccl_device_noinline int svm_node_map_range(KernelGlobals kg, ccl_private float *stack, const uint value_stack_offset, const uint parameters_stack_offsets, const uint results_stack_offsets, int offset)
ccl_device_noinline void svm_node_mix_color(ccl_private float *stack, const uint options, const uint input_offset, const uint result_offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline int svm_node_mix(KernelGlobals kg, ccl_private float *stack, const uint fac_offset, const uint c1_offset, const uint c2_offset, int offset)
ccl_device_noinline void svm_node_mix_vector(ccl_private float *stack, const uint input_offset, const uint result_offset)
ccl_device_noinline void svm_node_mix_vector_non_uniform(ccl_private float *stack, const uint input_offset, const uint result_offset)
ccl_device_noinline void svm_node_mix_float(ccl_private float *stack, const uint use_clamp, const uint input_offset, const uint result_offset)
ccl_device_noinline int svm_node_tex_noise(KernelGlobals kg, ccl_private float *stack, const uint offsets1, const uint offsets2, const uint offsets3, int node_offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline int svm_node_normal(KernelGlobals kg, ccl_private float *stack, const uint in_normal_offset, const uint out_normal_offset, const uint out_dot_offset, int offset)
ccl_device_noinline int svm_node_radial_tiling(ccl_private float *stack, uint4 node, int offset)
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_device_noinline int svm_node_rgb_ramp(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_combine_color(ccl_private float *stack, const uint color_type, const uint inputs_stack_offsets, const uint result_stack_offset)
ccl_device_noinline void svm_node_separate_color(ccl_private float *stack, const uint color_type, const uint input_stack_offset, const uint results_stack_offsets)
ccl_device void svm_node_separate_vector(ccl_private float *stack, const uint ivector_offset, const uint vector_index, const uint out_offset)
CCL_NAMESPACE_BEGIN ccl_device void svm_node_combine_vector(ccl_private float *stack, const uint in_offset, const uint vector_index, const uint out_offset)
ccl_device_noinline int svm_node_tex_sky(KernelGlobals kg, const uint32_t path_flag, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_mapping(ccl_private float *stack, const uint type, const uint inputs_stack_offsets, const uint result_stack_offset)
ccl_device_noinline int svm_node_texture_mapping(KernelGlobals kg, ccl_private float *stack, const uint vec_offset, const uint out_offset, int offset)
ccl_device_noinline int svm_node_min_max(KernelGlobals kg, ccl_private float *stack, const uint vec_offset, const uint out_offset, int offset)
ccl_device_noinline void svm_node_tangent(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline int svm_node_tex_coord_bump_dx(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline int svm_node_tex_coord(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline int svm_node_tex_coord_bump_dy(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline void svm_node_normal_map(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device int svm_node_value_v(KernelGlobals kg, ccl_private float *stack, const uint out_offset, int offset)
CCL_NAMESPACE_BEGIN ccl_device void svm_node_value_f(ccl_private float *stack, const uint ivalue, const uint out_offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_vector_rotate(ccl_private float *stack, const uint input_stack_offsets, const uint axis_stack_offsets, const uint result_stack_offset)
ccl_device_noinline void svm_node_vertex_color_bump_dx(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline void svm_node_vertex_color_bump_dy(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_vertex_color(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
ccl_device_noinline int svm_node_tex_voronoi(KernelGlobals kg, ccl_private float *stack, const uint dimensions, const uint feature, const uint metric, int offset)
ccl_device_noinline int svm_node_tex_wave(KernelGlobals kg, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_wavelength(KernelGlobals kg, ccl_private float *stack, const uint wavelength, const uint color_out)
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_tex_white_noise(ccl_private float *stack, const uint dimensions, const uint inputs_stack_offsets, const uint outputs_stack_offsets)
ccl_device_noinline void svm_node_wireframe(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)