[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(¤t_size, 0, 0) > max_size && num_loops < 100) {
+ while(atomic_cas_z(¤t_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(¤t_size, ref.get_size());
+ atomic_sub_z(¤t_size, ref.get_size());
it++;
if(it)
@@ -254,7 +254,7 @@ public:
check_size();
value.mark_used();
- atomic_add_uint32(¤t_size, value.get_size());
+ atomic_add_z(¤t_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(¤t_size, value.get_size());
+ atomic_add_z(¤t_size, value.get_size());
}
void clear() {
More information about the Bf-blender-cvs
mailing list