18 const uint visibility,
35 SET_HIPRT_RAY(ray_hip, ray)
38 payload.self = ray->self;
40 payload.visibility = visibility;
42 payload.ray_time = ray->time;
49 GET_TRAVERSAL_ANY_HIT(table_closest_intersect, 0, ray->time)
50 hit = traversal.getNextHit();
53 GET_TRAVERSAL_CLOSEST_HIT(table_closest_intersect, 0, ray->time)
54 hit = traversal.getNextHit();
57 set_intersect_point(kg, hit, isect);
58 if (isect->type > 1) {
59 isect->type = payload.prim_type;
60 isect->prim = hit.primID;
69 const uint visibility)
76template<
bool single_hit = false>
86 local_isect->num_hits = 0;
95 if (local_isect !=
NULL) {
96 local_isect->num_hits = 0;
102# if BVH_FEATURE(BVH_MOTION)
103 bvh_instance_motion_push(kg, local_object, ray, &
P, &dir, &idir);
111 ray_hip.direction = dir;
112 ray_hip.maxT = ray->tmax;
113 ray_hip.minT = ray->tmin;
115 LocalPayload payload = {0};
117 payload.self = ray->self;
118 payload.local_object = local_object;
119 payload.max_hits = max_hits;
120 payload.lcg_state = lcg_state;
121 payload.local_isect = local_isect;
123 GET_TRAVERSAL_STACK()
127# ifdef HIPRT_SHARED_STACK
128 hiprtGeomTraversalAnyHitCustomStack<Stack> traversal((hiprtGeometry)local_geom,
131 hiprtTraversalHintDefault,
133 kernel_params.table_local_intersect,
136 hiprtGeomTraversalAnyHit traversal(
137 local_geom, ray_hip, table, hiprtTraversalHintDefault, &payload);
139 hiprtHit hit = traversal.getNextHit();
144#ifdef __SHADOW_RECORD_ALL__
154 *num_recorded_hits = 0;
162 SET_HIPRT_RAY(ray_hip, ray)
163 ShadowPayload payload;
165 payload.self = ray->self;
166 payload.in_state =
state;
167 payload.max_hits = max_hits;
168 payload.visibility = visibility;
170 payload.ray_time = ray->time;
171 payload.num_hits = 0;
172 payload.r_num_recorded_hits = num_recorded_hits;
173 payload.r_throughput = throughput;
174 GET_TRAVERSAL_STACK()
175 GET_TRAVERSAL_ANY_HIT(table_shadow_intersect, 1, ray->time)
176 hiprtHit hit = traversal.getNextHit();
177 num_recorded_hits = payload.r_num_recorded_hits;
178 throughput = payload.r_throughput;
187 const uint visibility)
189 isect->t = ray->tmax;
202 SET_HIPRT_RAY(ray_hip, ray)
205 payload.self = ray->self;
207 payload.visibility = visibility;
209 payload.ray_time = ray->time;
211 GET_TRAVERSAL_STACK()
213 GET_TRAVERSAL_CLOSEST_HIT(table_volume_intersect, 3, ray->time)
214 hiprtHit hit = traversal.getNextHit();
217 set_intersect_point(kg, hit, isect);
218 if (isect->type > 1) {
219 isect->type = payload.prim_type;
220 isect->prim = hit.primID;
return(oflags[bm->toolflag_index].f &oflag) !=0
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ccl_device_inline
#define CCL_NAMESPACE_END
#define ccl_device_intersect
ccl_device_intersect bool scene_intersect(KernelGlobals kg, ccl_private const Ray *ray, const uint visibility, ccl_private Intersection *isect)
ccl_device_intersect bool scene_intersect_shadow(KernelGlobals kg, ccl_private const Ray *ray, const uint visibility)
CCL_NAMESPACE_BEGIN ccl_device_inline bool scene_intersect_valid(ccl_private const Ray *ray)
ccl_device_inline void bvh_instance_push(KernelGlobals kg, int object, ccl_private const Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_clamp_direction(float3 dir)
ccl_device_inline float3 bvh_inverse_direction(float3 dir)
@ SD_OBJECT_TRANSFORM_APPLIED
ccl_device_inline float len_squared(const float2 a)
IntegratorShadowStateCPU *ccl_restrict IntegratorShadowState
ccl_device_inline bool isfinite_safe(float f)