| 2477 | } |
| 2478 | |
| 2479 | VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) |
| 2480 | { |
| 2481 | std::string cfg = state->rtcore + ",isa="+stringOfISA(isa); |
| 2482 | RTCDeviceRef device = rtcNewDevice(cfg.c_str()); |
| 2483 | errorHandler(nullptr,rtcGetDeviceError(device)); |
| 2484 | |
| 2485 | Vec3f vertices[4] = { |
| 2486 | Vec3f(0.0f,0.0f,0.0f), |
| 2487 | Vec3f(1.0f,0.0f,0.0f), |
| 2488 | Vec3f(0.0f,1.0f,0.0f), |
| 2489 | Vec3f(zero) // dummy vertex for 16 byte padding |
| 2490 | }; |
| 2491 | Triangle triangles[1] = { |
| 2492 | Triangle(0,1,2) |
| 2493 | }; |
| 2494 | RTCSceneRef scene = rtcNewScene(device); |
| 2495 | rtcSetSceneFlags(scene,sflags.sflags); |
| 2496 | rtcSetSceneBuildQuality(scene,sflags.qflags); |
| 2497 | |
| 2498 | RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_TRIANGLE); |
| 2499 | rtcSetGeometryBuildQuality(geom,quality); |
| 2500 | rtcSetSharedGeometryBuffer(geom, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, vertices , 0, sizeof(Vec3f), 3); |
| 2501 | rtcSetSharedGeometryBuffer(geom, RTC_BUFFER_TYPE_INDEX , 0, RTC_FORMAT_UINT3, triangles, 0, sizeof(Triangle), 1); |
| 2502 | rtcCommitGeometry(geom); |
| 2503 | rtcAttachGeometry(scene,geom); |
| 2504 | rtcReleaseGeometry(geom); |
| 2505 | rtcCommitScene (scene); |
| 2506 | AssertNoError(device); |
| 2507 | |
| 2508 | float u[256], v[256]; |
| 2509 | RTCRayHit rays[256]; |
| 2510 | for (size_t i=0; i<256; i++) |
| 2511 | { |
| 2512 | u[i] = random_float(); |
| 2513 | v[i] = random_float(); |
| 2514 | Vec3fa from(0.0f,0.0f,-1.0f); |
| 2515 | Vec3fa to = uniformSampleTriangle(vertices[1],vertices[2],vertices[0],u[i],v[i]); |
| 2516 | rays[i] = makeRay(from,to-from); |
| 2517 | } |
| 2518 | IntersectWithMode(imode,ivariant,scene,rays,256); |
| 2519 | |
| 2520 | for (size_t i=0; i<256; i++) |
| 2521 | { |
| 2522 | |
| 2523 | if (!(ivariant & VARIANT_INTERSECT)) |
| 2524 | { |
| 2525 | if (rays[i].ray.tfar != float(neg_inf)) return VerifyApplication::FAILED; |
| 2526 | continue; |
| 2527 | } |
| 2528 | |
| 2529 | |
| 2530 | if (rays[i].hit.geomID != 0) return VerifyApplication::FAILED; |
| 2531 | if (rays[i].hit.primID != 0) return VerifyApplication::FAILED; |
| 2532 | if (abs(rays[i].hit.u - u[i]) > 16.0f*float(ulp)) return VerifyApplication::FAILED; |
| 2533 | if (abs(rays[i].hit.v - v[i]) > 16.0f*float(ulp)) return VerifyApplication::FAILED; |
| 2534 | if (abs(rays[i].ray.tfar - 1.0f) > 16.0f*float(ulp)) return VerifyApplication::FAILED; |
| 2535 | const Vec3fa org(rays[i].ray.org_x,rays[i].ray.org_y,rays[i].ray.org_z); |
| 2536 | const Vec3fa dir(rays[i].ray.dir_x,rays[i].ray.dir_y,rays[i].ray.dir_z); |
nothing calls this directly
no test coverage detected