[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54556] trunk/blender: Fix #34121: OSL + persistent images option was not freeing shader memory properly,
Brecht Van Lommel
brechtvanlommel at pandora.be
Thu Feb 14 17:11:47 CET 2013
Revision: 54556
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54556
Author: blendix
Date: 2013-02-14 16:11:47 +0000 (Thu, 14 Feb 2013)
Log Message:
-----------
Fix #34121: OSL + persistent images option was not freeing shader memory properly,
causing memory to increase continuously during animation render.
Modified Paths:
--------------
trunk/blender/intern/cycles/blender/blender_sync.cpp
trunk/blender/intern/cycles/render/mesh.cpp
trunk/blender/intern/cycles/render/osl.cpp
trunk/blender/intern/cycles/render/osl.h
trunk/blender/intern/cycles/render/scene.cpp
trunk/blender/intern/cycles/render/shader.h
trunk/blender/intern/cycles/render/svm.cpp
trunk/blender/intern/cycles/render/svm.h
trunk/blender/source/blender/editors/render/render_preview.c
Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp 2013-02-14 16:11:47 UTC (rev 54556)
@@ -307,7 +307,10 @@
params.use_bvh_spatial_split = RNA_boolean_get(&cscene, "debug_use_spatial_splits");
params.use_bvh_cache = (background)? RNA_boolean_get(&cscene, "use_cache"): false;
- params.persistent_images = (background)? r.use_persistent_data(): false;
+ if(background && params.shadingsystem != SceneParams::OSL)
+ params.persistent_images = r.use_persistent_data();
+ else
+ params.persistent_images = false;
return params;
}
Modified: trunk/blender/intern/cycles/render/mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/render/mesh.cpp 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/mesh.cpp 2013-02-14 16:11:47 UTC (rev 54556)
@@ -966,6 +966,14 @@
dscene->attributes_map.clear();
dscene->attributes_float.clear();
dscene->attributes_float3.clear();
+
+ OSLGlobals *og = (OSLGlobals*)device->osl_memory();
+
+ if(og) {
+ og->object_name_map.clear();
+ og->attribute_map.clear();
+ og->object_names.clear();
+ }
}
void MeshManager::tag_update(Scene *scene)
Modified: trunk/blender/intern/cycles/render/osl.cpp
===================================================================
--- trunk/blender/intern/cycles/render/osl.cpp 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/osl.cpp 2013-02-14 16:11:47 UTC (rev 54556)
@@ -47,17 +47,27 @@
{
services = new OSLRenderServices();
+ texture_system_init();
shading_system_init();
- texture_system_init();
}
OSLShaderManager::~OSLShaderManager()
{
OSL::ShadingSystem::destroy(ss);
OSL::TextureSystem::destroy(ts);
+
delete services;
}
+void OSLShaderManager::reset(Scene *scene)
+{
+ OSL::ShadingSystem::destroy(ss);
+ delete services;
+
+ services = new OSLRenderServices();
+ shading_system_init();
+}
+
void OSLShaderManager::device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress)
{
if(!need_update)
@@ -88,6 +98,7 @@
og->ss = ss;
og->ts = ts;
og->services = services;
+
int background_id = scene->shader_manager->get_shader_id(scene->default_background);
og->background_state = og->surface_state[background_id & SHADER_MASK];
og->use = true;
Modified: trunk/blender/intern/cycles/render/osl.h
===================================================================
--- trunk/blender/intern/cycles/render/osl.h 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/osl.h 2013-02-14 16:11:47 UTC (rev 54556)
@@ -64,6 +64,8 @@
OSLShaderManager();
~OSLShaderManager();
+ void reset(Scene *scene);
+
bool use_osl() { return true; }
void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
Modified: trunk/blender/intern/cycles/render/scene.cpp
===================================================================
--- trunk/blender/intern/cycles/render/scene.cpp 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/scene.cpp 2013-02-14 16:11:47 UTC (rev 54556)
@@ -85,6 +85,12 @@
foreach(ParticleSystem *p, particle_systems)
delete p;
+ shaders.clear();
+ meshes.clear();
+ objects.clear();
+ lights.clear();
+ particle_systems.clear();
+
if(device) {
camera->device_free(device, &dscene);
filter->device_free(device, &dscene);
@@ -118,13 +124,6 @@
delete curve_system_manager;
delete image_manager;
}
- else {
- shaders.clear();
- meshes.clear();
- objects.clear();
- lights.clear();
- particle_systems.clear();
- }
}
void Scene::device_update(Device *device_, Progress& progress)
@@ -257,6 +256,7 @@
void Scene::reset()
{
+ shader_manager->reset(this);
shader_manager->add_default(this);
/* ensure all objects are updated */
Modified: trunk/blender/intern/cycles/render/shader.h
===================================================================
--- trunk/blender/intern/cycles/render/shader.h 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/shader.h 2013-02-14 16:11:47 UTC (rev 54556)
@@ -110,6 +110,8 @@
static ShaderManager *create(Scene *scene, int shadingsystem);
virtual ~ShaderManager();
+ virtual void reset(Scene *scene) = 0;
+
virtual bool use_osl() { return false; }
/* device update */
Modified: trunk/blender/intern/cycles/render/svm.cpp
===================================================================
--- trunk/blender/intern/cycles/render/svm.cpp 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/svm.cpp 2013-02-14 16:11:47 UTC (rev 54556)
@@ -40,6 +40,10 @@
{
}
+void SVMShaderManager::reset(Scene *scene)
+{
+}
+
void SVMShaderManager::device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress)
{
if(!need_update)
Modified: trunk/blender/intern/cycles/render/svm.h
===================================================================
--- trunk/blender/intern/cycles/render/svm.h 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/intern/cycles/render/svm.h 2013-02-14 16:11:47 UTC (rev 54556)
@@ -45,6 +45,8 @@
SVMShaderManager();
~SVMShaderManager();
+ void reset(Scene *scene);
+
void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
void device_free(Device *device, DeviceScene *dscene);
};
Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c 2013-02-14 16:01:34 UTC (rev 54555)
+++ trunk/blender/source/blender/editors/render/render_preview.c 2013-02-14 16:11:47 UTC (rev 54556)
@@ -362,7 +362,7 @@
}
else {
/* use current scene world to light sphere */
- if (ma->pr_type == MA_SPHERE_A)
+ if (mat->pr_type == MA_SPHERE_A)
sce->world = scene->world;
}
More information about the Bf-blender-cvs
mailing list