[Bf-blender-cvs] [0161dd62b2] cycles_split_kernel: Cycles: Zero split kernel state memory outside of kernel

2017-01-25 Thread Mai Lavelle
Commit: 0161dd62b21a040b990b11e7c2afafe199bcdf14
Author: Mai Lavelle
Date:   Thu Jan 26 00:05:55 2017 -0500
Branches: cycles_split_kernel
https://developer.blender.org/rB0161dd62b21a040b990b11e7c2afafe199bcdf14

Cycles: Zero split kernel state memory outside of kernel

Fixes problem seen with CUDA. The global work size wasn't large enough for the
data_init kernel to zero the full buffers, so now its done from the host.

===

M   intern/cycles/device/device_split_kernel.cpp
M   intern/cycles/device/device_split_kernel.h
M   intern/cycles/kernel/split/kernel_data_init.h

===

diff --git a/intern/cycles/device/device_split_kernel.cpp 
b/intern/cycles/device/device_split_kernel.cpp
index e47b65b459..57f2809f08 100644
--- a/intern/cycles/device/device_split_kernel.cpp
+++ b/intern/cycles/device/device_split_kernel.cpp
@@ -194,6 +194,12 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task,
return false;
}
 
+   /* reset state memory here as global size for data_init
+* kernel might not be large enough to do in kernel
+*/
+   device->mem_zero(work_pool_wgs);
+   device->mem_zero(split_data);
+

if(!device->enqueue_split_kernel_data_init(KernelDimensions(global_size, 
local_size),
   subtile,
   num_global_elements,
diff --git a/intern/cycles/device/device_split_kernel.h 
b/intern/cycles/device/device_split_kernel.h
index 92dfb7f099..7c9db7fbd1 100644
--- a/intern/cycles/device/device_split_kernel.h
+++ b/intern/cycles/device/device_split_kernel.h
@@ -50,7 +50,7 @@ private:
 * memory.
 */
device_memory kgbuffer;
-   device_memory split_data;
+   device_vector split_data;
device_vector ray_state;
device_memory queue_index; /* Array of size num_queues * sizeof(int) 
that tracks the size of each queue. */
 
@@ -61,7 +61,7 @@ private:
double avg_time_per_sample;
 
/* Work pool with respect to each work group. */
-   device_memory work_pool_wgs;
+   device_vector work_pool_wgs;
 
/* clos_max value for which the kernels have been loaded currently. */
int current_max_closure;
diff --git a/intern/cycles/kernel/split/kernel_data_init.h 
b/intern/cycles/kernel/split/kernel_data_init.h
index 56a334d384..10f90c5196 100644
--- a/intern/cycles/kernel/split/kernel_data_init.h
+++ b/intern/cycles/kernel/split/kernel_data_init.h
@@ -127,12 +127,6 @@ void KERNEL_FUNCTION_FULL_NAME(data_init)(
 
int thread_index = ccl_global_id(1) * ccl_global_size(0) + 
ccl_global_id(0);
 
-   /* Initialize work_pools */
-   if(thread_index < kernel_num_work_pools(kg)) {
-   work_pools[thread_index] = 0;
-   }
-   ccl_barrier(CCL_LOCAL_MEM_FENCE);
-
/* Initialize queue data and queue index. */
if(thread_index < queuesize) {
/* Initialize active ray queue. */
@@ -193,19 +187,9 @@ void KERNEL_FUNCTION_FULL_NAME(data_init)(
 
rng_state += (rng_state_offset_x + tile_x) + (rng_state_offset_y + 
tile_y) * rng_state_stride;
 
-
-   /* Initialise per_sample_output_buffers to all zeros. */
ccl_global float *per_sample_output_buffers = 
kernel_split_state.per_sample_output_buffers;
per_sample_output_buffers += ((tile_x + (tile_y * stride)) + 
(my_sample_tile)) * kernel_data.film.pass_stride;
 
-   int per_sample_output_buffers_iterator = 0;
-   for(per_sample_output_buffers_iterator = 0;
-   per_sample_output_buffers_iterator < kernel_data.film.pass_stride;
-   per_sample_output_buffers_iterator++)
-   {
-   per_sample_output_buffers[per_sample_output_buffers_iterator] = 
0.0f;
-   }
-
/* Initialize random numbers and ray. */
kernel_path_trace_setup(kg,
rng_state,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [01527197aa] master: Alembic: fix compile error on Linux.

2017-01-25 Thread Kévin Dietrich
Commit: 01527197aa4868030c40e72b81286fa2718572c5
Author: Kévin Dietrich
Date:   Thu Jan 26 06:18:07 2017 +0100
Branches: master
https://developer.blender.org/rB01527197aa4868030c40e72b81286fa2718572c5

Alembic: fix compile error on Linux.

===

M   source/blender/alembic/CMakeLists.txt

===

diff --git a/source/blender/alembic/CMakeLists.txt 
b/source/blender/alembic/CMakeLists.txt
index ad85f79ef2..a6e0be6a7f 100644
--- a/source/blender/alembic/CMakeLists.txt
+++ b/source/blender/alembic/CMakeLists.txt
@@ -39,14 +39,10 @@ set(INC
 
 set(INC_SYS
${ALEMBIC_INCLUDE_DIRS}
+   ${BOOST_INCLUDE_DIR}
${HDF5_INCLUDE_DIRS}
${OPENEXR_INCLUDE_DIRS}
 )
-if(APPLE OR WIN32)
-   list(APPEND INC_SYS
-   ${BOOST_INCLUDE_DIR}
-   )
-endif()
 
 set(SRC
intern/abc_archive.cc

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b91edd61d0] master: Fix T50287: Blender crashes when open a blend that contains an alembic file.

2017-01-25 Thread Kévin Dietrich
Commit: b91edd61d07555649dff6ec43275130fd06b3659
Author: Kévin Dietrich
Date:   Thu Jan 26 06:16:33 2017 +0100
Branches: master
https://developer.blender.org/rBb91edd61d07555649dff6ec43275130fd06b3659

Fix T50287: Blender crashes when open a blend that contains an alembic
file.

Missed in rB62a2ed97b.

===

M   source/blender/blenloader/intern/readfile.c

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 61f1965734..4396fa218b 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3244,6 +3244,11 @@ static void direct_link_constraints(FileData *fd, 
ListBase *lb)
con->flag |= CONSTRAINT_SPACEONCE;
break;
}
+   case CONSTRAINT_TYPE_TRANSFORM_CACHE:
+   {
+   bTransformCacheConstraint *data = con->data;
+   data->reader = NULL;
+   }
}
}
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [99e8618202] render-layers: Remove scene layer and collection from context

2017-01-25 Thread Dalai Felinto
Commit: 99e8618202e8393a363377078faa9b3c0cfc905d
Author: Dalai Felinto
Date:   Wed Jan 25 16:57:23 2017 +0100
Branches: render-layers
https://developer.blender.org/rB99e8618202e8393a363377078faa9b3c0cfc905d

Remove scene layer and collection from context

===

M   source/blender/blenkernel/BKE_context.h
M   source/blender/blenkernel/intern/context.c

===

diff --git a/source/blender/blenkernel/BKE_context.h 
b/source/blender/blenkernel/BKE_context.h
index 70f9fa3dfc..649d142d1c 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -251,8 +251,6 @@ int CTX_data_mode_enum(const bContext *C);
 
 void CTX_data_main_set(bContext *C, struct Main *bmain);
 void CTX_data_scene_set(bContext *C, struct Scene *bmain);
-void CTX_data_scene_collection_set(bContext *C, struct SceneCollection *sc);
-void CTX_data_scene_layer_set(bContext *C, struct SceneLayer *sl);
 
 int CTX_data_selected_editable_objects(const bContext *C, ListBase *list);
 int CTX_data_selected_editable_bases(const bContext *C, ListBase *list);
diff --git a/source/blender/blenkernel/intern/context.c 
b/source/blender/blenkernel/intern/context.c
index 592adfc578..f31b844155 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -79,8 +79,6 @@ struct bContext {
struct {
struct Main *main;
struct Scene *scene;
-   struct SceneLayer *render_layer;
-   struct SceneCollection *scene_collection;
 
int recursion;
int py_init; /* true if python is initialized */
@@ -908,7 +906,10 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
return sl;
}
else {
-   return C->data.render_layer;
+   Scene *scene = CTX_data_scene(C);
+   /* temporary, waiting for workspace or scene active layer */
+   TODO_LAYER_CONTEXT;
+   return scene->render_layers.last;
}
 }
 
@@ -928,15 +929,11 @@ SceneCollection *CTX_data_scene_collection(const bContext 
*C)
if (BKE_scene_layer_has_collection(sl, sc)) {
return sc;
}
-   else {
-   /* fallback */
-   LayerCollection *lc = BKE_layer_collection_active(sl);
-   return lc->scene_collection;
-   }
-   }
-   else {
-   return C->data.scene_collection;
}
+
+   /* fallback */
+   LayerCollection *lc = BKE_layer_collection_active(sl);
+   return lc->scene_collection;
 }
 
 int CTX_data_mode_enum(const bContext *C)
@@ -1005,26 +1002,6 @@ const char *CTX_data_mode_string(const bContext *C)
 void CTX_data_scene_set(bContext *C, Scene *scene)
 {
C->data.scene = scene;
-   TODO_LAYER_CONTEXT
-
-   /* render_layer comes from workspace (or even viewport) actually
-* this is only while we wait for workspace changes to be merged
-*/
-   CTX_data_scene_layer_set(C, scene->render_layers.last);
-}
-
-void CTX_data_scene_collection_set(bContext *C, SceneCollection *sc)
-{
-   C->data.scene_collection = sc;
-}
-
-void CTX_data_scene_layer_set(bContext *C, SceneLayer *sl)
-{
-   C->data.render_layer = sl;
-
-   /* update the related data */
-   LayerCollection *lc = BKE_layer_collection_active(sl);
-   CTX_data_scene_collection_set(C, lc->scene_collection);
 }
 
 ToolSettings *CTX_data_tool_settings(const bContext *C)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e346927111] render-layers: Remove unused panels (layer_passes and layer_options)

2017-01-25 Thread Dalai Felinto
Commit: e3469271110da75f8c213a5505c2bfcdb77331b2
Author: Dalai Felinto
Date:   Wed Jan 25 18:02:58 2017 +0100
Branches: render-layers
https://developer.blender.org/rBe3469271110da75f8c213a5505c2bfcdb77331b2

Remove unused panels (layer_passes and layer_options)

===

M   release/scripts/startup/bl_ui/properties_render_layer.py

===

diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py 
b/release/scripts/startup/bl_ui/properties_render_layer.py
index 639e6fa6c9..45c93dd933 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -71,103 +71,6 @@ class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel):
 col.prop(rd, "use_single_layer", icon_only=True)
 
 
-class RENDERLAYER_PT_layer_options(RenderLayerButtonsPanel, Panel):
-bl_label = "Layer"
-COMPAT_ENGINES = {'BLENDER_RENDER'}
-
-def draw(self, context):
-layout = self.layout
-
-scene = context.scene
-rd = scene.render
-rl = rd.layers.active
-
-split = layout.split()
-
-col = split.column()
-col.prop(scene, "layers", text="Scene")
-col.label(text="")
-col.prop(rl, "light_override", text="Lights")
-col.prop(rl, "material_override", text="Material")
-
-col = split.column()
-col.prop(rl, "layers", text="Layer")
-col.prop(rl, "layers_zmask", text="Mask Layer")
-
-layout.separator()
-layout.label(text="Include:")
-
-split = layout.split()
-
-col = split.column()
-col.prop(rl, "use_zmask")
-row = col.row()
-row.prop(rl, "invert_zmask", text="Negate")
-row.active = rl.use_zmask
-col.prop(rl, "use_all_z")
-
-col = split.column()
-col.prop(rl, "use_solid")
-col.prop(rl, "use_halo")
-col.prop(rl, "use_ztransp")
-
-col = split.column()
-col.prop(rl, "use_sky")
-col.prop(rl, "use_edge_enhance")
-col.prop(rl, "use_strand")
-if bpy.app.build_options.freestyle:
-row = col.row()
-row.prop(rl, "use_freestyle")
-row.active = rd.use_freestyle
-
-
-class RENDERLAYER_PT_layer_passes(RenderLayerButtonsPanel, Panel):
-bl_label = "Passes"
-bl_options = {'DEFAULT_CLOSED'}
-COMPAT_ENGINES = {'BLENDER_RENDER'}
-
-@staticmethod
-def draw_pass_type_buttons(box, rl, pass_type):
-# property names
-use_pass_type = "use_pass_" + pass_type
-exclude_pass_type = "exclude_" + pass_type
-# draw pass type buttons
-row = box.row()
-row.prop(rl, use_pass_type)
-row.prop(rl, exclude_pass_type, text="")
-
-def draw(self, context):
-layout = self.layout
-
-scene = context.scene
-rd = scene.render
-rl = rd.layers.active
-
-split = layout.split()
-
-col = split.column()
-col.prop(rl, "use_pass_combined")
-col.prop(rl, "use_pass_z")
-col.prop(rl, "use_pass_vector")
-col.prop(rl, "use_pass_normal")
-col.prop(rl, "use_pass_uv")
-col.prop(rl, "use_pass_mist")
-col.prop(rl, "use_pass_object_index")
-col.prop(rl, "use_pass_material_index")
-col.prop(rl, "use_pass_color")
-
-col = split.column()
-col.prop(rl, "use_pass_diffuse")
-self.draw_pass_type_buttons(col, rl, "specular")
-self.draw_pass_type_buttons(col, rl, "shadow")
-self.draw_pass_type_buttons(col, rl, "emit")
-self.draw_pass_type_buttons(col, rl, "ambient_occlusion")
-self.draw_pass_type_buttons(col, rl, "environment")
-self.draw_pass_type_buttons(col, rl, "indirect")
-self.draw_pass_type_buttons(col, rl, "reflection")
-self.draw_pass_type_buttons(col, rl, "refraction")
-
-
 class RENDERLAYER_UL_renderviews(UIList):
 def draw_item(self, context, layout, data, item, icon, active_data, 
active_propname, index):
 # assert(isinstance(item, bpy.types.SceneRenderView)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [dd61b7d346] render-layers: Add scene active layer

2017-01-25 Thread Dalai Felinto
Commit: dd61b7d346fe8ead3405c9168c43919ac4187049
Author: Dalai Felinto
Date:   Wed Jan 25 18:02:09 2017 +0100
Branches: render-layers
https://developer.blender.org/rBdd61b7d346fe8ead3405c9168c43919ac4187049

Add scene active layer

===

M   release/scripts/startup/bl_ui/properties_render_layer.py
M   source/blender/blenkernel/intern/context.c
M   source/blender/blenkernel/intern/layer.c
M   source/blender/blenloader/intern/versioning_280.c
M   source/blender/editors/render/render_shading.c
M   source/blender/makesdna/DNA_layer_types.h
M   source/blender/makesdna/DNA_scene_types.h
M   source/blender/makesrna/intern/rna_scene.c
M   tests/python/bl_render_layer.py

===

diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py 
b/release/scripts/startup/bl_ui/properties_render_layer.py
index 9b8bc237db..639e6fa6c9 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -35,7 +35,7 @@ class RenderLayerButtonsPanel:
 
 class RENDERLAYER_UL_renderlayers(UIList):
 def draw_item(self, context, layout, data, item, icon, active_data, 
active_propname, index):
-# assert(isinstance(item, bpy.types.SceneRenderLayer)
+# assert(isinstance(item, bpy.types.SceneLayer)
 layer = item
 if self.layout_type in {'DEFAULT', 'COMPACT'}:
 layout.prop(layer, "name", text="", icon_value=icon, emboss=False)
@@ -62,7 +62,7 @@ class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel):
 
 row = layout.row()
 col = row.column()
-col.template_list("RENDERLAYER_UL_renderlayers", "", rd, "layers", 
rd.layers, "active_index", rows=2)
+col.template_list("RENDERLAYER_UL_renderlayers", "", scene, 
"render_layers", scene.render_layers, "active_index", rows=2)
 
 col = row.column()
 sub = col.column(align=True)
diff --git a/source/blender/blenkernel/intern/context.c 
b/source/blender/blenkernel/intern/context.c
index f31b844155..8025732efe 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -907,9 +907,9 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
}
else {
Scene *scene = CTX_data_scene(C);
-   /* temporary, waiting for workspace or scene active layer */
-   TODO_LAYER_CONTEXT;
-   return scene->render_layers.last;
+   sl = BLI_findlink(>render_layers, scene->active_layer);
+   BLI_assert(sl);
+   return sl;
}
 }
 
diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index 40cba30437..f7b396b11c 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -57,7 +57,13 @@ static void object_bases_Iterator_next(Iterator *iter, const 
int flag);
  */
 SceneLayer *BKE_scene_layer_add(Scene *scene, const char *name)
 {
+   if (!name) {
+   name = DATA_("Render Layer");
+   }
+
SceneLayer *sl = MEM_callocN(sizeof(SceneLayer), "Scene Layer");
+   sl->flag |= SCENE_LAYER_RENDER;
+
BLI_addtail(>render_layers, sl);
 
/* unique name */
@@ -85,9 +91,11 @@ bool BKE_scene_layer_remove(Main *bmain, Scene *scene, 
SceneLayer *sl)
}
 
BLI_remlink(>render_layers, sl);
+
BKE_scene_layer_free(sl);
MEM_freeN(sl);
 
+   scene->active_layer = 0;
/* TODO WORKSPACE: set active_layer to 0 */
 
for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
diff --git a/source/blender/blenloader/intern/versioning_280.c 
b/source/blender/blenloader/intern/versioning_280.c
index 6706a33b6b..28952795b4 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -78,6 +78,8 @@ void blo_do_versions_after_linking_280(Main *main)
}
}
 
+   scene->active_layer = 0;
+
if (!BKE_scene_uses_blender_game(scene)) {
for (SceneRenderLayer *srl = 
scene->r.layers.first; srl; srl = srl->next) {
 
@@ -107,6 +109,10 @@ void blo_do_versions_after_linking_280(Main *main)
 
/* TODO: passes, samples, 
mask_layesr, exclude, ... */
}
+
+   if (BLI_findlink(>render_layers, 
scene->r.actlay)) {
+   scene->active_layer = 
scene->r.actlay;
+   }
}
 
SceneLayer *sl = BKE_scene_layer_add(scene, 
"Render 

[Bf-blender-cvs] [64f5afdb89] master: [Cycles/MSVC/Testing] Fix broken test code.

2017-01-25 Thread lazydodo
Commit: 64f5afdb89bbf3831e97d76a178acee1d9524452
Author: lazydodo
Date:   Wed Jan 25 09:36:41 2017 -0700
Branches: master
https://developer.blender.org/rB64f5afdb89bbf3831e97d76a178acee1d9524452

[Cycles/MSVC/Testing] Fix broken test code.

Currently the tests don't run on windows for the following reasons

1) render_graph_finalize has an linking issue due missing a bunch of libraries 
(not sure why this is not an issue for linux)
2) This one is more interesting, in test/python/cmakelists.txt 
${TEST_BLENDER_EXE_BARE} and ${TEST_BLENDER_EXE} are flat out wrong, but for 
some reason this doesn't matter for most tests, cause ctest will actually go 
out and look for the executable and fix the path for you *BUT* only for the 
command, if you use them in any of the parameters it'll happily pass on the 
wrong path.
3) on linux you can just run a .py file, windows is not as awesome and needs to 
be told to run it with pyton.
4) had to use the NAME/COMMAND long form of add_test otherwise 
$ doesn't get expanded, why? beats me.
5) missing idiff.exe for msvc2015/x64 in the libs folder.

This patch addresses 1-4 , but given I have no working Linux build environment, 
I'm unsure if it'll break anything there

5 has been fixed in rBL61751

Reviewers: juicyfruit, brecht, sergey

Reviewed By: sergey

Subscribers: Blendify

Tags: #cycles, #automated_testing

Differential Revision: https://developer.blender.org/D2367

===

M   build_files/cmake/Modules/GTestTesting.cmake
M   build_files/cmake/macros.cmake
M   build_files/cmake/platform/platform_win32_msvc.cmake
M   intern/cycles/test/CMakeLists.txt
M   make.bat
M   tests/gtests/CMakeLists.txt
M   tests/gtests/blenlib/BLI_string_test.cc
M   tests/gtests/testing/CMakeLists.txt
M   tests/python/CMakeLists.txt

===

diff --git a/build_files/cmake/Modules/GTestTesting.cmake 
b/build_files/cmake/Modules/GTestTesting.cmake
index 96c06ef8eb..0732e10133 100644
--- a/build_files/cmake/Modules/GTestTesting.cmake
+++ b/build_files/cmake/Modules/GTestTesting.cmake
@@ -45,7 +45,7 @@ macro(BLENDER_SRC_GTEST_EX NAME SRC EXTRA_LIBS DO_ADD_TEST)
  RUNTIME_OUTPUT_DIRECTORY_DEBUG   
"${TESTS_OUTPUT_DIR}"
  INCLUDE_DIRECTORIES  
"${TEST_INC}")
if(${DO_ADD_TEST})
-   add_test(${NAME}_test ${TESTS_OUTPUT_DIR}/${NAME}_test)
+   add_test(NAME ${NAME}_test COMMAND 
${TESTS_OUTPUT_DIR}/${NAME}_test WORKING_DIRECTORY $)
endif()
endif()
 endmacro()
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 2e3a190706..09428953a4 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -416,14 +416,7 @@ function(setup_liblinks
target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES})
endif()
if(WITH_OPENSUBDIV OR WITH_CYCLES_OPENSUBDIV)
-   if(WIN32 AND NOT UNIX)
-   file_list_suffix(OPENSUBDIV_LIBRARIES_DEBUG 
"${OPENSUBDIV_LIBRARIES}" "_d")
-   target_link_libraries_debug(${target} 
"${OPENSUBDIV_LIBRARIES_DEBUG}")
-   target_link_libraries_optimized(${target} 
"${OPENSUBDIV_LIBRARIES}")
-   unset(OPENSUBDIV_LIBRARIES_DEBUG)
-   else()
target_link_libraries(${target} ${OPENSUBDIV_LIBRARIES})
-   endif()
endif()
if(WITH_OPENVDB)
target_link_libraries(${target} ${OPENVDB_LIBRARIES} 
${TBB_LIBRARIES})
diff --git a/build_files/cmake/platform/platform_win32_msvc.cmake 
b/build_files/cmake/platform/platform_win32_msvc.cmake
index 3b50351a13..1a266df779 100644
--- a/build_files/cmake/platform/platform_win32_msvc.cmake
+++ b/build_files/cmake/platform/platform_win32_msvc.cmake
@@ -446,10 +446,14 @@ if(WITH_MOD_CLOTH_ELTOPO)
 endif()
 
 if(WITH_OPENSUBDIV OR WITH_CYCLES_OPENSUBDIV)
-   set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
-   set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
-   set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBPATH}/osdCPU.lib 
${OPENSUBDIV_LIBPATH}/osdGPU.lib)
-   find_package(OpenSubdiv)
+set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
+set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
+set(OPENSUBDIV_LIBRARIESoptimized ${OPENSUBDIV_LIBPATH}/osdCPU.lib 
+optimized ${OPENSUBDIV_LIBPATH}/osdGPU.lib
+debug ${OPENSUBDIV_LIBPATH}/osdCPU_d.lib 
+debug ${OPENSUBDIV_LIBPATH}/osdGPU_d.lib
+)
+windows_find_package(OpenSubdiv)
 endif()
 
 if(WITH_SDL)
diff --git a/intern/cycles/test/CMakeLists.txt 
b/intern/cycles/test/CMakeLists.txt
index 

[Bf-blender-cvs] SVN commit: /data/svn/repos/bf-blender [61782] trunk/lib/tests/layers/layers_object_copy_duplicate.json: Unittest file for render layers (2.8)

2017-01-25 Thread Dalai Felinto
Revision: 61782
  https://developer.blender.org/rBL61782
Author:   dfelinto
Date: 2017-01-25 17:36:50 +0100 (Wed, 25 Jan 2017)
Log Message:
---
Unittest file for render layers (2.8)

Added Paths:
---
trunk/lib/tests/layers/layers_object_copy_duplicate.json

Added: trunk/lib/tests/layers/layers_object_copy_duplicate.json
===
--- trunk/lib/tests/layers/layers_object_copy_duplicate.json
(rev 0)
+++ trunk/lib/tests/layers/layers_object_copy_duplicate.json2017-01-25 
16:36:50 UTC (rev 61782)
@@ -0,0 +1,613 @@
+[
+"Master Collection",
+{
+"collections": {
+"1": {
+"collections": {
+"sub-zero": {
+"collections": {
+"scorpion": {
+"collections": {},
+"filter": "",
+"filter_objects": [],
+"name": "scorpion",
+"objects": [
+"T.3c",
+"T.3c.001"
+]
+}
+},
+"filter": "",
+"filter_objects": [],
+"name": "sub-zero",
+"objects": [
+"T.3b"
+]
+}
+},
+"filter": "",
+"filter_objects": [],
+"name": "1",
+"objects": [
+"T.1a"
+]
+},
+"2": {
+"collections": {},
+"filter": "",
+"filter_objects": [],
+"name": "2",
+"objects": [
+"T.2a"
+]
+},
+"3": {
+"collections": {},
+"filter": "",
+"filter_objects": [],
+"name": "3",
+"objects": [
+"T.3,5a",
+"T.3d",
+"T.3c",
+"T.3b",
+"T.3a",
+"T.3c.001"
+]
+},
+"4": {
+"collections": {},
+"filter": "",
+"filter_objects": [],
+"name": "4",
+"objects": [
+"T.4a"
+]
+},
+"5": {
+"collections": {},
+"filter": "",
+"filter_objects": [],
+"name": "5",
+"objects": [
+"T.3,5a",
+"T.5a"
+]
+}
+},
+"filter": "",
+"filter_objects": [],
+"name": "Master Collection",
+"objects": []
+}
+]{
+"1,2": {
+"active_object": "",
+"collections": {
+"1": {
+"collections": {
+"sub-zero": {
+"collections": {
+"scorpion": {
+"collections": {},
+"is_folded": true,
+"is_selectable": true,
+"is_visible": true,
+"name": "scorpion",
+"objects": [
+"T.3c",
+"T.3c.001"
+]
+}
+},
+"is_folded": true,
+"is_selectable": true,
+"is_visible": true,
+"name": "sub-zero",
+"objects": [
+"T.3b"
+]
+}
+},
+"is_folded": true,
+"is_selectable": true,
+"is_visible": true,
+"name": "1",
+"objects": [
+"T.1a"
+]
+},
+"2": {
+"collections": {},
+"is_folded": true,
+"is_selectable": true,
+"is_visible": true,
+"name": "2",
+"objects": [
+"T.2a"
+]
+}
+},
+"engine": "BLENDER_RENDER",
+"name": "1,2",
+"objects": [
+"T.1a",
+"T.2a",
+"T.3b",
+"T.3c",
+"T.3c.001"
+]
+},
+"1-3": {
+"active_object": "",
+"collections": {
+

[Bf-blender-cvs] [e5482f986c] master: Fix T50115: stereoscopic video file memory leak

2017-01-25 Thread Dalai Felinto
Commit: e5482f986cab62f77eec441df80fb622cbb5f177
Author: Dalai Felinto
Date:   Wed Jan 25 15:15:37 2017 +0100
Branches: master
https://developer.blender.org/rBe5482f986cab62f77eec441df80fb622cbb5f177

Fix T50115: stereoscopic video file memory leak

===

M   source/blender/render/intern/source/pipeline.c

===

diff --git a/source/blender/render/intern/source/pipeline.c 
b/source/blender/render/intern/source/pipeline.c
index aff0d2cf15..52eca5f700 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -3440,7 +3440,7 @@ bool RE_WriteRenderViewsMovie(
ok = mh->append_movie(movie_ctx_arr[0], rd, preview ? 
scene->r.psfra : scene->r.sfra, scene->r.cfra, (int *) ibuf_arr[2]->rect,
  ibuf_arr[2]->x, ibuf_arr[2]->y, "", 
reports);
 
-   for (i = 0; i < 2; i++) {
+   for (i = 0; i < 3; i++) {
/* imbuf knows which rects are not part of ibuf */
IMB_freeImBuf(ibuf_arr[i]);
}

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ced20b74e5] master: Fix T50032: Wrong render result when same image is used with and without alpha

2017-01-25 Thread Sergey Sharybin
Commit: ced20b74e58f3dd33840f2a62f6f1f19714b35d7
Author: Sergey Sharybin
Date:   Wed Jan 25 14:02:59 2017 +0100
Branches: master
https://developer.blender.org/rBced20b74e58f3dd33840f2a62f6f1f19714b35d7

Fix T50032: Wrong render result when same image is used with and without alpha

===

M   intern/cycles/blender/blender_shader.cpp
M   intern/cycles/render/image.cpp
M   intern/cycles/render/image.h
M   intern/cycles/render/nodes.cpp

===

diff --git a/intern/cycles/blender/blender_shader.cpp 
b/intern/cycles/blender/blender_shader.cpp
index f63f94ab37..f6ec015e1b 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -640,7 +640,8 @@ static ShaderNode *add_node(Scene *scene,
image->filename.string(),
image->builtin_data,
get_image_interpolation(b_image_node),
-   get_image_extension(b_image_node));
+   get_image_extension(b_image_node),
+   image->use_alpha);
}
}
image->color_space = 
(NodeImageColorSpace)b_image_node.color_space();
@@ -686,7 +687,8 @@ static ShaderNode *add_node(Scene *scene,
env->filename.string(),
env->builtin_data,
get_image_interpolation(b_env_node),
-   EXTENSION_REPEAT);
+   EXTENSION_REPEAT,
+   env->use_alpha);
}
}
env->color_space = 
(NodeImageColorSpace)b_env_node.color_space();
@@ -823,7 +825,8 @@ static ShaderNode *add_node(Scene *scene,
point_density->filename.string(),
point_density->builtin_data,
point_density->interpolation,
-   EXTENSION_CLIP);
+   EXTENSION_CLIP,
+   true);
}
node = point_density;
 
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index ab830b19c5..fd8a126220 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -258,12 +258,14 @@ static bool image_equals(ImageManager::Image *image,
  const string& filename,
  void *builtin_data,
  InterpolationType interpolation,
- ExtensionType extension)
+ ExtensionType extension,
+ bool use_alpha)
 {
return image->filename == filename &&
   image->builtin_data == builtin_data &&
   image->interpolation == interpolation &&
-  image->extension == extension;
+  image->extension == extension &&
+  image->use_alpha == use_alpha;
 }
 
 int ImageManager::add_image(const string& filename,
@@ -305,7 +307,8 @@ int ImageManager::add_image(const string& filename,
   filename,
   builtin_data,
   interpolation,
-  extension))
+  extension,
+  use_alpha))
{
if(img->frame != frame) {
img->frame = frame;
@@ -377,7 +380,8 @@ void ImageManager::remove_image(int flat_slot)
 void ImageManager::remove_image(const string& filename,
 void *builtin_data,
 InterpolationType interpolation,
-ExtensionType extension)
+ExtensionType extension,
+bool use_alpha)
 {
size_t slot;
 
@@ -387,7 +391,8 @@ void ImageManager::remove_image(const string& filename,
  filename,
  builtin_data,
  interpolation,
- extension))
+ extension,
+ use_alpha))
{
remove_image(type_index_to_flattened_slot(slot, 
(ImageDataType)type));
return;
@@ -403,7 +408,8 @@ 

[Bf-blender-cvs] [e29a6f739d] master: Fix T50512: Linked Backround scene with animation not updating with new depsgraph

2017-01-25 Thread Sergey Sharybin
Commit: e29a6f739de36f4d33cd37181a946345bd26503d
Author: Sergey Sharybin
Date:   Wed Jan 25 12:30:29 2017 +0100
Branches: master
https://developer.blender.org/rBe29a6f739de36f4d33cd37181a946345bd26503d

Fix T50512: Linked Backround scene with animation not updating with new 
depsgraph

Was missing relations for the set scenes.

Perhaps not ideal solution, but should be good enough for now.

===

M   source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc

===

diff --git 
a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
index 5742941735..af9eda1b5c 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
@@ -70,7 +70,7 @@ namespace DEG {
 void DepsgraphRelationBuilder::build_scene(Main *bmain, Scene *scene)
 {
if (scene->set) {
-   // TODO: link set to scene, especially our timesource...
+   build_scene(bmain, scene->set);
}
 
/* scene objects */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e4de6e87e1] master: Depsgraph: Do ID tag outside of build_scene

2017-01-25 Thread Sergey Sharybin
Commit: e4de6e87e1bb91c072ac2bb800214de006942801
Author: Sergey Sharybin
Date:   Wed Jan 25 12:28:27 2017 +0100
Branches: master
https://developer.blender.org/rBe4de6e87e1bb91c072ac2bb800214de006942801

Depsgraph: Do ID tag outside of build_scene

Otherwise it was possible to get ID tags cleared in the middle
of DEG construction when there are set scenes used.

===

M   source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M   source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M   source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
M   source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M   source/blender/depsgraph/intern/builder/deg_builder_relations.h
M   source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
M   source/blender/depsgraph/intern/depsgraph_build.cc

===

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index e312c4e0dc..3a9ae490c0 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -320,6 +320,23 @@ OperationDepsNode 
*DepsgraphNodeBuilder::find_operation_node(
 
 /*  Build functions for entity nodes  */
 
+void DepsgraphNodeBuilder::begin_build(Main *bmain) {
+   /* LIB_TAG_DOIT is used to indicate whether node for given ID was 
already
+* created or not. This flag is being set in add_id_node(), so functions
+* shouldn't bother with setting it, they only might query this flag 
when
+* needed.
+*/
+   BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false);
+   /* XXX nested node trees are not included in tag-clearing above,
+* so we need to do this manually.
+*/
+   FOREACH_NODETREE(bmain, nodetree, id) {
+   if (id != (ID *)nodetree) {
+   nodetree->id.tag &= ~LIB_TAG_DOIT;
+   }
+   } FOREACH_NODETREE_END
+}
+
 void DepsgraphNodeBuilder::build_group(Scene *scene,
Base *base,
Group *group)
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 9cb8bc5d45..803110c9c8 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -72,6 +72,8 @@ struct DepsgraphNodeBuilder {
DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph);
~DepsgraphNodeBuilder();
 
+   void begin_build(Main *bmain);
+
RootDepsNode *add_root_node();
IDDepsNode *add_id_node(ID *id);
TimeSourceDepsNode *add_time_source(ID *id);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
index bcd4bc5144..99e6169223 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
@@ -65,20 +65,6 @@ namespace DEG {
 
 void DepsgraphNodeBuilder::build_scene(Main *bmain, Scene *scene)
 {
-   /* LIB_TAG_DOIT is used to indicate whether node for given ID was 
already
-* created or not. This flag is being set in add_id_node(), so functions
-* shouldn't bother with setting it, they only might query this flag 
when
-* needed.
-*/
-   BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false);
-   /* XXX nested node trees are not included in tag-clearing above,
-* so we need to do this manually.
-*/
-   FOREACH_NODETREE(bmain, nodetree, id) {
-   if (id != (ID *)nodetree)
-   nodetree->id.tag &= ~LIB_TAG_DOIT;
-   } FOREACH_NODETREE_END
-
/* scene ID block */
add_id_node(>id);
 
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index b5272d3acf..644f74e006 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -339,6 +339,22 @@ void 
DepsgraphRelationBuilder::add_forcefield_relations(const OperationKey ,
 
 /*  Functions to build relations between entities   */
 
+void DepsgraphRelationBuilder::begin_build(Main *bmain)
+{
+   /* LIB_TAG_DOIT is used to indicate whether node for given ID was 
already
+* created or not.
+*/
+   BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false);
+   /* XXX nested node trees are notr included in tag-clearing above,
+* so we need to do this manually.
+*/
+   FOREACH_NODETREE(bmain, nodetree, id) {
+ 

[Bf-blender-cvs] [95e9790704] render-layers: Fix compile error

2017-01-25 Thread Clément Foucault
Commit: 95e9790704c61cb26171f4c7c84673eacd5ac3bd
Author: Clément Foucault
Date:   Wed Jan 25 12:21:43 2017 +0100
Branches: render-layers
https://developer.blender.org/rB95e9790704c61cb26171f4c7c84673eacd5ac3bd

Fix compile error

===

M   source/blender/editors/mesh/mesh_navmesh.c

===

diff --git a/source/blender/editors/mesh/mesh_navmesh.c 
b/source/blender/editors/mesh/mesh_navmesh.c
index 3910ef40fd..cc6a5d578a 100644
--- a/source/blender/editors/mesh/mesh_navmesh.c
+++ b/source/blender/editors/mesh/mesh_navmesh.c
@@ -460,6 +460,7 @@ static Object *createRepresentation(bContext *C, struct 
recast_polyMesh *pmesh,
 
 static int navmesh_create_exec(bContext *C, wmOperator *op)
 {
+   Scene *scene = CTX_data_scene(C);
SceneLayer *sl = CTX_data_scene_layer(C);
LinkNode *obs = NULL;
Base *navmeshBase = NULL;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c727bc7743] blender-v2.78b-release: Fix T50517: Rendering expecting time is negative

2017-01-25 Thread Sergey Sharybin
Commit: c727bc7743442609cecf52644d6e235e0f82493b
Author: Sergey Sharybin
Date:   Wed Jan 25 11:18:12 2017 +0100
Branches: blender-v2.78b-release
https://developer.blender.org/rBc727bc7743442609cecf52644d6e235e0f82493b

Fix T50517: Rendering expecting time is negative

===

M   intern/cycles/render/tile.cpp

===

diff --git a/intern/cycles/render/tile.cpp b/intern/cycles/render/tile.cpp
index e59d0c843a..a493c3fa1c 100644
--- a/intern/cycles/render/tile.cpp
+++ b/intern/cycles/render/tile.cpp
@@ -157,7 +157,7 @@ void TileManager::set_samples(int num_samples_)
divider >>= 1;
}
 
-   state.total_pixel_samples = pixel_samples + 
get_num_effective_samples() * params.width*params.height;
+   state.total_pixel_samples = pixel_samples + 
(uint64_t)get_num_effective_samples() * params.width*params.height;
}
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8ea09252c8] master: Fix T50517: Rendering expecting time is negative

2017-01-25 Thread Sergey Sharybin
Commit: 8ea09252c8261c7057a130763c7f44bd45c9f9d2
Author: Sergey Sharybin
Date:   Wed Jan 25 11:18:12 2017 +0100
Branches: master
https://developer.blender.org/rB8ea09252c8261c7057a130763c7f44bd45c9f9d2

Fix T50517: Rendering expecting time is negative

===

M   intern/cycles/render/tile.cpp

===

diff --git a/intern/cycles/render/tile.cpp b/intern/cycles/render/tile.cpp
index e59d0c843a..a493c3fa1c 100644
--- a/intern/cycles/render/tile.cpp
+++ b/intern/cycles/render/tile.cpp
@@ -157,7 +157,7 @@ void TileManager::set_samples(int num_samples_)
divider >>= 1;
}
 
-   state.total_pixel_samples = pixel_samples + 
get_num_effective_samples() * params.width*params.height;
+   state.total_pixel_samples = pixel_samples + 
(uint64_t)get_num_effective_samples() * params.width*params.height;
}
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [212e5d60d3] render-layers: Merge remote-tracking branch 'origin/blender2.8' into render-layers

2017-01-25 Thread Dalai Felinto
Commit: 212e5d60d38ad951369d56cd6b1730c0e3022011
Author: Dalai Felinto
Date:   Wed Jan 25 10:17:38 2017 +0100
Branches: render-layers
https://developer.blender.org/rB212e5d60d38ad951369d56cd6b1730c0e3022011

Merge remote-tracking branch 'origin/blender2.8' into render-layers

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [99cfad6a01] blender2.8: Convert MBC_ API to Mesh (instead of derived mesh) and move it to mesh_render

2017-01-25 Thread Dalai Felinto
Commit: 99cfad6a015715a090fa2e1d808196dd1a02b390
Author: Dalai Felinto
Date:   Wed Jan 25 09:16:29 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB99cfad6a015715a090fa2e1d808196dd1a02b390

Convert MBC_ API to Mesh (instead of derived mesh) and move it to mesh_render

This includes a few fixes in the MBC_ api.

The idea here is for this to be the only interface the render engines
will deal with for the meshes.

If we need to expose special options for sculpting engine we refactor
this accordingly. But for now we are shaping this in a per-case base.

Note:
* We still need to hook up to the depsgraph to force clear/update of
batch_cache when mesh changes

(I'm waiting for Sergey Sharybin's depsgraph update for this though)

* Also ideally we could/should use BMesh directly instead of
DerivedMesh, but this will do for now.

Note 2:
In the end I renamed the `BKE_mesh_render` functions to `static
mesh_render`. We can re-expose them as BKE_* later once we need it.

Reviewers: merwin

Subscribers: fclem

Differential Revision: https://developer.blender.org/D2476

===

M   source/blender/blenkernel/BKE_DerivedMesh.h
A   source/blender/blenkernel/BKE_mesh_render.h
M   source/blender/blenkernel/CMakeLists.txt
M   source/blender/blenkernel/intern/DerivedMesh.c
M   source/blender/blenkernel/intern/mesh.c
A   source/blender/blenkernel/intern/mesh_render.c
M   source/blender/editors/space_view3d/drawobject.c
M   source/blender/gpu/gawain/batch.h
M   source/blender/makesdna/DNA_mesh_types.h

===

diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h 
b/source/blender/blenkernel/BKE_DerivedMesh.h
index 059f7309cf..784c76bffd 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -145,10 +145,6 @@ typedef DMDrawOption (*DMSetDrawOptions)(void *userData, 
int index);
 typedef DMDrawOption (*DMSetDrawOptionsMappedTex)(void *userData, int 
origindex, int mat_nr);
 typedef DMDrawOption (*DMSetDrawOptionsTex)(struct MTexPoly *mtexpoly, const 
bool has_vcol, int matnr);
 
-/* Cleanup callback type */
-typedef void (*DMCleanupBatchCache)(void *batchCache);
-void DM_set_batch_cleanup_callback(DMCleanupBatchCache);
-
 typedef enum DMDrawFlag {
DM_DRAW_USE_COLORS  = (1 << 0),
DM_DRAW_ALWAYS_SMOOTH   = (1 << 1),
@@ -176,6 +172,8 @@ typedef enum DMDirtyFlag {
 
/* check this with modifier dependsOnNormals callback to see if normals 
need recalculation */
DM_DIRTY_NORMALS = 1 << 2,
+
+   DM_MESH_BATCH_CACHE = 1 << 3,
 }  DMDirtyFlag;
 
 typedef struct DerivedMesh DerivedMesh;
@@ -187,7 +185,6 @@ struct DerivedMesh {
int deformedOnly; /* set by modifier stack if only deformed from 
original */
BVHCache *bvhCache;
struct GPUDrawObject *drawObject;
-   void *batchCache;
DerivedMeshType type;
float auto_bump_scale;
DMDirtyFlag dirty;
diff --git a/source/blender/blenkernel/BKE_mesh_render.h 
b/source/blender/blenkernel/BKE_mesh_render.h
new file mode 100644
index 00..8a2b3f9d9e
--- /dev/null
+++ b/source/blender/blenkernel/BKE_mesh_render.h
@@ -0,0 +1,42 @@
+/*
+ * * BEGIN GPL LICENSE BLOCK *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation, Mike Erwin, Dalai Felinto
+ *
+ * * END GPL LICENSE BLOCK *
+ */
+#ifndef __BKE_MESH_RENDER_H__
+#define __BKE_MESH_RENDER_H__
+
+/** \file BKE_mesh_render.h
+ *  \ingroup bke
+ */
+
+struct Batch;
+struct Mesh;
+
+void BKE_mesh_batch_cache_free(struct Mesh *me);
+struct Batch *BKE_mesh_batch_cache_get_all_edges(struct Mesh *me);
+struct Batch *BKE_mesh_batch_cache_get_all_triangles(struct Mesh *me);
+struct Batch *BKE_mesh_batch_cache_get_all_verts(struct Mesh *me);
+struct Batch *BKE_mesh_batch_cache_get_fancy_edges(struct Mesh *me);
+struct Batch *BKE_mesh_batch_cache_get_overlay_edges(struct Mesh *me);
+
+#endif /* __BKE_MESH_RENDER_H__ */
diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt