diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-05 19:00:05 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-05 20:15:04 +0300 |
commit | 716890e864b3730386a526703f4401a697de047a (patch) | |
tree | 401d24b54611b82f89187df39e044756ac451a30 /intern/cycles/render/scene.cpp | |
parent | 0b67102bd6be56edfefb66e2047b448fac0a152d (diff) |
Cycles: Early output from Scene::device_update when device error occurs
This way for example we wouldn't wait a fortune while BVH is building after
GPU run out of memory when loading images just to see the render failure
message.
Diffstat (limited to 'intern/cycles/render/scene.cpp')
-rw-r--r-- | intern/cycles/render/scene.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp index 3662c29587e..ccb03eaf1e0 100644 --- a/intern/cycles/render/scene.cpp +++ b/intern/cycles/render/scene.cpp @@ -153,81 +153,83 @@ void Scene::device_update(Device *device_, Progress& progress) progress.set_status("Updating Shaders"); shader_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Images"); image_manager->device_update(device, &dscene, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Background"); background->device_update(device, &dscene, this); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Objects"); object_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Meshes"); mesh_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Objects Flags"); object_manager->device_update_flags(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Hair Systems"); curve_system_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Lookup Tables"); lookup_tables->device_update(device, &dscene); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; /* TODO(sergey): Make sure camera is not needed above. */ progress.set_status("Updating Camera"); camera->device_update(device, &dscene, this); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Lights"); light_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Particle Systems"); particle_system_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Film"); film->device_update(device, &dscene, this); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Integrator"); integrator->device_update(device, &dscene, this); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Lookup Tables"); lookup_tables->device_update(device, &dscene); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; progress.set_status("Updating Baking"); bake_manager->device_update(device, &dscene, this, progress); - if(progress.get_cancel()) return; + if(progress.get_cancel() || device->have_error()) return; - progress.set_status("Updating Device", "Writing constant memory"); - device->const_copy_to("__data", &dscene.data, sizeof(dscene.data)); + if(device->have_error() == false) { + progress.set_status("Updating Device", "Writing constant memory"); + device->const_copy_to("__data", &dscene.data, sizeof(dscene.data)); + } } Scene::MotionType Scene::need_motion(bool advanced_shading) |