19#ifdef __SHADER_RAYTRACE__
21# ifdef __KERNEL_OPTIX__
22extern "C" __device__ float __direct_callable__svm_node_ao(
31 const int num_samples,
35 max_dist =
kernel_data.integrator.ao_bounces_distance;
39 if (max_dist <= 0.0f || num_samples < 1 || sd->
object ==
OBJECT_NONE) {
83 if (!scene_intersect_local(kg, &ray,
nullptr, sd->object,
nullptr, 0)) {
94 return ((
float)unoccluded) / num_samples;
97template<u
int node_feature_mask,
typename ConstIntegratorGenericState>
98# if defined(__KERNEL_OPTIX__)
105 ConstIntegratorGenericState
state,
117 uint out_color_offset;
129# ifdef __KERNEL_OPTIX__
130 ao = optixDirectCall<float>(0, kg,
state, sd, normal, dist, samples, flags);
132 ao = svm_ao(kg,
state, sd, normal, dist, samples, flags);
MINLINE float safe_sqrtf(float a)
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
ccl_device_inline void stack_store_float(ccl_private float *stack, const uint a, const float f)
ccl_device_inline void stack_store_float3(ccl_private float *stack, const uint a, const float3 f)
ccl_device_inline float stack_load_float_default(const ccl_private float *stack, const uint a, const uint value)
ccl_device_forceinline void svm_unpack_node_uchar3(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z)
ccl_device_forceinline void svm_unpack_node_uchar4(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z, ccl_private uint *w)
ccl_device_inline bool stack_valid(const uint a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(const ccl_private float *stack, const uint a)
ccl_device_inline T to_global(const float2 p, const T X, const T Y)
#define IF_KERNEL_NODES_FEATURE(feature)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define ccl_device_noinline
#define CCL_NAMESPACE_END
ccl_device_forceinline float differential_zero_compact()
ccl_device_intersect bool scene_intersect_shadow(KernelGlobals kg, const ccl_private Ray *ray, const uint visibility)
ccl_device_inline float2 safe_normalize(const float2 a)
ccl_device_inline void make_orthonormals(const float3 N, ccl_private float3 *a, ccl_private float3 *b)
ccl_device_inline void path_state_rng_load(ConstIntegratorState state, ccl_private RNGState *rng_state)
ccl_device_inline float2 path_branched_rng_2D(KernelGlobals kg, const ccl_private RNGState *rng_state, const int branch, const int num_branches, const int dimension)
CCL_NAMESPACE_BEGIN ccl_device float2 sample_uniform_disk(const float2 rand)
const IntegratorStateCPU * ConstIntegratorState