[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