[Bf-blender-cvs] [0a4da23] temp-cycles-microdisplacement: Add geometry cache ; sync

Mai Lavelle noreply at git.blender.org
Tue Apr 12 18:45:55 CEST 2016


Commit: 0a4da23524f9a502b87425886f66e914ba8de971
Author: Mai Lavelle
Date:   Wed Feb 24 12:46:10 2016 -0500
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB0a4da23524f9a502b87425886f66e914ba8de971

Add geometry cache ; sync

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

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_mesh.cpp
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/device/device.h
M	intern/cycles/device/device_cpu.cpp
M	intern/cycles/render/object.cpp
M	intern/cycles/render/scene.h

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

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index de9481e..ca708bf 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -498,6 +498,12 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
                             "but time can be saved by manually stopping the render when the noise is low enough)",
                 default=False,
                 )
+        cls.geom_cache_max_size = IntProperty(
+                name="Geometry Cache Size",
+                description="Maximum size of the geometry cache in MB",
+                min=128, max=1024*4,
+                default=256,
+                )
 
         cls.bake_type = EnumProperty(
             name="Bake Type",
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index e3c4f21..cc18818 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -385,6 +385,11 @@ class CyclesRender_PT_performance(CyclesButtonsPanel, Panel):
         col.label(text="Acceleration structure:")
         col.prop(cscene, "debug_use_spatial_splits")
 
+        col.separator()
+
+        col.label(text="Geometry Cache:")
+        col.prop(cscene, "geom_cache_max_size", text="Max Size")
+
 
 class CyclesRender_PT_layer_options(CyclesButtonsPanel, Panel):
     bl_label = "Layer"
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 5d15ac3..5a19555 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -675,9 +675,8 @@ static void create_subd_mesh(Scene *scene,
                              const vector<uint>& used_shaders,
                              bool preview)
 {
-	Mesh *basemesh = new Mesh();
-	basemesh->subdivision_type = (Mesh::SubdivisionType)RNA_enum_get(cmesh, "subdivision_type");
-	create_mesh(scene, basemesh, b_mesh, used_shaders, true);
+	mesh->subdivision_type = (Mesh::SubdivisionType)RNA_enum_get(cmesh, "subdivision_type");
+	create_mesh(scene, mesh, b_mesh, used_shaders, true);
 
 	SubdParams sdparams(mesh, used_shaders[0], true, false);
 	sdparams.dicing_rate = preview ? RNA_float_get(cmesh, "preview_dicing_rate") : RNA_float_get(cmesh, "dicing_rate");
@@ -689,9 +688,7 @@ static void create_subd_mesh(Scene *scene,
 
 	/* tesselate */
 	DiagSplit dsplit(sdparams);
-	basemesh->tessellate(&dsplit);
-
-	delete basemesh;
+	mesh->split_patches(&dsplit);
 }
 
 /* Sync */
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 749b8c0..68055a7 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -481,6 +481,8 @@ 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;
+
 	return params;
 }
 
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 30d0003..460cc18 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -34,6 +34,8 @@ CCL_NAMESPACE_BEGIN
 class Progress;
 class RenderTile;
 
+struct GeomCache;
+
 /* Device Types */
 
 enum DeviceType {
@@ -232,6 +234,8 @@ public:
 	/* open shading language, only for CPU device */
 	virtual void *osl_memory() { return NULL; }
 
+	virtual GeomCache *get_geom_cache() { return NULL; }
+
 	/* load/compile kernels, must be called before adding tasks */ 
 	virtual bool load_kernels(
 	        const DeviceRequestedFeatures& /*requested_features*/)
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 676b1279..5a9b26d 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -35,6 +35,8 @@
 #include "osl_shader.h"
 #include "osl_globals.h"
 
+#include "geom/geom_cache.h"
+
 #include "buffers.h"
 
 #include "util_debug.h"
@@ -65,6 +67,8 @@ public:
 		kernel_globals.osl = &osl_globals;
 #endif
 
+		kernel_globals.geom_cache = geom_cache_create();
+
 		/* do now to avoid thread issues */
 		system_cpu_support_sse2();
 		system_cpu_support_sse3();
@@ -110,6 +114,7 @@ public:
 	~CPUDevice()
 	{
 		task_pool.stop();
+		geom_cache_release(kernel_globals.geom_cache);
 	}
 
 	void mem_alloc(device_memory& mem, MemoryType /*type*/)
@@ -187,6 +192,11 @@ public:
 #endif
 	}
 
+	GeomCache *get_geom_cache()
+	{
+		return kernel_globals.geom_cache;
+	}
+
 	void thread_run(DeviceTask *task)
 	{
 		if(task->type == DeviceTask::PATH_TRACE)
@@ -218,6 +228,7 @@ public:
 #ifdef WITH_OSL
 		OSLShader::thread_init(&kg, &kernel_globals, &osl_globals);
 #endif
+		geom_cache_thread_init(&kg, kernel_globals.geom_cache);
 
 		RenderTile tile;
 
@@ -390,6 +401,8 @@ public:
 #ifdef WITH_OSL
 		OSLShader::thread_init(&kg, &kernel_globals, &osl_globals);
 #endif
+		geom_cache_thread_init(&kg, kernel_globals.geom_cache);
+
 		void(*shader_kernel)(KernelGlobals*, uint4*, float4*, float*, int, int, int, int, int);
 
 #ifdef WITH_CYCLES_OPTIMIZED_KERNEL_AVX2
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index a6bc823..9c53b6e 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -519,7 +519,8 @@ void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, u
 		 * Could be solved by moving reference counter to Mesh.
 		 */
 		if((mesh_users[object->mesh] == 1 && !object->mesh->has_surface_bssrdf) &&
-		   object->mesh->displacement_method == Mesh::DISPLACE_BUMP)
+		   object->mesh->displacement_method == Mesh::DISPLACE_BUMP &&
+		   object->mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
 		{
 			if(!(motion_blur && object->use_motion)) {
 				if(!object->mesh->transform_applied) {
diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h
index 74976c1..29dee64 100644
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@ -134,6 +134,7 @@ public:
 	bool use_bvh_spatial_split;
 	bool use_qbvh;
 	bool persistent_data;
+	size_t geom_cache_max_size;
 
 	SceneParams()
 	{
@@ -142,6 +143,7 @@ public:
 		use_bvh_spatial_split = false;
 		use_qbvh = false;
 		persistent_data = false;
+		geom_cache_max_size = 256*1024*1024;
 	}
 
 	bool modified(const SceneParams& params)
@@ -149,7 +151,8 @@ public:
 		&& bvh_type == params.bvh_type
 		&& use_bvh_spatial_split == params.use_bvh_spatial_split
 		&& use_qbvh == params.use_qbvh
-		&& persistent_data == params.persistent_data); }
+		&& persistent_data == params.persistent_data
+		&& geom_cache_max_size == params.geom_cache_max_size); }
 };
 
 /* Scene */




More information about the Bf-blender-cvs mailing list