[Bf-blender-cvs] [77e4ede] temp-cycles-microdisplacement: Use size_t in LRU to allow cache sizes larger than 4gb

Mai Lavelle noreply at git.blender.org
Mon Apr 18 15:07:34 CEST 2016


Commit: 77e4edef4452ab42d50bf87de804ef5f98e8d24b
Author: Mai Lavelle
Date:   Tue Apr 12 12:23:53 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB77e4edef4452ab42d50bf87de804ef5f98e8d24b

Use size_t in LRU to allow cache sizes larger than 4gb

===================================================================

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/kernel/geom/geom_cache.cpp
M	intern/cycles/kernel/geom/geom_cache.h
M	intern/cycles/util/util_lru.h

===================================================================

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index f896e55..ce53e1b 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -501,7 +501,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
         cls.geom_cache_max_size = IntProperty(
                 name="Geometry Cache Size",
                 description="Maximum size of the geometry cache in MB",
-                min=128, max=1024*4,
+                min=128,
                 default=256,
                 )
 
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 68055a7..643805e 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -481,7 +481,7 @@ SceneParams BlenderSync::get_scene_params(BL::Scene& b_scene,
 		params.use_qbvh = false;
 	}
 
-	params.geom_cache_max_size = get_int(cscene, "geom_cache_max_size") * 1024*1024;
+	params.geom_cache_max_size = (size_t)get_int(cscene, "geom_cache_max_size") * 1024*1024;
 
 	return params;
 }
diff --git a/intern/cycles/kernel/geom/geom_cache.cpp b/intern/cycles/kernel/geom/geom_cache.cpp
index 5ac4515..271ad43 100644
--- a/intern/cycles/kernel/geom/geom_cache.cpp
+++ b/intern/cycles/kernel/geom/geom_cache.cpp
@@ -123,7 +123,7 @@ void geom_cache_clear(GeomCache* geom_cache) {
 	lru->clear();
 }
 
-void geom_cache_set_max_size(GeomCache * geom_cache, uint max_size) {
+void geom_cache_set_max_size(GeomCache * geom_cache, size_t max_size) {
 	if(!geom_cache)
 		return;
 
diff --git a/intern/cycles/kernel/geom/geom_cache.h b/intern/cycles/kernel/geom/geom_cache.h
index 17cd5ba..7e1ff71 100644
--- a/intern/cycles/kernel/geom/geom_cache.h
+++ b/intern/cycles/kernel/geom/geom_cache.h
@@ -24,7 +24,7 @@ void geom_cache_release(GeomCache *geom_cache);
 void geom_cache_set_scene(GeomCache *geom_cache, void *scene);
 void geom_cache_thread_init(KernelGlobals *kg, GeomCache *geom_cache);
 void geom_cache_clear(GeomCache *geom_cache);
-void geom_cache_set_max_size(GeomCache * geom_cache, uint max_size);
+void geom_cache_set_max_size(GeomCache * geom_cache, size_t max_size);
 
 TessellatedSubPatch* geom_cache_get_subpatch(KernelGlobals *kg, int object, int prim);
 void geom_cache_release_subpatch(KernelGlobals *kg, TessellatedSubPatch *subpatch);
diff --git a/intern/cycles/util/util_lru.h b/intern/cycles/util/util_lru.h
index e148e8b..6ba7df3 100644
--- a/intern/cycles/util/util_lru.h
+++ b/intern/cycles/util/util_lru.h
@@ -41,7 +41,7 @@ public:
 			uint ready;
 			uint used;
 			uint refcount;
-			uint size;
+			size_t size;
 
 			intrusive_ref_t() {
 				memset(this, 0, sizeof(intrusive_ref_t));
@@ -174,8 +174,8 @@ public:
 
 	thread_specific_ptr<thread_data_t> thread_data;
 
-	uint max_size;
-	uint current_size;
+	size_t max_size;
+	size_t current_size;
 	thread_mutex check_size_lock;
 	key_t cursor;
 
@@ -194,9 +194,9 @@ public:
 		set_max_size(max_size);
 	}
 
-	void set_max_size(uint size) {
-		max_size = std::min(size, (uint)1024*1024*1000*4); /* just under 4gb */
-		max_size = std::max(max_size, (uint)1024*1024*128); /* 128 mb */
+	void set_max_size(size_t size) {
+		max_size = std::min(size, (size_t)SIZE_MAX);
+		max_size = std::max(max_size, (size_t)1024 * 1024 * 128); /* 128 mb */
 	}
 
 	void check_size() {
@@ -209,7 +209,7 @@ public:
 		typename map_t::iterator it = entries.find(cursor);
 		int num_loops = 0;
 
-		while(atomic_cas_uint32(&current_size, 0, 0) > max_size && num_loops < 100) {
+		while(atomic_cas_z(&current_size, 0, 0) > max_size && num_loops < 100) {
 			if(it == entries.end()) {
 				it = entries.begin();
 
@@ -224,7 +224,7 @@ public:
 			bool was_used = ref.mark_unused();
 			if(!was_used) {
 				key_t key = it->first;
-				atomic_sub_uint32(&current_size, ref.get_size());
+				atomic_sub_z(&current_size, ref.get_size());
 
 				it++;
 				if(it)
@@ -254,7 +254,7 @@ public:
 		check_size();
 
 		value.mark_used();
-		atomic_add_uint32(&current_size, value.get_size());
+		atomic_add_z(&current_size, value.get_size());
 
 		return entries.insert(key, value);
 	}
@@ -288,7 +288,7 @@ public:
 		value.mark_used();
 		check_size();
 		value.mark_used();
-		atomic_add_uint32(&current_size, value.get_size());
+		atomic_add_z(&current_size, value.get_size());
 	}
 
 	void clear() {




More information about the Bf-blender-cvs mailing list