Blender  V3.3
normal.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
7 
10  ccl_private float *stack,
11  uint in_normal_offset,
12  uint out_normal_offset,
13  uint out_dot_offset,
14  int offset)
15 {
16  /* read extra data */
17  uint4 node1 = read_node(kg, &offset);
18  float3 normal = stack_load_float3(stack, in_normal_offset);
19 
20  float3 direction;
21  direction.x = __int_as_float(node1.x);
22  direction.y = __int_as_float(node1.y);
23  direction.z = __int_as_float(node1.z);
24  direction = normalize(direction);
25 
26  if (stack_valid(out_normal_offset))
27  stack_store_float3(stack, out_normal_offset, direction);
28 
29  if (stack_valid(out_dot_offset))
30  stack_store_float(stack, out_dot_offset, dot(direction, normalize(normal)));
31  return offset;
32 }
33 
unsigned int uint
Definition: BLI_sys_types.h:67
#define ccl_private
Definition: cuda/compat.h:48
#define ccl_device_noinline
Definition: cuda/compat.h:40
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
const KernelGlobalsCPU *ccl_restrict KernelGlobals
IconTextureDrawCall normal
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
ccl_device_inline void stack_store_float3(ccl_private float *stack, uint a, float3 f)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(ccl_private float *stack, uint a)
ccl_device_inline uint4 read_node(KernelGlobals kg, ccl_private int *offset)
ccl_device_inline void stack_store_float(ccl_private float *stack, uint a, float f)
ccl_device_inline bool stack_valid(uint a)
ShaderData
Definition: kernel/types.h:925
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
vec_base< T, Size > normalize(const vec_base< T, Size > &v)
CCL_NAMESPACE_BEGIN ccl_device_noinline int svm_node_normal(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint in_normal_offset, uint out_normal_offset, uint out_dot_offset, int offset)
Definition: normal.h:8
float z
float y
float x
uint x
Definition: types_uint4.h:15
uint y
Definition: types_uint4.h:15
uint z
Definition: types_uint4.h:15
ccl_device_inline float __int_as_float(int i)
Definition: util/math.h:253