Commit: 24ccacd3c9bf2cf03d7c860cb48b0b8067997f3b Author: Kévin Dietrich Date: Wed Nov 11 17:56:51 2020 +0100 Branches: cycles_procedural_api https://developer.blender.org/rB24ccacd3c9bf2cf03d7c860cb48b0b8067997f3b
apply changes and fixes from optimization branch =================================================================== M intern/cycles/blender/blender_sync.cpp M intern/cycles/render/geometry.cpp M intern/cycles/render/integrator.cpp M intern/cycles/render/light.cpp M intern/cycles/render/object.cpp =================================================================== diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 7f7ec17cb38..8b8f1579ab7 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -306,11 +306,6 @@ void BlenderSync::sync_integrator() integrator->set_sample_clamp_direct(get_float(cscene, "sample_clamp_direct")); integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect")); if (!preview) { - if (integrator->get_motion_blur() != r.use_motion_blur()) { - scene->object_manager->tag_update(scene, MOTION_BLUR_MODIFIED); - scene->camera->tag_modified(); - } - integrator->set_motion_blur(r.use_motion_blur()); } diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp index 3ff952e81ab..16049f0be3b 100644 --- a/intern/cycles/render/geometry.cpp +++ b/intern/cycles/render/geometry.cpp @@ -1247,27 +1247,28 @@ void GeometryManager::device_update_bvh(Device *device, if (bvh) { bvh->pack = {}; - if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC) && - bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) { - bvh->refit(progress); - } - + if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) { + if (bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) { + std::cerr << "Tag BVH for refit\n"; + bvh->refit(progress); + } #if 1 - PackedBVH &pack = bvh->pack; - dscene->prim_tri_verts.give_data(pack.prim_tri_verts); + PackedBVH &pack = bvh->pack; + dscene->prim_tri_verts.give_data(pack.prim_tri_verts); #else - PackedBVH &pack = bvh->pack; - // dscene->bvh_nodes.give_data(pack.nodes); - // dscene->bvh_leaf_nodes.give_data(pack.leaf_nodes); - // dscene->object_node.give_data(pack.object_node); - dscene->prim_tri_index.give_data(pack.prim_tri_index); - dscene->prim_tri_verts.give_data(pack.prim_tri_verts); - dscene->prim_type.give_data(pack.prim_type); - dscene->prim_visibility.give_data(pack.prim_visibility); - dscene->prim_index.give_data(pack.prim_index); - dscene->prim_object.give_data(pack.prim_object); - dscene->prim_time.give_data(pack.prim_time); + PackedBVH &pack = bvh->pack; + // dscene->bvh_nodes.give_data(pack.nodes); + // dscene->bvh_leaf_nodes.give_data(pack.leaf_nodes); + // dscene->object_node.give_data(pack.object_node); + dscene->prim_tri_index.give_data(pack.prim_tri_index); + dscene->prim_tri_verts.give_data(pack.prim_tri_verts); + dscene->prim_type.give_data(pack.prim_type); + dscene->prim_visibility.give_data(pack.prim_visibility); + dscene->prim_index.give_data(pack.prim_index); + dscene->prim_object.give_data(pack.prim_object); + dscene->prim_time.give_data(pack.prim_time); #endif + } } if (!bvh || (device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) { @@ -1723,7 +1724,9 @@ void GeometryManager::device_update(Device *device, return; } - bool need_update_scene_bvh = false; + /* update the bvh even when there is no geometry so the bvh data in the kernel is still valid, + * especially when removing all the objects in interactive rendering */ + bool need_update_scene_bvh = scene->geometry.size() == 0; { scoped_callback_timer timer([scene](double time) { if (scene->update_stats) { diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp index e43ea89e1b2..0461cfec62d 100644 --- a/intern/cycles/render/integrator.cpp +++ b/intern/cycles/render/integrator.cpp @@ -17,9 +17,11 @@ #include "render/integrator.h" #include "device/device.h" #include "render/background.h" +#include "render/camera.h" #include "render/film.h" #include "render/jitter.h" #include "render/light.h" +#include "render/object.h" #include "render/scene.h" #include "render/shader.h" #include "render/sobol.h" @@ -298,6 +300,11 @@ void Integrator::tag_update(Scene *scene, UpdateFlags flag) } } } + + if (motion_blur_is_modified()) { + scene->object_manager->tag_update(scene, MOTION_BLUR_MODIFIED); + scene->camera->tag_modified(); + } } CCL_NAMESPACE_END diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 4bd226d2cdb..b4490e51f03 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -1118,7 +1118,7 @@ void LightManager::remove_ies(int slot) /* If the slot has no more users, update the device to remove it. */ if (ies_slots[slot]->users == 0) { update_flags |= UPDATE_ALL; - need_update_background |= need_update(); + need_update_background = true; } } diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp index e013114c42e..6e9f07e1936 100644 --- a/intern/cycles/render/object.cpp +++ b/intern/cycles/render/object.cpp @@ -745,8 +745,6 @@ void ObjectManager::device_update(Device *device, foreach (Object *object, scene->objects) { object->clear_modified(); } - - update_flags = UPDATE_NONE; } void ObjectManager::device_update_flags( @@ -903,7 +901,9 @@ void ObjectManager::device_free(Device *, DeviceScene *dscene) dscene->object_volume_step.free(); } -void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress &progress) +void ObjectManager::apply_static_transforms(DeviceScene * /*dscene*/, + Scene *scene, + Progress &progress) { /* todo: normals and displacement should be done before applying transform! */ /* todo: create objects/geometry in right order! */ @@ -927,8 +927,6 @@ void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, P if (progress.get_cancel()) return; - uint *object_flag = dscene->object_flag.data(); - /* apply transforms for objects with single user geometry */ foreach (Object *object, scene->objects) { /* Annoying feedback loop here: we can't use is_instanced() because _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs