Fix T51555: Cycles tile count is incorrect when denoising is enabled

Now rendered and denoised tiles are counted and displayed separately.
This commit is contained in:
Lukas Stockner 2017-05-19 03:27:38 +02:00
parent ffd83a34ab
commit a21277b996
Notes: blender-bot 2023-02-14 06:57:57 +01:00
Referenced by issue #51555, Cycles - Tile count is incorrect when denoising is enabled
2 changed files with 28 additions and 11 deletions

View File

@ -479,7 +479,7 @@ void Session::release_tile(RenderTile& rtile)
{
thread_scoped_lock tile_lock(tile_mutex);
progress.add_finished_tile();
progress.add_finished_tile(rtile.task == RenderTile::DENOISE);
bool delete_tile;
@ -912,7 +912,7 @@ void Session::update_status_time(bool show_pause, bool show_done)
int progressive_sample = tile_manager.state.sample;
int num_samples = tile_manager.get_num_effective_samples();
int tile = progress.get_finished_tiles();
int tile = progress.get_rendered_tiles();
int num_tiles = tile_manager.state.num_tiles;
/* update status */
@ -920,11 +920,12 @@ void Session::update_status_time(bool show_pause, bool show_done)
if(!params.progressive) {
const bool is_cpu = params.device.type == DEVICE_CPU;
const bool rendering_finished = (tile == num_tiles);
const bool is_last_tile = (tile + 1) == num_tiles;
substatus = string_printf("Path Tracing Tile %d/%d", tile, num_tiles);
if(device->show_samples() || (is_cpu && is_last_tile)) {
if(!rendering_finished && (device->show_samples() || (is_cpu && is_last_tile))) {
/* Some devices automatically support showing the sample number:
* - CUDADevice
* - OpenCLDevice when using the megakernel (the split kernel renders multiple
@ -936,6 +937,9 @@ void Session::update_status_time(bool show_pause, bool show_done)
*/
substatus += string_printf(", Sample %d/%d", progress.get_current_sample(), num_samples);
}
if(params.use_denoising) {
substatus += string_printf(", Denoised %d tiles", progress.get_denoised_tiles());
}
}
else if(tile_manager.num_samples == INT_MAX)
substatus = string_printf("Path Tracing Sample %d", progressive_sample+1);

View File

@ -37,7 +37,8 @@ public:
pixel_samples = 0;
total_pixel_samples = 0;
current_tile_sample = 0;
finished_tiles = 0;
rendered_tiles = 0;
denoised_tiles = 0;
start_time = time_dt();
render_start_time = time_dt();
status = "Initializing";
@ -75,7 +76,8 @@ public:
pixel_samples = 0;
total_pixel_samples = 0;
current_tile_sample = 0;
finished_tiles = 0;
rendered_tiles = 0;
denoised_tiles = 0;
start_time = time_dt();
render_start_time = time_dt();
status = "Initializing";
@ -177,7 +179,8 @@ public:
pixel_samples = 0;
current_tile_sample = 0;
finished_tiles = 0;
rendered_tiles = 0;
denoised_tiles = 0;
}
void set_total_pixel_samples(uint64_t total_pixel_samples_)
@ -209,11 +212,16 @@ public:
set_update();
}
void add_finished_tile()
void add_finished_tile(bool denoised)
{
thread_scoped_lock lock(progress_mutex);
finished_tiles++;
if(denoised) {
denoised_tiles++;
}
else {
rendered_tiles++;
}
}
int get_current_sample()
@ -223,9 +231,14 @@ public:
return current_tile_sample;
}
int get_finished_tiles()
int get_rendered_tiles()
{
return finished_tiles;
return rendered_tiles;
}
int get_denoised_tiles()
{
return denoised_tiles;
}
/* status messages */
@ -318,7 +331,7 @@ protected:
int current_tile_sample;
/* Stores the number of tiles that's already finished.
* Used to determine whether all but the last tile are finished rendering, in which case the current_tile_sample is displayed. */
int finished_tiles;
int rendered_tiles, denoised_tiles;
double start_time, render_start_time;