18 const uint visibility,
38 SET_HIPRT_RAY(ray_hip, ray)
41 payload.self = ray->self;
43 payload.visibility = visibility;
45 payload.ray_time = ray->time;
52 GET_TRAVERSAL_ANY_HIT(table_closest_intersect, 0, ray->time)
53 hit = traversal.getNextHit();
56 GET_TRAVERSAL_CLOSEST_HIT(table_closest_intersect, 0, ray->time)
57 hit = traversal.getNextHit();
61 set_intersect_point(kg, hit, isect);
62 if (isect->type > 1) {
63 isect->type = payload.prim_type;
64 isect->prim = hit.primID;
74 const uint visibility)
81template<
bool single_hit = false>
85 const int local_object,
89 if (local_isect !=
nullptr) {
90 local_isect->num_hits = 0;
97 const int primitive_type =
kernel_data_fetch(objects, local_object).primitive_type;
111# if BVH_FEATURE(BVH_MOTION)
112 bvh_instance_motion_push(kg, local_object, ray, &
P, &dir, &idir);
120 ray_hip.direction = dir;
121 ray_hip.maxT = ray->tmax;
122 ray_hip.minT = ray->tmin;
124 LocalPayload payload = {0};
126 payload.self = ray->self;
127 payload.ray_time = ray->time;
128 payload.local_object = local_object;
129 payload.max_hits = max_hits;
130 payload.lcg_state = lcg_state;
131 payload.local_isect = local_isect;
133 GET_TRAVERSAL_STACK()
140 hiprtGeomCustomTraversalAnyHitCustomStack<Stack> traversal((hiprtGeometry)local_geom,
143 hiprtTraversalHintDefault,
145 kernel_params.table_local_intersect,
147 hit = traversal.getNextHit();
150 hiprtGeomTraversalAnyHitCustomStack<Stack> traversal((hiprtGeometry)local_geom,
153 hiprtTraversalHintDefault,
155 kernel_params.table_local_intersect,
157 hit = traversal.getNextHit();
164#ifdef __SHADOW_RECORD_ALL__
168 const uint visibility,
169 const uint max_transparent_hits,
174 *num_recorded_hits = 0;
181 SET_HIPRT_RAY(ray_hip, ray)
183 ShadowPayload payload;
185 payload.self = ray->self;
186 payload.visibility = visibility;
188 payload.ray_time = ray->time;
189 payload.in_state =
state;
190 payload.max_transparent_hits = max_transparent_hits;
191 payload.num_transparent_hits = 0;
192 payload.r_num_recorded_hits = num_recorded_hits;
193 payload.r_throughput = throughput;
195 GET_TRAVERSAL_STACK()
196 GET_TRAVERSAL_ANY_HIT(table_shadow_intersect, 1, ray->time)
198 const hiprtHit hit = traversal.getNextHit();
207 const uint visibility)
209 isect->t = ray->tmax;
222 SET_HIPRT_RAY(ray_hip, ray)
225 payload.self = ray->self;
227 payload.visibility = visibility;
229 payload.ray_time = ray->time;
231 GET_TRAVERSAL_STACK()
233 GET_TRAVERSAL_CLOSEST_HIT(table_volume_intersect, 3, ray->time)
234 const hiprtHit hit = traversal.getNextHit();
236 set_intersect_point(kg, hit, isect);
237 if (isect->type > 1) {
238 isect->type = payload.prim_type;
239 isect->prim = hit.primID;
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define CCL_NAMESPACE_END
#define ccl_device_intersect
CCL_NAMESPACE_BEGIN ccl_device_inline bool scene_intersect_valid(const ccl_private Ray *ray)
ccl_device_intersect bool scene_intersect(KernelGlobals kg, const ccl_private Ray *ray, const uint visibility, ccl_private Intersection *isect)
ccl_device_intersect bool scene_intersect_shadow(KernelGlobals kg, const ccl_private Ray *ray, const uint visibility)
ccl_device_inline void bvh_instance_push(KernelGlobals kg, const int object, const ccl_private Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_inverse_direction(const float3 dir)
ccl_device_inline float3 bvh_clamp_direction(const float3 dir)
@ PRIMITIVE_MOTION_TRIANGLE
@ SD_OBJECT_TRANSFORM_APPLIED
ccl_device_inline bool isfinite_safe(const float f)
ccl_device_inline float len_squared(const float2 a)
IntegratorShadowStateCPU * IntegratorShadowState