Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_displace.h
| Show All 14 Lines | |||||
| */ | */ | ||||
| #include "kernel/kernel_montecarlo.h" | #include "kernel/kernel_montecarlo.h" | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| /* Bump Node */ | /* Bump Node */ | ||||
| ccl_device_noinline void svm_node_set_bump(ccl_global const KernelGlobals *kg, | ccl_device_noinline void svm_node_set_bump(KernelGlobals kg, | ||||
| ccl_private ShaderData *sd, | ccl_private ShaderData *sd, | ||||
| ccl_private float *stack, | ccl_private float *stack, | ||||
| uint4 node) | uint4 node) | ||||
| { | { | ||||
| #ifdef __RAY_DIFFERENTIALS__ | #ifdef __RAY_DIFFERENTIALS__ | ||||
| /* get normal input */ | /* get normal input */ | ||||
| uint normal_offset, scale_offset, invert, use_object_space; | uint normal_offset, scale_offset, invert, use_object_space; | ||||
| svm_unpack_node_uchar4(node.y, &normal_offset, &scale_offset, &invert, &use_object_space); | svm_unpack_node_uchar4(node.y, &normal_offset, &scale_offset, &invert, &use_object_space); | ||||
| ▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | #ifdef __RAY_DIFFERENTIALS__ | ||||
| normal_out = ensure_valid_reflection(sd->Ng, sd->I, normal_out); | normal_out = ensure_valid_reflection(sd->Ng, sd->I, normal_out); | ||||
| stack_store_float3(stack, node.w, normal_out); | stack_store_float3(stack, node.w, normal_out); | ||||
| #endif | #endif | ||||
| } | } | ||||
| /* Displacement Node */ | /* Displacement Node */ | ||||
| ccl_device void svm_node_set_displacement(ccl_global const KernelGlobals *kg, | ccl_device void svm_node_set_displacement(KernelGlobals kg, | ||||
| ccl_private ShaderData *sd, | ccl_private ShaderData *sd, | ||||
| ccl_private float *stack, | ccl_private float *stack, | ||||
| uint fac_offset) | uint fac_offset) | ||||
| { | { | ||||
| float3 dP = stack_load_float3(stack, fac_offset); | float3 dP = stack_load_float3(stack, fac_offset); | ||||
| sd->P += dP; | sd->P += dP; | ||||
| } | } | ||||
| ccl_device_noinline void svm_node_displacement(ccl_global const KernelGlobals *kg, | ccl_device_noinline void svm_node_displacement(KernelGlobals kg, | ||||
| ccl_private ShaderData *sd, | ccl_private ShaderData *sd, | ||||
| ccl_private float *stack, | ccl_private float *stack, | ||||
| uint4 node) | uint4 node) | ||||
| { | { | ||||
| uint height_offset, midlevel_offset, scale_offset, normal_offset; | uint height_offset, midlevel_offset, scale_offset, normal_offset; | ||||
| svm_unpack_node_uchar4(node.y, &height_offset, &midlevel_offset, &scale_offset, &normal_offset); | svm_unpack_node_uchar4(node.y, &height_offset, &midlevel_offset, &scale_offset, &normal_offset); | ||||
| float height = stack_load_float(stack, height_offset); | float height = stack_load_float(stack, height_offset); | ||||
| Show All 13 Lines | ccl_device_noinline void svm_node_displacement(KernelGlobals kg, | ||||
| else { | else { | ||||
| /* World space. */ | /* World space. */ | ||||
| dP *= (height - midlevel) * scale; | dP *= (height - midlevel) * scale; | ||||
| } | } | ||||
| stack_store_float3(stack, node.z, dP); | stack_store_float3(stack, node.z, dP); | ||||
| } | } | ||||
| ccl_device_noinline int svm_node_vector_displacement(ccl_global const KernelGlobals *kg, | ccl_device_noinline int svm_node_vector_displacement( | ||||
| ccl_private ShaderData *sd, | KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint4 node, int offset) | ||||
| ccl_private float *stack, | |||||
| uint4 node, | |||||
| int offset) | |||||
| { | { | ||||
| uint4 data_node = read_node(kg, &offset); | uint4 data_node = read_node(kg, &offset); | ||||
| uint space = data_node.x; | uint space = data_node.x; | ||||
| uint vector_offset, midlevel_offset, scale_offset, displacement_offset; | uint vector_offset, midlevel_offset, scale_offset, displacement_offset; | ||||
| svm_unpack_node_uchar4( | svm_unpack_node_uchar4( | ||||
| node.y, &vector_offset, &midlevel_offset, &scale_offset, &displacement_offset); | node.y, &vector_offset, &midlevel_offset, &scale_offset, &displacement_offset); | ||||
| Show All 39 Lines | |||||