MCPcopy Create free account
hub / github.com/RenderKit/embree / intersect_instance

Function intersect_instance

kernels/sycl/rthwif_embree.cpp:220–283  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

218
219template<>
220__forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array, const RTCFeatureFlags feature_mask)
221{
222 /* perform ray mask test */
223#if defined(EMBREE_RAY_MASK)
224 if ((ray.mask & geom->mask) == 0)
225 return false;
226#endif
227
228 if (!instance_id_stack::push(context->user, geomID, primID))
229 return false;
230
231#if RTC_MAX_INSTANCE_LEVEL_COUNT > 1
232 unsigned int bvh_level = intel_get_hit_bvh_level( query, intel_hit_type_potential_hit );
233#else
234 constexpr unsigned int bvh_level = 0;
235#endif
236
237 Scene* object = instance_array
238 ? (Scene*) ((InstanceArray*)geom)->getObject(primID)
239 : (Scene*) ((Instance*)geom)->object;
240 if (!object) return false;
241
242 AffineSpace3fa world2local;
243 if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
244 world2local =
245 instance_array
246 ? ((InstanceArray *)geom)->getWorld2Local(primID, ray.time())
247 : ((Instance *)geom)->getWorld2Local(ray.time());
248 } else {
249 world2local =
250 instance_array
251 ? ((InstanceArray *)geom)->getWorld2Local(primID)
252 : ((Instance *)geom)->getWorld2Local();
253 }
254
255 const Vec3fa ray_org = xfmPoint (world2local, (Vec3f) ray.org);
256 const Vec3fa ray_dir = xfmVector(world2local, (Vec3f) ray.dir);
257 scenes.set(bvh_level+1, object);
258
259 intel_ray_desc_t raydesc;
260 raydesc.origin = float3(ray_org.x, ray_org.y, ray_org.z);
261 raydesc.direction = float3(ray_dir.x, ray_dir.y, ray_dir.z);
262 raydesc.tmin = ray.tnear();
263 raydesc.tmax = inf; // unused
264 raydesc.mask = mask32_to_mask8(ray.mask);
265 raydesc.flags = intel_ray_flags_force_non_opaque;
266
267#if defined(EMBREE_BACKFACE_CULLING)
268 raydesc.flags |= intel_ray_flags_cull_back_facing_triangles;
269#endif
270
271 uint32_t bvh_id = 0;
272 if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
273 float time = clamp(ray.time(),0.0f,1.0f);
274 uint32_t numTimeSegments = object->getMaxTimeSegments();
275 bvh_id = (uint32_t) clamp(uint32_t(numTimeSegments*time), 0u, numTimeSegments-1);
276 }
277

Callers 1

intersect_primitiveFunction · 0.85

Calls 14

pushFunction · 0.85
intel_get_hit_bvh_levelFunction · 0.85
mask32_to_mask8Function · 0.85
getObjectMethod · 0.80
timeMethod · 0.80
tnearMethod · 0.80
getHWAccelMethod · 0.80
xfmPointFunction · 0.50
xfmVectorFunction · 0.50
clampFunction · 0.50

Tested by

no test coverage detected