| 5813 | } |
| 5814 | |
| 5815 | void render_block(size_t i, size_t) |
| 5816 | { |
| 5817 | float rcpWidth = 1.0f/width; |
| 5818 | float rcpHeight = 1.0/height; |
| 5819 | const size_t tileY = i / numTilesX; |
| 5820 | const size_t tileX = i - tileY * numTilesX; |
| 5821 | const size_t x0 = tileX * tileSizeX; |
| 5822 | const size_t x1 = min(x0 + tileSizeX, width); |
| 5823 | const size_t y0 = tileY * tileSizeY; |
| 5824 | const size_t y1 = min(y0 + tileSizeY, height); |
| 5825 | |
| 5826 | RTCRayQueryContext context; |
| 5827 | rtcInitRayQueryContext(&context); |
| 5828 | |
| 5829 | RTCIntersectArguments args; |
| 5830 | rtcInitIntersectArguments(&args); |
| 5831 | args.context = &context; |
| 5832 | args.flags = ((ivariant & VARIANT_COHERENT_INCOHERENT_MASK) == VARIANT_COHERENT) ? RTC_RAY_QUERY_FLAG_COHERENT : RTC_RAY_QUERY_FLAG_INCOHERENT; |
| 5833 | |
| 5834 | switch (imode) |
| 5835 | { |
| 5836 | case MODE_INTERSECT1: |
| 5837 | { |
| 5838 | for (size_t y=y0; y<y1; y++) { |
| 5839 | for (size_t x=x0; x<x1; x++) { |
| 5840 | RTCRayHit ray = fastMakeRay(zero,Vec3f(float(x)*rcpWidth,1,float(y)*rcpHeight)); |
| 5841 | switch (ivariant & VARIANT_INTERSECT_OCCLUDED_MASK) { |
| 5842 | case VARIANT_INTERSECT: rtcIntersect1(*scene,&ray,&args); break; |
| 5843 | case VARIANT_OCCLUDED : rtcOccluded1 (*scene,(RTCRay*)&ray,(RTCOccludedArguments*)&args); break; |
| 5844 | } |
| 5845 | } |
| 5846 | } |
| 5847 | break; |
| 5848 | } |
| 5849 | case MODE_INTERSECT4: |
| 5850 | { |
| 5851 | for (size_t y=y0; y<y1; y+=2) { |
| 5852 | for (size_t x=x0; x<x1; x+=2) { |
| 5853 | RTCRayHit4 ray4; |
| 5854 | for (size_t dy=0; dy<2; dy++) { |
| 5855 | for (size_t dx=0; dx<2; dx++) { |
| 5856 | setRay(ray4,2*dy+dx,fastMakeRay(zero,Vec3f(float(x+dx)*rcpWidth,1,float(y+dy)*rcpHeight))); |
| 5857 | } |
| 5858 | } |
| 5859 | __aligned(16) int valid4[4] = { -1,-1,-1,-1 }; |
| 5860 | switch (ivariant & VARIANT_INTERSECT_OCCLUDED_MASK) { |
| 5861 | case VARIANT_INTERSECT: rtcIntersect4(valid4,*scene,&ray4,&args); break; |
| 5862 | case VARIANT_OCCLUDED : rtcOccluded4 (valid4,*scene,(RTCRay4*)&ray4,(RTCOccludedArguments*)&args); break; |
| 5863 | } |
| 5864 | } |
| 5865 | } |
| 5866 | break; |
| 5867 | } |
| 5868 | case MODE_INTERSECT8: |
| 5869 | { |
| 5870 | for (size_t y=y0; y<y1; y+=4) { |
| 5871 | for (size_t x=x0; x<x1; x+=2) { |
| 5872 | RTCRayHit8 ray8; |
nothing calls this directly
no test coverage detected