Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_normal.h
| Show All 10 Lines | |||||
| * distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | ||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| * 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 | ||||
| ccl_device void svm_node_normal(KernelGlobals *kg, | ccl_device_noinline int svm_node_normal(const KernelGlobals *kg, | ||||
| ShaderData *sd, | ShaderData *sd, | ||||
| float *stack, | float *stack, | ||||
| uint in_normal_offset, | uint in_normal_offset, | ||||
| uint out_normal_offset, | uint out_normal_offset, | ||||
| uint out_dot_offset, | uint out_dot_offset, | ||||
| int *offset) | int offset) | ||||
| { | { | ||||
| /* read extra data */ | /* read extra data */ | ||||
| uint4 node1 = read_node(kg, offset); | uint4 node1 = read_node(kg, &offset); | ||||
| float3 normal = stack_load_float3(stack, in_normal_offset); | float3 normal = stack_load_float3(stack, in_normal_offset); | ||||
| float3 direction; | float3 direction; | ||||
| direction.x = __int_as_float(node1.x); | direction.x = __int_as_float(node1.x); | ||||
| direction.y = __int_as_float(node1.y); | direction.y = __int_as_float(node1.y); | ||||
| direction.z = __int_as_float(node1.z); | direction.z = __int_as_float(node1.z); | ||||
| direction = normalize(direction); | direction = normalize(direction); | ||||
| if (stack_valid(out_normal_offset)) | if (stack_valid(out_normal_offset)) | ||||
| stack_store_float3(stack, out_normal_offset, direction); | stack_store_float3(stack, out_normal_offset, direction); | ||||
| if (stack_valid(out_dot_offset)) | if (stack_valid(out_dot_offset)) | ||||
| stack_store_float(stack, out_dot_offset, dot(direction, normalize(normal))); | stack_store_float(stack, out_dot_offset, dot(direction, normalize(normal))); | ||||
| return offset; | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||