| 3621 | : VerifyApplication::IntersectTest(name,isa,imode,VARIANT_INTERSECT,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), model(model), pos(pos) {} |
| 3622 | |
| 3623 | VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) |
| 3624 | { |
| 3625 | std::string cfg = state->rtcore + ",isa="+stringOfISA(isa); |
| 3626 | RTCDeviceRef device = rtcNewDevice(cfg.c_str()); |
| 3627 | errorHandler(nullptr,rtcGetDeviceError(device)); |
| 3628 | |
| 3629 | avector<Vec3fa> motion_vector; |
| 3630 | motion_vector.push_back(Vec3fa(0.0f)); |
| 3631 | motion_vector.push_back(Vec3fa(0.0f)); |
| 3632 | |
| 3633 | VerifyScene scene(device,sflags); |
| 3634 | size_t size = state->intensity < 1.0f ? 50 : 200; |
| 3635 | if (model == "sphere.triangles") scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createTriangleSphere(pos,2.0f,size)); |
| 3636 | else if (model == "sphere.quads" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createQuadSphere (pos,2.0f,size)); |
| 3637 | else if (model == "sphere.grids" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createGridSphere (pos,2.0f,size)); |
| 3638 | else if (model == "sphere.subdiv" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createSubdivSphere (pos,2.0f,4,64)); |
| 3639 | else if (model == "plane.triangles" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createTrianglePlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size)); |
| 3640 | else if (model == "plane.quads" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createQuadPlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size)); |
| 3641 | else if (model == "plane.grids" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createGridPlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size)); |
| 3642 | else if (model == "plane.subdiv" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createSubdivPlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size,2)); |
| 3643 | else if (model == "sphere.triangles_mb") scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createTriangleSphere(pos,2.0f,size)->set_motion_vector(motion_vector)); |
| 3644 | else if (model == "sphere.quads_mb" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createQuadSphere (pos,2.0f,size)->set_motion_vector(motion_vector)); |
| 3645 | else if (model == "sphere.grids_mb" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createGridSphere (pos,2.0f,size)->set_motion_vector(motion_vector)); |
| 3646 | else if (model == "plane.triangles_mb" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createTrianglePlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size)->set_motion_vector(motion_vector)); |
| 3647 | else if (model == "plane.quads_mb" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createQuadPlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size)->set_motion_vector(motion_vector)); |
| 3648 | else if (model == "plane.grids_mb" ) scene.addGeometry(RTC_BUILD_QUALITY_MEDIUM,SceneGraph::createGridPlane (Vec3fa(pos.x,-6.0f,-6.0f),Vec3fa(0.0f,0.0f,12.0f),Vec3fa(0.0f,12.0f,0.0f),size,size)->set_motion_vector(motion_vector)); |
| 3649 | else throw std::runtime_error("unsupported mode "+model); |
| 3650 | bool plane = model.compare(0,5,"plane") == 0; |
| 3651 | rtcCommitScene (scene); |
| 3652 | AssertNoError(device); |
| 3653 | |
| 3654 | size_t numTests = 0; |
| 3655 | size_t numFailures = 0; |
| 3656 | for (auto ivariant : state->intersectVariants) |
| 3657 | for (size_t i=0; i<size_t(N*state->intensity); i++) |
| 3658 | { |
| 3659 | for (unsigned int M=1; M<maxStreamSize; M++) |
| 3660 | { |
| 3661 | __aligned(16) RTCRayHit rays[maxStreamSize]; |
| 3662 | for (size_t j=0; j<M; j++) |
| 3663 | { |
| 3664 | if (plane) { |
| 3665 | Vec3fa dir = 2.0f*random_Vec3fa() - Vec3fa(1.0f); dir.x = 1.0f; |
| 3666 | rays[j] = makeRay(Vec3fa(pos.x-3.0f,0.0f,0.0f),dir); |
| 3667 | } else { |
| 3668 | Vec3fa org = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3669 | Vec3fa dir = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3670 | rays[j] = makeRay(pos+org,dir); |
| 3671 | } |
| 3672 | } |
| 3673 | IntersectWithMode(imode,ivariant,scene,rays,M); |
| 3674 | for (unsigned int j=0; j<M; j++) { |
| 3675 | numTests++; |
| 3676 | if (ivariant & VARIANT_INTERSECT) |
| 3677 | numFailures += rays[j].hit.geomID == RTC_INVALID_GEOMETRY_ID; |
| 3678 | else |
| 3679 | numFailures += rays[j].ray.tfar != float(neg_inf); |
| 3680 | } |
nothing calls this directly
no test coverage detected