#include "kernel/osl/osl_globals.h"
#include "render/buffers.h"
+#include "render/coverage.h"
#include "util/util_debug.h"
#include "util/util_foreach.h"
void path_trace(DeviceTask &task, RenderTile &tile, KernelGlobals *kg)
{
+ const bool use_coverage = kernel_data.film.cryptomatte_passes & CRYPT_ACCURATE;
+
scoped_timer timer(&tile.buffers->render_time);
+ Coverage coverage(kg, tile);
+ if(use_coverage) {
+ coverage.init_path_trace();
+ }
+
float *render_buffer = (float*)tile.buffer;
int start_sample = tile.start_sample;
int end_sample = tile.start_sample + tile.num_samples;
for(int y = tile.y; y < tile.y + tile.h; y++) {
for(int x = tile.x; x < tile.x + tile.w; x++) {
+ if(use_coverage) {
+ coverage.init_pixel(x, y);
+ }
path_trace_kernel()(kg, render_buffer,
sample, x, y, tile.offset, tile.stride);
}
task.update_progress(&tile, tile.w*tile.h);
}
+ if(use_coverage) {
+ coverage.finalize();
+ }
}
void denoise(DenoisingTask& denoising, RenderTile &tile)
}
else if(tile.task == RenderTile::DENOISE) {
denoise(denoising, tile);
-
task.update_progress(&tile, tile.w*tile.h);
}