void sample_primary_rays(const Camera &camera, const BufferView<CameraSample> &samples, BufferView<Ray> rays, BufferView<RayDifferential> ray_differentials, bool use_gpu) { parallel_for(primary_ray_sampler{ camera, samples.begin(), rays.begin(), ray_differentials.begin()}, samples.size(), use_gpu); }
void update_active_pixels(const BufferView<int> &active_pixels, const BufferView<Intersection> &isects, BufferView<int> &new_active_pixels, bool use_gpu) { auto op = is_valid_intersection{isects.begin()}; auto new_end = DISPATCH(use_gpu, thrust::copy_if, active_pixels.begin(), active_pixels.end(), new_active_pixels.begin(), op); new_active_pixels.count = new_end - new_active_pixels.begin(); }
void init_active_pixels(const BufferView<Ray> &rays, BufferView<int> &active_pixels, bool use_gpu, ThrustCachedAllocator &thrust_alloc) { assert(rays.size() == active_pixels.size()); DISPATCH(use_gpu, thrust::sequence, active_pixels.begin(), active_pixels.end()); auto op = is_invalid_ray{rays.begin()}; auto new_end = DISPATCH_CACHED(use_gpu, thrust_alloc, thrust::remove_if, active_pixels.begin(), active_pixels.end(), active_pixels.begin(), op); active_pixels.count = new_end - active_pixels.begin(); }
void accumulate_roughness(const Scene &scene, const BufferView<DTexture1> &d_roughness_texs, BufferView<DMaterial> d_materials) { parallel_for(roughness_accumulator{d_roughness_texs.begin(), d_materials.begin()}, d_roughness_texs.size(), scene.use_gpu); }
void accumulate_specular(const Scene &scene, const BufferView<DTexture3> &d_specular_texs, BufferView<DMaterial> d_materials) { parallel_for(specular_accumulator{d_specular_texs.begin(), d_materials.begin()}, d_specular_texs.size(), scene.use_gpu); }