Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_mapping.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 | ||||
| /* Mapping Node */ | /* Mapping Node */ | ||||
| ccl_device void svm_node_mapping(KernelGlobals *kg, | ccl_device_noinline void svm_node_mapping(const KernelGlobals *kg, | ||||
| ShaderData *sd, | ShaderData *sd, | ||||
| float *stack, | float *stack, | ||||
| uint type, | uint type, | ||||
| uint inputs_stack_offsets, | uint inputs_stack_offsets, | ||||
| uint result_stack_offset, | uint result_stack_offset) | ||||
| int *offset) | |||||
| { | { | ||||
| uint vector_stack_offset, location_stack_offset, rotation_stack_offset, scale_stack_offset; | uint vector_stack_offset, location_stack_offset, rotation_stack_offset, scale_stack_offset; | ||||
| svm_unpack_node_uchar4(inputs_stack_offsets, | svm_unpack_node_uchar4(inputs_stack_offsets, | ||||
| &vector_stack_offset, | &vector_stack_offset, | ||||
| &location_stack_offset, | &location_stack_offset, | ||||
| &rotation_stack_offset, | &rotation_stack_offset, | ||||
| &scale_stack_offset); | &scale_stack_offset); | ||||
| float3 vector = stack_load_float3(stack, vector_stack_offset); | float3 vector = stack_load_float3(stack, vector_stack_offset); | ||||
| float3 location = stack_load_float3(stack, location_stack_offset); | float3 location = stack_load_float3(stack, location_stack_offset); | ||||
| float3 rotation = stack_load_float3(stack, rotation_stack_offset); | float3 rotation = stack_load_float3(stack, rotation_stack_offset); | ||||
| float3 scale = stack_load_float3(stack, scale_stack_offset); | float3 scale = stack_load_float3(stack, scale_stack_offset); | ||||
| float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale); | float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale); | ||||
| stack_store_float3(stack, result_stack_offset, result); | stack_store_float3(stack, result_stack_offset, result); | ||||
| } | } | ||||
| /* Texture Mapping */ | /* Texture Mapping */ | ||||
| ccl_device void svm_node_texture_mapping( | ccl_device_noinline int svm_node_texture_mapping(const KernelGlobals *kg, | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint vec_offset, uint out_offset, int *offset) | ShaderData *sd, | ||||
| float *stack, | |||||
| uint vec_offset, | |||||
| uint out_offset, | |||||
| int offset) | |||||
| { | { | ||||
| float3 v = stack_load_float3(stack, vec_offset); | float3 v = stack_load_float3(stack, vec_offset); | ||||
| Transform tfm; | Transform tfm; | ||||
| tfm.x = read_node_float(kg, offset); | tfm.x = read_node_float(kg, &offset); | ||||
| tfm.y = read_node_float(kg, offset); | tfm.y = read_node_float(kg, &offset); | ||||
| tfm.z = read_node_float(kg, offset); | tfm.z = read_node_float(kg, &offset); | ||||
| float3 r = transform_point(&tfm, v); | float3 r = transform_point(&tfm, v); | ||||
| stack_store_float3(stack, out_offset, r); | stack_store_float3(stack, out_offset, r); | ||||
| return offset; | |||||
| } | } | ||||
| ccl_device void svm_node_min_max( | ccl_device_noinline int svm_node_min_max(const KernelGlobals *kg, | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint vec_offset, uint out_offset, int *offset) | ShaderData *sd, | ||||
| float *stack, | |||||
| uint vec_offset, | |||||
| uint out_offset, | |||||
| int offset) | |||||
| { | { | ||||
| float3 v = stack_load_float3(stack, vec_offset); | float3 v = stack_load_float3(stack, vec_offset); | ||||
| float3 mn = float4_to_float3(read_node_float(kg, offset)); | float3 mn = float4_to_float3(read_node_float(kg, &offset)); | ||||
| float3 mx = float4_to_float3(read_node_float(kg, offset)); | float3 mx = float4_to_float3(read_node_float(kg, &offset)); | ||||
| float3 r = min(max(mn, v), mx); | float3 r = min(max(mn, v), mx); | ||||
| stack_store_float3(stack, out_offset, r); | stack_store_float3(stack, out_offset, r); | ||||
| return offset; | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||