Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-04-19 19:52:38 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-04-19 19:52:38 +0300
commit3368df4ab6eab69cc7aec30fccb2ac806c45bbe4 (patch)
tree715f82a4b6909f427e283b870199ea3d7b340c35 /source/blender
parent7e4db169f2ab8dd62281f0b42a6f7e33be5f32d6 (diff)
DRW: Expose VBO garbage collection timings
This adds user side options to tweak the behavior of the vbo garbage collection.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenloader/intern/versioning_userdef.c4
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c11
-rw-r--r--source/blender/draw/intern/draw_manager.c11
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h4
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c17
5 files changed, 35 insertions, 12 deletions
diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c
index bf88eddc145..65a19ca80c1 100644
--- a/source/blender/blenloader/intern/versioning_userdef.c
+++ b/source/blender/blenloader/intern/versioning_userdef.c
@@ -496,6 +496,10 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
*/
{
/* (keep this block even if it becomes empty). */
+ if (userdef->vbotimeout == 0) {
+ userdef->vbocollectrate = 60;
+ userdef->vbotimeout = 120;
+ }
}
if (userdef->pixelsize == 0.0f)
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 41de51fde96..a433135e8b9 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -2004,6 +2004,8 @@ typedef struct MeshBatchCache {
DRW_MeshCDMask cd_used, cd_needed, cd_used_over_time;
+ int lastmatch;
+
/* XXX, only keep for as long as sculpt mode uses shaded drawing. */
bool is_sculpt_points_tag;
@@ -4727,16 +4729,21 @@ static void mesh_create_uvedit_buffers(MeshRenderData *rdata,
/* Thread safety need to be assured by caller. Don't call this during drawing.
* Note: For now this only free the shading batches / vbo if any cd layers is
* not needed anymore. */
-void DRW_mesh_batch_cache_free_old(Mesh *me, int UNUSED(ctime))
+void DRW_mesh_batch_cache_free_old(Mesh *me, int ctime)
{
MeshBatchCache *cache = me->runtime.batch_cache;
if (cache == NULL)
return;
- if (mesh_cd_layers_type_equal(cache->cd_used_over_time, cache->cd_used) == false) {
+ if (mesh_cd_layers_type_equal(cache->cd_used_over_time, cache->cd_used)) {
+ cache->lastmatch = ctime;
+ }
+
+ if (ctime - cache->lastmatch > U.vbotimeout) {
mesh_batch_cache_discard_shaded_tri(cache);
}
+
mesh_cd_layers_type_clear(&cache->cd_used_over_time);
}
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 394cb6a144f..6c3bc7eb021 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -967,11 +967,9 @@ static void drw_drawdata_unlink_dupli(ID *id)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Rendering (DRW_engines)
+/** \name Garbage Collection
* \{ */
-#define DRW_BATCH_COLLECTION_RATE 60 /* in sec */
-
void DRW_cache_free_old_batches(Main *bmain)
{
Scene *scene;
@@ -979,7 +977,7 @@ void DRW_cache_free_old_batches(Main *bmain)
static int lasttime = 0;
int ctime = (int)PIL_check_seconds_timer();
- if (ctime % DRW_BATCH_COLLECTION_RATE || ctime == lasttime)
+ if (U.vbotimeout == 0 || (ctime - lasttime) < U.vbocollectrate || ctime == lasttime)
return;
lasttime = ctime;
@@ -2496,10 +2494,7 @@ void DRW_draw_depth_loop_gpencil(struct Depsgraph *depsgraph,
/**
* Clears the Depth Buffer and draws only the specified object.
*/
-void DRW_draw_depth_object(ARegion *ar,
- View3D *v3d,
- GPUViewport *viewport,
- Object *object)
+void DRW_draw_depth_object(ARegion *ar, View3D *v3d, GPUViewport *viewport, Object *object)
{
RegionView3D *rv3d = ar->regiondata;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 57d685b527c..c831c14eeaf 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -643,9 +643,9 @@ typedef struct UserDef {
char _pad3[4];
short gizmo_flag, gizmo_size;
short edit_studio_light;
- char _pad6[4];
+ char _pad6[2];
+ short vbotimeout, vbocollectrate;
short textimeout, texcollectrate;
- char _pad14[2];
int memcachelimit;
int prefetchframes;
/** Control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use. */
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 5a017e96fa7..d81ae82fbc5 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -4766,6 +4766,23 @@ static void rna_def_userdef_system(BlenderRNA *brna)
"Texture Collection Rate",
"Number of seconds between each run of the GL texture garbage collector");
+ prop = RNA_def_property(srna, "vbo_time_out", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "vbotimeout");
+ RNA_def_property_range(prop, 0, 3600);
+ RNA_def_property_ui_text(
+ prop,
+ "VBO Time Out",
+ "Time since last access of a GL Vertex buffer object in seconds after which it is freed "
+ "(set to 0 to keep vbo allocated)");
+
+ prop = RNA_def_property(srna, "vbo_collection_rate", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "vbocollectrate");
+ RNA_def_property_range(prop, 1, 3600);
+ RNA_def_property_ui_text(
+ prop,
+ "VBO Collection Rate",
+ "Number of seconds between each run of the GL Vertex buffer object garbage collector");
+
/* Select */
prop = RNA_def_property(srna, "use_select_pick_depth", PROP_BOOLEAN, PROP_NONE);