Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/session.cpp
| Show First 20 Lines • Show All 395 Lines • ▼ Show 20 Lines | bool Session::acquire_tile(Device *tile_device, RenderTile &rtile) | ||||
| rtile.x = tile_manager.state.buffer.full_x + tile->x; | rtile.x = tile_manager.state.buffer.full_x + tile->x; | ||||
| rtile.y = tile_manager.state.buffer.full_y + tile->y; | rtile.y = tile_manager.state.buffer.full_y + tile->y; | ||||
| rtile.w = tile->w; | rtile.w = tile->w; | ||||
| rtile.h = tile->h; | rtile.h = tile->h; | ||||
| rtile.start_sample = tile_manager.state.sample; | rtile.start_sample = tile_manager.state.sample; | ||||
| rtile.num_samples = tile_manager.state.num_samples; | rtile.num_samples = tile_manager.state.num_samples; | ||||
| rtile.resolution = tile_manager.state.resolution_divider; | rtile.resolution = tile_manager.state.resolution_divider; | ||||
| rtile.tile_index = tile->index; | rtile.tile_index = tile->index; | ||||
| rtile.task = (tile->state == Tile::DENOISE) ? RenderTile::DENOISE : RenderTile::PATH_TRACE; | |||||
| if (tile->state == Tile::DENOISE) { | |||||
| rtile.task = RenderTile::DENOISE; | |||||
| } | |||||
| else if (read_bake_tile_cb) { | |||||
| rtile.task = RenderTile::BAKE; | |||||
| } | |||||
| else { | |||||
| rtile.task = RenderTile::PATH_TRACE; | |||||
| } | |||||
| tile_lock.unlock(); | tile_lock.unlock(); | ||||
| /* in case of a permanent buffer, return it, otherwise we will allocate | /* in case of a permanent buffer, return it, otherwise we will allocate | ||||
| * a new temporary buffer */ | * a new temporary buffer */ | ||||
| if (buffers) { | if (buffers) { | ||||
| tile_manager.state.buffer.get_offset_stride(rtile.offset, rtile.stride); | tile_manager.state.buffer.get_offset_stride(rtile.offset, rtile.stride); | ||||
| Show All 19 Lines | bool Session::acquire_tile(Device *tile_device, RenderTile &rtile) | ||||
| } | } | ||||
| tile->buffers->params.get_offset_stride(rtile.offset, rtile.stride); | tile->buffers->params.get_offset_stride(rtile.offset, rtile.stride); | ||||
| rtile.buffer = tile->buffers->buffer.device_pointer; | rtile.buffer = tile->buffers->buffer.device_pointer; | ||||
| rtile.buffers = tile->buffers; | rtile.buffers = tile->buffers; | ||||
| rtile.sample = tile_manager.state.sample; | rtile.sample = tile_manager.state.sample; | ||||
| /* this will tag tile as IN PROGRESS in blender-side render pipeline, | if (read_bake_tile_cb) { | ||||
| /* This will read any passes needed as input for baking. */ | |||||
| read_bake_tile_cb(rtile); | |||||
| rtile.buffers->buffer.copy_to_device(); | |||||
| } | |||||
| else { | |||||
| /* This will tag tile as IN PROGRESS in blender-side render pipeline, | |||||
| * which is needed to highlight currently rendering tile before first | * which is needed to highlight currently rendering tile before first | ||||
| * sample was processed for it | * sample was processed for it. */ | ||||
| */ | |||||
| update_tile_sample(rtile); | update_tile_sample(rtile); | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| void Session::update_tile_sample(RenderTile &rtile) | void Session::update_tile_sample(RenderTile &rtile) | ||||
| { | { | ||||
| thread_scoped_lock tile_lock(tile_mutex); | thread_scoped_lock tile_lock(tile_mutex); | ||||
| Show All 12 Lines | |||||
| { | { | ||||
| thread_scoped_lock tile_lock(tile_mutex); | thread_scoped_lock tile_lock(tile_mutex); | ||||
| progress.add_finished_tile(rtile.task == RenderTile::DENOISE); | progress.add_finished_tile(rtile.task == RenderTile::DENOISE); | ||||
| bool delete_tile; | bool delete_tile; | ||||
| if (tile_manager.finish_tile(rtile.tile_index, delete_tile)) { | if (tile_manager.finish_tile(rtile.tile_index, delete_tile)) { | ||||
| /* Finished tile pixels write. */ | |||||
| if (write_render_tile_cb && params.progressive_refine == false) { | if (write_render_tile_cb && params.progressive_refine == false) { | ||||
| write_render_tile_cb(rtile); | write_render_tile_cb(rtile); | ||||
| } | } | ||||
| if (delete_tile) { | if (delete_tile) { | ||||
| delete rtile.buffers; | delete rtile.buffers; | ||||
| tile_manager.state.tiles[rtile.tile_index].buffers = NULL; | tile_manager.state.tiles[rtile.tile_index].buffers = NULL; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| /* In progress tile pixels update. */ | |||||
| if (update_render_tile_cb && params.progressive_refine == false) { | if (update_render_tile_cb && params.progressive_refine == false) { | ||||
| update_render_tile_cb(rtile, false); | update_render_tile_cb(rtile, false); | ||||
| } | } | ||||
| } | } | ||||
| update_status_time(); | update_status_time(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 674 Lines • Show Last 20 Lines | |||||