From bf511b88afb6b3ae1e803c36a5f67369d126b535 Mon Sep 17 00:00:00 2001 From: Maik Schulze Date: Sun, 1 Mar 2020 15:05:14 +0100 Subject: [PATCH 1/4] Fix SSE2.update and further verify tests with EMBREE_RAY_PACKETS=OFF To test this, run 'verify' with the arguments '--run .*SSE2.update.* --sequential' --- kernels/common/rtcore.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/kernels/common/rtcore.cpp b/kernels/common/rtcore.cpp index 0fc8541c62..946acc7d4b 100644 --- a/kernels/common/rtcore.cpp +++ b/kernels/common/rtcore.cpp @@ -481,12 +481,12 @@ RTC_NAMESPACE_BEGIN; IntersectContext context(scene,user_context); #if !defined(EMBREE_RAY_PACKETS) - Ray4* ray4 = (Ray4*) rayhit; + RayHit4* rayhit4 = (RayHit4*)rayhit; for (size_t i=0; i<4; i++) { if (!valid[i]) continue; - RayHit ray1; ray4->get(i,ray1); + RayHit ray1; rayhit4->get(i,ray1); scene->intersectors.intersect((RTCRayHit&)ray1,&context); - ray4->set(i,ray1); + rayhit4->set(i,ray1); } #else scene->intersectors.intersect4(valid,*rayhit,&context); @@ -512,12 +512,12 @@ RTC_NAMESPACE_BEGIN; IntersectContext context(scene,user_context); #if !defined(EMBREE_RAY_PACKETS) - Ray8* ray8 = (Ray8*) rayhit; + RayHit8* rayhit8 = (RayHit8*) rayhit; for (size_t i=0; i<8; i++) { if (!valid[i]) continue; - RayHit ray1; ray8->get(i,ray1); + RayHit ray1; rayhit8->get(i,ray1); scene->intersectors.intersect((RTCRayHit&)ray1,&context); - ray8->set(i,ray1); + rayhit8->set(i,ray1); } #else if (likely(scene->intersectors.intersector8)) @@ -545,12 +545,12 @@ RTC_NAMESPACE_BEGIN; IntersectContext context(scene,user_context); #if !defined(EMBREE_RAY_PACKETS) - Ray16* ray16 = (Ray16*) rayhit; + RayHit16* rayhit16 = (RayHit16*) rayhit; for (size_t i=0; i<16; i++) { if (!valid[i]) continue; - RayHit ray1; ray16->get(i,ray1); + RayHit ray1; rayhit16->get(i,ray1); scene->intersectors.intersect((RTCRayHit&)ray1,&context); - ray16->set(i,ray1); + rayhit16->set(i,ray1); } #else if (likely(scene->intersectors.intersector16)) @@ -732,12 +732,12 @@ RTC_NAMESPACE_BEGIN; IntersectContext context(scene,user_context); #if !defined(EMBREE_RAY_PACKETS) - RayHit4* ray4 = (RayHit4*) ray; + Ray4* ray4 = (Ray4*) ray; for (size_t i=0; i<4; i++) { if (!valid[i]) continue; - RayHit ray1; ray4->get(i,ray1); + Ray ray1; ray4->get(i,ray1); scene->intersectors.occluded((RTCRay&)ray1,&context); - ray4->geomID[i] = ray1.geomID; + ray4->set(i,ray1); } #else scene->intersectors.occluded4(valid,*ray,&context); @@ -763,10 +763,10 @@ RTC_NAMESPACE_BEGIN; IntersectContext context(scene,user_context); #if !defined(EMBREE_RAY_PACKETS) - RayHit8* ray8 = (RayHit8*) ray; + Ray8* ray8 = (Ray8*) ray; for (size_t i=0; i<8; i++) { if (!valid[i]) continue; - RayHit ray1; ray8->get(i,ray1); + Ray ray1; ray8->get(i,ray1); scene->intersectors.occluded((RTCRay&)ray1,&context); ray8->set(i,ray1); } @@ -797,10 +797,10 @@ RTC_NAMESPACE_BEGIN; IntersectContext context(scene,user_context); #if !defined(EMBREE_RAY_PACKETS) - RayHit16* ray16 = (RayHit16*) ray; + Ray16* ray16 = (Ray16*) ray; for (size_t i=0; i<16; i++) { if (!valid[i]) continue; - RayHit ray1; ray16->get(i,ray1); + Ray ray1; ray16->get(i,ray1); scene->intersectors.occluded((RTCRay&)ray1,&context); ray16->set(i,ray1); } From 9420298929ce5bbaad1f8220e170caae4c8b8479 Mon Sep 17 00:00:00 2001 From: Maik Schulze Date: Sun, 1 Mar 2020 15:06:25 +0100 Subject: [PATCH 2/4] Fix immediate fail of 'SSE2.ray_masks' verify test. --- tutorials/verify/verify.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tutorials/verify/verify.cpp b/tutorials/verify/verify.cpp index 62dde5b848..3535593d18 100644 --- a/tutorials/verify/verify.cpp +++ b/tutorials/verify/verify.cpp @@ -2544,6 +2544,10 @@ namespace embree rtcSetGeometryMask(hgeom1,2); rtcSetGeometryMask(hgeom2,4); rtcSetGeometryMask(hgeom3,8); + rtcCommitGeometry(hgeom0); + rtcCommitGeometry(hgeom1); + rtcCommitGeometry(hgeom2); + rtcCommitGeometry(hgeom3); rtcCommitScene (scene); AssertNoError(device); From 5a6ebd81e9c05761b490c64d7c4fbaf9fbbf2af6 Mon Sep 17 00:00:00 2001 From: Maik Schulze Date: Sun, 1 Mar 2020 21:02:25 +0100 Subject: [PATCH 3/4] Fix SphereFilterMultiHitTest by setting inactive mask in order to not filter out the computed hits in the epilog function. Note that RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED is not fully functional and appears to be always disabled in the intersector. Hence, the test will still fail when compiling with RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED=OFF (reporting 4 instead of 2 hits) --- tutorials/verify/verify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/verify/verify.cpp b/tutorials/verify/verify.cpp index 3535593d18..ebc2162b4e 100644 --- a/tutorials/verify/verify.cpp +++ b/tutorials/verify/verify.cpp @@ -3966,7 +3966,7 @@ namespace embree rayHit.ray.dir_z = 1; rayHit.ray.tnear = 0; rayHit.ray.tfar = 100000; - rayHit.ray.mask = 0u; + rayHit.ray.mask = -1; rayHit.ray.flags = 0u; rayHit.hit.geomID = RTC_INVALID_GEOMETRY_ID; rayHit.hit.instID[0] = RTC_INVALID_GEOMETRY_ID; From 128ed96d7e9d8c9c8f70358cdbddb143624a1d94 Mon Sep 17 00:00:00 2001 From: Maik Schulze Date: Mon, 2 Mar 2020 07:22:39 +0100 Subject: [PATCH 4/4] Fix the failure of the RayMasksTest which has accessed unwritten 'hit' information on rtcOccluded. This information is only written on rtcIntersect. We blindly pass these cases. --- tutorials/verify/verify.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/tutorials/verify/verify.cpp b/tutorials/verify/verify.cpp index ebc2162b4e..7996506244 100644 --- a/tutorials/verify/verify.cpp +++ b/tutorials/verify/verify.cpp @@ -2564,8 +2564,27 @@ namespace embree RTCRayHit ray3 = makeRay(pos3+Vec3fa(0,10,0),Vec3fa(0,-1,0)); ray3.ray.mask = mask3; RTCRayHit rays[4] = { ray0, ray1, ray2, ray3 }; IntersectWithMode(imode,ivariant,scene,rays,4); - for (size_t j=0; j<4; j++) - passed &= masks[j] & (1<