Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_clamp.h
| Show All 12 Lines | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| /* Clamp Node */ | /* Clamp Node */ | ||||
| ccl_device void svm_node_clamp(KernelGlobals *kg, | ccl_device_noinline int svm_node_clamp(const KernelGlobals *kg, | ||||
| ShaderData *sd, | ShaderData *sd, | ||||
| float *stack, | float *stack, | ||||
| uint value_stack_offset, | uint value_stack_offset, | ||||
| uint parameters_stack_offsets, | uint parameters_stack_offsets, | ||||
| uint result_stack_offset, | uint result_stack_offset, | ||||
| int *offset) | int offset) | ||||
| { | { | ||||
| uint min_stack_offset, max_stack_offset, type; | uint min_stack_offset, max_stack_offset, type; | ||||
| svm_unpack_node_uchar3(parameters_stack_offsets, &min_stack_offset, &max_stack_offset, &type); | svm_unpack_node_uchar3(parameters_stack_offsets, &min_stack_offset, &max_stack_offset, &type); | ||||
| uint4 defaults = read_node(kg, offset); | uint4 defaults = read_node(kg, &offset); | ||||
| float value = stack_load_float(stack, value_stack_offset); | float value = stack_load_float(stack, value_stack_offset); | ||||
| float min = stack_load_float_default(stack, min_stack_offset, defaults.x); | float min = stack_load_float_default(stack, min_stack_offset, defaults.x); | ||||
| float max = stack_load_float_default(stack, max_stack_offset, defaults.y); | float max = stack_load_float_default(stack, max_stack_offset, defaults.y); | ||||
| if (type == NODE_CLAMP_RANGE && (min > max)) { | if (type == NODE_CLAMP_RANGE && (min > max)) { | ||||
| stack_store_float(stack, result_stack_offset, clamp(value, max, min)); | stack_store_float(stack, result_stack_offset, clamp(value, max, min)); | ||||
| } | } | ||||
| else { | else { | ||||
| stack_store_float(stack, result_stack_offset, clamp(value, min, max)); | stack_store_float(stack, result_stack_offset, clamp(value, min, max)); | ||||
| } | } | ||||
| return offset; | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||