| 3819 | : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} |
| 3820 | |
| 3821 | VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) |
| 3822 | { |
| 3823 | std::string cfg = state->rtcore + ",isa="+stringOfISA(isa); |
| 3824 | RTCDeviceRef device = rtcNewDevice(cfg.c_str()); |
| 3825 | errorHandler(nullptr,rtcGetDeviceError(device)); |
| 3826 | |
| 3827 | bool ok = false; |
| 3828 | for (size_t i=0; i<10 && !ok; i++) |
| 3829 | { |
| 3830 | const size_t numRays = 1000; |
| 3831 | RTCRayHit rays[numRays]; |
| 3832 | VerifyScene scene(device,sflags); |
| 3833 | scene.addSphere(sampler,quality,zero,2.0f,100); |
| 3834 | scene.addHair (sampler,quality,zero,1.0f,1.0f,100); |
| 3835 | rtcCommitScene (scene); |
| 3836 | |
| 3837 | double c0 = getSeconds(); |
| 3838 | for (size_t i=0; i<numRays; i++) { |
| 3839 | Vec3fa org = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3840 | Vec3fa dir = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3841 | rays[i] = makeRay(org,dir); |
| 3842 | } |
| 3843 | IntersectWithMode(imode,ivariant,scene,rays,numRays); |
| 3844 | |
| 3845 | double c1 = getSeconds(); |
| 3846 | for (size_t i=0; i<numRays; i++) { |
| 3847 | Vec3fa org = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3848 | Vec3fa dir = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3849 | rays[i] = makeRay(org+Vec3fa(nan),dir); |
| 3850 | } |
| 3851 | IntersectWithMode(imode,ivariant,scene,rays,numRays); |
| 3852 | |
| 3853 | double c2 = getSeconds(); |
| 3854 | for (size_t i=0; i<numRays; i++) { |
| 3855 | Vec3fa org = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3856 | Vec3fa dir = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3857 | rays[i] = makeRay(org+Vec3fa(nan),dir+Vec3fa(nan)); |
| 3858 | } |
| 3859 | IntersectWithMode(imode,ivariant,scene,rays,numRays); |
| 3860 | |
| 3861 | double c3 = getSeconds(); |
| 3862 | for (size_t i=0; i<numRays; i++) { |
| 3863 | Vec3fa org = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3864 | Vec3fa dir = 2.0f*random_Vec3fa() - Vec3fa(1.0f); |
| 3865 | rays[i] = makeRay(org,dir,nan,nan); |
| 3866 | } |
| 3867 | IntersectWithMode(imode,ivariant,scene,rays,numRays); |
| 3868 | |
| 3869 | double c4 = getSeconds(); |
| 3870 | double d1 = c1-c0; |
| 3871 | double d2 = c2-c1; |
| 3872 | double d3 = c3-c2; |
| 3873 | double d4 = c4-c3; |
| 3874 | AssertNoError(device); |
| 3875 | |
| 3876 | ok = (d2 < 2.5*d1) && (d3 < 2.5*d1) && (d4 < 2.5*d1); |
| 3877 | double f = max(d2/d1,d3/d1,d4/d1); |
| 3878 | if (!silent) { printf(" (%3.2fx)",f); fflush(stdout); } |
nothing calls this directly
no test coverage detected