Skip to content

Commit 7529490

Browse files
committed
Merge branch 'master' into curve_mb_spec_const
2 parents ea4cf0a + 1372ca0 commit 7529490

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

kernels/rtcore_config.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
# define RTC_API_EXTERN_CPP
4040
# undef EMBREE_API_NAMESPACE
4141
#else
42+
# define RTC_NAMESPACE
4243
# define RTC_NAMESPACE_BEGIN
4344
# define RTC_NAMESPACE_END
4445
# define RTC_NAMESPACE_USE

kernels/sycl/rthwif_embree.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,10 @@ __forceinline bool intersect_user_geometry(intel_ray_query_t& query, Ray& ray, U
214214
}
215215

216216
template<typename Ray>
217-
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array);
217+
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array, const RTCFeatureFlags feature_mask);
218218

219219
template<>
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)
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)
221221
{
222222
/* perform ray mask test */
223223
#if defined(EMBREE_RAY_MASK)
@@ -239,9 +239,18 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geo
239239
: (Scene*) ((Instance*)geom)->object;
240240
if (!object) return false;
241241

242-
const AffineSpace3fa world2local = instance_array
243-
? ((InstanceArray*)geom)->getWorld2Local(primID, ray.time())
244-
: ((Instance*)geom)->getWorld2Local(ray.time());
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+
}
245254

246255
const Vec3fa ray_org = xfmPoint (world2local, (Vec3f) ray.org);
247256
const Vec3fa ray_dir = xfmVector(world2local, (Vec3f) ray.dir);
@@ -260,7 +269,7 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geo
260269
#endif
261270

262271
uint32_t bvh_id = 0;
263-
if (context->args->feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
272+
if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
264273
float time = clamp(ray.time(),0.0f,1.0f);
265274
uint32_t numTimeSegments = object->getMaxTimeSegments();
266275
bvh_id = (uint32_t) clamp(uint32_t(numTimeSegments*time), 0u, numTimeSegments-1);
@@ -273,7 +282,7 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geo
273282
}
274283

275284
template<>
276-
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array)
285+
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array, const RTCFeatureFlags feature_mask)
277286
{
278287
/* perform ray mask test */
279288
#if defined(EMBREE_RAY_MASK)
@@ -295,9 +304,18 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geomet
295304
: (Scene*) ((Instance*)geom)->object;
296305
if (!object) return false;
297306

298-
const AffineSpace3fa world2local = instance_array
299-
? ((InstanceArray*)geom)->getWorld2Local(primID, ray.time())
300-
: ((Instance*)geom)->getWorld2Local(ray.time());
307+
AffineSpace3fa world2local;
308+
if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
309+
world2local =
310+
instance_array
311+
? ((InstanceArray *)geom)->getWorld2Local(primID, ray.time())
312+
: ((Instance *)geom)->getWorld2Local(ray.time());
313+
} else {
314+
world2local =
315+
instance_array
316+
? ((InstanceArray *)geom)->getWorld2Local(primID)
317+
: ((Instance *)geom)->getWorld2Local();
318+
}
301319

302320
const Vec3fa ray_org = xfmPoint (world2local, (Vec3f) ray.org);
303321
const Vec3fa ray_dir = xfmVector(world2local, (Vec3f) ray.dir);
@@ -351,7 +369,7 @@ __forceinline bool intersect_primitive(intel_ray_query_t& query, Ray& ray, Scene
351369
#if defined(EMBREE_GEOMETRY_INSTANCE) || defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
352370
if ((feature_mask & RTC_FEATURE_FLAG_INSTANCE) && (geom->getTypeMask() & Geometry::MTY_INSTANCE) ||
353371
(feature_mask & RTC_FEATURE_FLAG_INSTANCE_ARRAY) && (geom->getTypeMask() & Geometry::MTY_INSTANCE_ARRAY)) {
354-
return intersect_instance(query,ray,(Instance*)geom, scenes, context, geomID, primID, geom->getTypeMask() & Geometry::MTY_INSTANCE_ARRAY);
372+
return intersect_instance(query,ray,(Instance*)geom, scenes, context, geomID, primID, geom->getTypeMask() & Geometry::MTY_INSTANCE_ARRAY, feature_mask);
355373
}
356374
#endif
357375

0 commit comments

Comments
 (0)