[Bf-blender-cvs] [9a440cd] soc-2016-cycles_denoising: Cycles: Improve tile highlighting when denoising after rendering

2016-11-25 Thread Lukas Stockner
Commit: 9a440cd9df9c5d2cb3cf5c88f329bfbf170f964c
Author: Lukas Stockner
Date:   Thu Nov 24 13:45:53 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB9a440cd9df9c5d2cb3cf5c88f329bfbf170f964c

Cycles: Improve tile highlighting when denoising after rendering

===

M   intern/cycles/render/session.cpp

===

diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 84c8434..3d3f0a2 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -459,6 +459,7 @@ bool Session::acquire_tile(Device *tile_device, RenderTile& 
rtile)
rtile.buffer = tile->buffers->buffer.device_pointer;
rtile.rng_state = tile->buffers->rng_state.device_pointer;
rtile.buffers = tile->buffers;
+   rtile.sample = 0;
 
/* this will tag tile as IN PROGRESS in blender-side render pipeline,
 * which is needed to highlight currently rendering tile before first

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


[Bf-blender-cvs] [2549e26] soc-2016-cycles_denoising: Cycles: Sync new filter settings when using denoising after rendering

2016-11-25 Thread Lukas Stockner
Commit: 2549e26f859fc67e6e43c99e35caa095b94ca898
Author: Lukas Stockner
Date:   Thu Nov 24 13:42:25 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB2549e26f859fc67e6e43c99e35caa095b94ca898

Cycles: Sync new filter settings when using denoising after rendering

===

M   intern/cycles/blender/blender_session.cpp
M   intern/cycles/render/session.cpp
M   intern/cycles/render/session.h

===

diff --git a/intern/cycles/blender/blender_session.cpp 
b/intern/cycles/blender/blender_session.cpp
index fa33a9d..f0ef61b 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -1397,10 +1397,15 @@ void BlenderSession::denoise(BL::RenderResult& b_rr)
BL::RenderSettings::layers_iterator b_s_layer_iter;
int half_window = -1;
float filter_strength = 0.0f;
+   float weight_adjust = 0.0f;
+   bool filter_nlm, filter_gradient;
for(r.layers.begin(b_s_layer_iter); b_s_layer_iter != 
r.layers.end(); ++b_s_layer_iter) {
if(b_s_layer_iter->name() == b_layer_iter->name()) {
half_window = b_s_layer_iter->half_window();
filter_strength = 
b_s_layer_iter->filter_strength();
+   weight_adjust = 
b_s_layer_iter->filter_weighting_adjust();
+   filter_nlm = 
b_s_layer_iter->filter_use_nlm_weights();
+   filter_gradient = 
b_s_layer_iter->filter_gradients();
break;
}
}
@@ -1409,6 +1414,10 @@ void BlenderSession::denoise(BL::RenderResult& b_rr)
session->params.half_window = half_window;
session->params.samples = get_int(cscene, "samples");
session->params.filter_strength = powf(2.0f, filter_strength);
+   session->params.filter_weight_adjust = powf(2.0f, 
weight_adjust);
+   session->params.filter_gradient = filter_gradient;
+   session->params.filter_nlm = filter_nlm;
+   if(filter_nlm) session->params.filter_weight_adjust /= 2.0f;
 
session->buffers = 
BlenderSync::get_render_buffer(session->device, *b_layer_iter, b_rr, 
session->params.samples);
 
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 568405b..84c8434 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -807,6 +807,9 @@ void Session::run_denoise()
kernel_data.film.prev_frames = params.prev_frames;
if(scene == NULL) {
kernel_data.integrator.filter_strength = 
params.filter_strength;
+   kernel_data.integrator.weighting_adjust = 
params.filter_weight_adjust;
+   kernel_data.integrator.use_gradients = 
params.filter_gradient;
+   kernel_data.integrator.use_nlm_weights = 
params.filter_nlm;
}
device->const_copy_to("__data", _data, 
sizeof(kernel_data));
 
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index edebb65..2f0597a 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -65,6 +65,9 @@ public:
bool only_denoise;
int half_window;
float filter_strength;
+   float filter_weight_adjust;
+   bool filter_nlm;
+   bool filter_gradient;
int prev_frames;
 
double cancel_timeout;
@@ -97,6 +100,9 @@ public:
only_denoise = false;
half_window = 8;
filter_strength = 1.0f;
+   filter_weight_adjust = 1.0f;
+   filter_nlm = false;
+   filter_gradient = false;
prev_frames = 0;
 
cancel_timeout = 0.1;
@@ -125,6 +131,9 @@ public:
&& only_denoise == params.only_denoise
&& half_window == params.half_window
&& filter_strength == params.filter_strength
+   && filter_weight_adjust == params.filter_weight_adjust
+   && filter_nlm == params.filter_nlm
+   && filter_gradient == params.filter_gradient
&& prev_frames == params.prev_frames
&& display_buffer_linear == params.display_buffer_linear
&& cancel_timeout == params.cancel_timeout

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


[Bf-blender-cvs] [9c779e6] soc-2016-cycles_denoising: Cycles: Properly initialize some denoising-related variables

2016-11-25 Thread Lukas Stockner
Commit: 9c779e605cc4d49fde13d6923f91dc79b558d122
Author: Lukas Stockner
Date:   Sat Nov 26 04:18:48 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB9c779e605cc4d49fde13d6923f91dc79b558d122

Cycles: Properly initialize some denoising-related variables

===

M   intern/cycles/render/film.cpp
M   intern/cycles/render/session.cpp

===

diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index 32a539f..afca94e 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -443,6 +443,9 @@ void Film::device_update(Device *device, DeviceScene 
*dscene, Scene *scene)
kfilm->pass_stride += pass.components;
}
 
+   kfilm->pass_denoising = 0;
+   kfilm->pass_no_denoising = 0;
+   kfilm->denoise_flag = 0;
kfilm->denoise_cross = 0;
if(denoising_passes) {
kfilm->pass_denoising = kfilm->pass_stride;
@@ -458,6 +461,7 @@ void Film::device_update(Device *device, DeviceScene 
*dscene, Scene *scene)
kfilm->use_light_pass = 1;
}
}
+
kfilm->num_frames = 1;
kfilm->prev_frames = 0;
 
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 3d3f0a2..3ef3224 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -803,15 +803,14 @@ void Session::run_denoise()
kernel_data.film.pass_stride = 
buffers->params.get_passes_size();
kernel_data.film.pass_denoising = 
buffers->params.get_denoise_offset();
kernel_data.film.pass_no_denoising = 
buffers->params.selective_denoising? kernel_data.film.pass_denoising+20 : 0;
+   kernel_data.film.denoise_cross = 0;
kernel_data.film.exposure = 1.0f;
kernel_data.film.num_frames = buffers->params.frames;
kernel_data.film.prev_frames = params.prev_frames;
-   if(scene == NULL) {
-   kernel_data.integrator.filter_strength = 
params.filter_strength;
-   kernel_data.integrator.weighting_adjust = 
params.filter_weight_adjust;
-   kernel_data.integrator.use_gradients = 
params.filter_gradient;
-   kernel_data.integrator.use_nlm_weights = 
params.filter_nlm;
-   }
+   kernel_data.integrator.filter_strength = params.filter_strength;
+   kernel_data.integrator.weighting_adjust = 
params.filter_weight_adjust;
+   kernel_data.integrator.use_gradients = params.filter_gradient;
+   kernel_data.integrator.use_nlm_weights = params.filter_nlm;
device->const_copy_to("__data", _data, 
sizeof(kernel_data));
 
/* Generate tiles. */

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


[Bf-blender-cvs] [e549000] soc-2016-cycles_denoising: Render API: Use RE_InitState for postprocessing operator

2016-11-25 Thread Lukas Stockner
Commit: e549000b3914c365d97e9c61a2db8d1fa9068758
Author: Lukas Stockner
Date:   Thu Nov 24 13:47:25 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rBe549000b3914c365d97e9c61a2db8d1fa9068758

Render API: Use RE_InitState for postprocessing operator

===

M   source/blender/editors/render/render_internal.c
M   source/blender/editors/render/render_opengl.c
M   source/blender/render/extern/include/RE_pipeline.h
M   source/blender/render/intern/source/envmap.c
M   source/blender/render/intern/source/external_engine.c
M   source/blender/render/intern/source/pipeline.c

===

diff --git a/source/blender/editors/render/render_internal.c 
b/source/blender/editors/render/render_internal.c
index 6af1626..11bebf9 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -1124,10 +1124,10 @@ static void render_view3d_startjob(void *customdata, 
short *stop, short *do_upda
/* initalize always */
if (use_border) {
rdata.mode |= R_BORDER;
-   RE_InitState(re, NULL, , NULL, rp->ar->winx, 
rp->ar->winy, );
+   RE_InitState(re, NULL, , NULL, NULL, 
rp->ar->winx, rp->ar->winy, );
}
else
-   RE_InitState(re, NULL, , NULL, rp->ar->winx, 
rp->ar->winy, NULL);
+   RE_InitState(re, NULL, , NULL, NULL, 
rp->ar->winx, rp->ar->winy, NULL);
}
 
if (orth)
diff --git a/source/blender/editors/render/render_opengl.c 
b/source/blender/editors/render/render_opengl.c
index 9097432..49b7464 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -695,7 +695,7 @@ static bool screen_opengl_render_init(bContext *C, 
wmOperator *op)
oglrender->iuser.ok = 1;
 
/* create render result */
-   RE_InitState(oglrender->re, NULL, >r, NULL, sizex, sizey, NULL);
+   RE_InitState(oglrender->re, NULL, >r, NULL, NULL, sizex, sizey, 
NULL);
 
/* create render views */
screen_opengl_views_setup(oglrender);
diff --git a/source/blender/render/extern/include/RE_pipeline.h 
b/source/blender/render/extern/include/RE_pipeline.h
index 141d3e1..f3279ba 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -244,7 +244,7 @@ struct RenderPass *RE_create_gp_pass(struct RenderResult 
*rr, const char *layern
 
 /* obligatory initialize call, disprect is optional */
 void RE_InitState(struct Render *re, struct Render *source, struct RenderData 
*rd,
-  struct SceneRenderLayer *srl,
+  struct SceneRenderLayer *srl, struct RenderResult *rr,
   int winx, int winy, rcti *disprect);
 void RE_ChangeResolution(struct Render *re, int winx, int winy, rcti 
*disprect);
 void RE_ChangeModeFlag(struct Render *re, int flag, bool clear);
diff --git a/source/blender/render/intern/source/envmap.c 
b/source/blender/render/intern/source/envmap.c
index d97e18d..5b41bde 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -150,7 +150,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->r.size = 100;
envre->r.yasp = envre->r.xasp = 1;

-   RE_InitState(envre, NULL, >r, NULL, cuberes, cuberes, NULL);
+   RE_InitState(envre, NULL, >r, NULL, NULL, cuberes, cuberes, 
NULL);
envre->main = re->main;
envre->scene = re->scene;/* unsure about this... */
envre->scene_color_manage = re->scene_color_manage;
diff --git a/source/blender/render/intern/source/external_engine.c 
b/source/blender/render/intern/source/external_engine.c
index 0c243d1..9561f2e 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -604,15 +604,9 @@ void RE_engine_postprocess(Scene *scene, Render *re, 
RenderResult *rr)
RenderEngine *engine = RE_engine_create(type);
 
engine->re = re;
-   engine->re->result = rr;
-   engine->re->r = scene->r;
-   engine->re->rectx = rr->rectx;
-   engine->re->recty = rr->recty;
-   engine->re->disprect.xmin = 0;
-   engine->re->disprect.xmin = 0;
-   engine->re->disprect.xmax = rr->rectx;
-   engine->re->disprect.xmax = rr->recty;
RE_parts_init(engine->re, false);
+
+   RE_InitState(engine->re, NULL, >r, NULL, rr, rr->rectx, 
rr->recty, NULL);
engine->tile_x = engine->re->partx;
engine->tile_y = engine->re->party;
 
diff --git a/source/blender/render/intern/source/pipeline.c 
b/source/blender/render/intern/source/pipeline.c
index 20e462d..98cd95e 100644
--- 

[Bf-blender-cvs] [94fa941] soc-2016-cycles_denoising: Cycles: Fix progress bar not appearing for denoising after rendering

2016-11-25 Thread Lukas Stockner
Commit: 94fa941f7f65b32e6c0a598ccb5f82e1e660d92a
Author: Lukas Stockner
Date:   Fri Nov 25 00:48:55 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB94fa941f7f65b32e6c0a598ccb5f82e1e660d92a

Cycles: Fix progress bar not appearing for denoising after rendering

===

M   source/blender/editors/interface/interface_templates.c
M   source/blender/editors/space_image/image_ops.c

===

diff --git a/source/blender/editors/interface/interface_templates.c 
b/source/blender/editors/interface/interface_templates.c
index bdad667..b8b46d0 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -3489,7 +3489,8 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
Scene *scene;
/* another scene can be rendering too, for example via 
compositor */
for (scene = CTX_data_main(C)->scene.first; scene; scene = 
scene->id.next) {
-   if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER)) {
+   if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER) ||
+   WM_jobs_test(wm, scene, WM_JOB_TYPE_POSTPROCESS)) {
handle_event = B_STOPRENDER;
icon = ICON_SCENE;
break;
diff --git a/source/blender/editors/space_image/image_ops.c 
b/source/blender/editors/space_image/image_ops.c
index 64085bd..e62b805 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -4049,7 +4049,7 @@ static int postprocess_invoke(bContext *C, wmOperator 
*op, const wmEvent *event)
RenderResult *rr = BKE_image_acquire_renderresult(scene, ima);
Render *re = RE_NewRender(scene->id.name);
 
-   if (WM_jobs_test(CTX_wm_manager(C), rr, WM_JOB_TYPE_POSTPROCESS))
+   if (WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_POSTPROCESS))
return OPERATOR_CANCELLED;
 
WM_jobs_kill_all_except(CTX_wm_manager(C), CTX_wm_screen(C));
@@ -4065,7 +4065,7 @@ static int postprocess_invoke(bContext *C, wmOperator 
*op, const wmEvent *event)
job->last_layer = 0;
job->sa = render_view_open(C, event->x, event->y, op->reports);
 
-   wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), rr, 
"Postprocess", WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS, 
WM_JOB_TYPE_POSTPROCESS);
+   wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, 
"Postprocess", WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS, 
WM_JOB_TYPE_POSTPROCESS);
WM_jobs_customdata_set(wm_job, job, postprocess_freejob);
WM_jobs_timer(wm_job, 0.2, NC_SCENE | ND_RENDER_RESULT, 0);
WM_jobs_callbacks(wm_job, postprocess_startjob, NULL, NULL, 
postprocess_endjob);
@@ -4075,7 +4075,7 @@ static int postprocess_invoke(bContext *C, wmOperator 
*op, const wmEvent *event)
RE_display_update_cb(re, job, postprocess_image_rect_update);
RE_progress_cb(re, job, postprocess_progress_update);
 
-   op->customdata = rr;
+   op->customdata = scene;
G.is_break = false;
 
WM_jobs_start(CTX_wm_manager(C), wm_job);
@@ -4088,9 +4088,9 @@ static int postprocess_invoke(bContext *C, wmOperator 
*op, const wmEvent *event)
 }
 
 static int postprocess_modal(bContext *C, wmOperator *op, const wmEvent 
*event) {
-   RenderResult *rr = (RenderResult*) op->customdata;
+   Scene *scene = (Scene*) op->customdata;
 
-   if (0 == WM_jobs_test(CTX_wm_manager(C), rr, WM_JOB_TYPE_POSTPROCESS)) {
+   if (0 == WM_jobs_test(CTX_wm_manager(C), scene, 
WM_JOB_TYPE_POSTPROCESS)) {
return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH;
}
 
@@ -4104,9 +4104,9 @@ static int postprocess_modal(bContext *C, wmOperator *op, 
const wmEvent *event)
 static void postprocess_cancel(bContext *C, wmOperator *op)
 {
wmWindowManager *wm = CTX_wm_manager(C);
-   RenderResult *rr = (RenderResult*) op->customdata;
+   Scene *scene = (Scene*) op->customdata;
 
-   WM_jobs_kill_type(wm, rr, WM_JOB_TYPE_POSTPROCESS);
+   WM_jobs_kill_type(wm, scene, WM_JOB_TYPE_POSTPROCESS);
 }
 
 void IMAGE_OT_postprocess(wmOperatorType *ot)

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


[Bf-blender-cvs] [e7bf6c6] soc-2016-cycles_denoising: Cycles: Fix post-processing not working again after it was cancelled before

2016-11-25 Thread Lukas Stockner
Commit: e7bf6c67b432d4dcd32f68d9306eb0273e1d0eca
Author: Lukas Stockner
Date:   Fri Nov 25 00:48:10 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rBe7bf6c67b432d4dcd32f68d9306eb0273e1d0eca

Cycles: Fix post-processing not working again after it was cancelled before

===

M   source/blender/editors/space_image/image_ops.c

===

diff --git a/source/blender/editors/space_image/image_ops.c 
b/source/blender/editors/space_image/image_ops.c
index b7ebd12..64085bd 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -3759,6 +3759,8 @@ static int postprocess_exec(bContext *C, wmOperator 
*UNUSED(op))
RenderResult *rr = BKE_image_acquire_renderresult(scene, ima);
Render *re = RE_NewRender(scene->id.name);
 
+   G.is_break = false;
+
RE_engine_postprocess(scene, re, rr);
 
BKE_image_release_renderresult(scene, ima);
@@ -4074,6 +4076,7 @@ static int postprocess_invoke(bContext *C, wmOperator 
*op, const wmEvent *event)
RE_progress_cb(re, job, postprocess_progress_update);
 
op->customdata = rr;
+   G.is_break = false;
 
WM_jobs_start(CTX_wm_manager(C), wm_job);

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


[Bf-blender-cvs] [9b9edf7] soc-2016-cycles_denoising: Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising

2016-11-25 Thread Lukas Stockner
Commit: 9b9edf7c73e0e1bfc988979ec8277ad769b93321
Author: Lukas Stockner
Date:   Sat Nov 26 04:19:34 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB9b9edf7c73e0e1bfc988979ec8277ad769b93321

Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising

===



===



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


[Bf-blender-cvs] [91e1376b] soc-2016-cycles_denoising: Cycles: Fix progress calculation while denoising after rendering

2016-11-25 Thread Lukas Stockner
Commit: 91e1376bf9049345baec1fc9206ffa0e3f9cb8f0
Author: Lukas Stockner
Date:   Sat Nov 26 03:29:48 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB91e1376bf9049345baec1fc9206ffa0e3f9cb8f0

Cycles: Fix progress calculation while denoising after rendering

===

M   intern/cycles/render/tile.cpp

===

diff --git a/intern/cycles/render/tile.cpp b/intern/cycles/render/tile.cpp
index 18e8e5b..55460be 100644
--- a/intern/cycles/render/tile.cpp
+++ b/intern/cycles/render/tile.cpp
@@ -502,6 +502,10 @@ bool TileManager::next()
 
 int TileManager::get_num_effective_samples()
 {
+   if(only_denoise) {
+   return 1;
+   }
+
return (range_num_samples == -1) ? num_samples
 : range_num_samples;
 }

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


[Bf-blender-cvs] [672c7d7] fracture_modifier: fixes / cleanup after static analysis of code which showed some potential issues

2016-11-25 Thread Martin Felke
Commit: 672c7d72c2642c9049047d4885d3a567c2664ae1
Author: Martin Felke
Date:   Fri Nov 25 21:00:33 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB672c7d72c2642c9049047d4885d3a567c2664ae1

fixes / cleanup after static analysis of code which showed some potential issues

===

M   extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
M   source/blender/blenkernel/intern/fracture.c
M   source/blender/modifiers/intern/MOD_fracture.c

===

diff --git 
a/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp 
b/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
index 8dffc91..f17b338 100644
--- a/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
+++ b/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
@@ -763,7 +763,7 @@ void
btFractureDynamicsWorld::breakDisconnectedParts( btFractureBody* fracObj)
}
 
unionFind.reset(index);
-   int numElem = unionFind.getNumElements();
+   //int numElem = unionFind.getNumElements();
for (i=0;im_connections.size();i++)
{
btConnection connection = fracObj->m_connections[i];
@@ -783,7 +783,7 @@ void
btFractureDynamicsWorld::breakDisconnectedParts( btFractureBody* fracObj)
unionFind.unite(tag0, tag1);
}
}
-   numElem = unionFind.getNumElements();
+   int numElem = unionFind.getNumElements();
 
index=0;
for (int ai=0;aineedsFree = 1;
(*dm_p)->release(*dm_p);
+   *dm_p = NULL;
}
 
-   *dm_p = BKE_shard_create_dm(p, true);
-
-   BKE_shard_free((*tempresults)[j], true);
-   (*tempresults)[j] = NULL;
+   if (p != NULL) {
+   *dm_p = BKE_shard_create_dm(p, true);
+   BKE_shard_free((*tempresults)[j], true);
+   (*tempresults)[j] = NULL;
+   }
}
(*i)++; //XXX remember to "double" the shard amount
}
@@ -783,14 +785,10 @@ static void do_prepare_cells(FracMesh *fm, cell *cells, 
int expected_shards, int
//skipping /deletion pass
for (i = 0; i < expected_shards; i++)
{
-   Shard *t = NULL;
if (fm->cancel == 1) {
break;
}
 
-   if (fm->last_shards && i < fm->shard_count)
-   t = fm->last_shards[i];
-
if (skipmap[i])
{
printf("Skipping shard: %d\n", i);
@@ -1221,7 +1219,7 @@ static void stroke_to_faces(FractureModifierData *fmd, 
BMesh** bm, bGPDstroke *g
if (lastv1)
{
BMFace* f;
-   float nvec[3], co1[3], co2[3];
+   float nvec[3] = {0.0f, 0.0f, 0.0f}, co1[3], 
co2[3];
 
/*also "extrude" this along the normal, 
no...use global axises instead*/
if (fmd->cutter_axis == MOD_FRACTURE_CUTTER_X)
@@ -1348,7 +1346,7 @@ static void do_intersect(FractureModifierData *fmd, 
Object* ob, Shard *t, short
 
(*shard_counts)[k] = shards;
//printf("k, shards: %d %d \n", k, shards);
-   shards = 0;
+   //shards = 0;
 }
 
 
@@ -2007,7 +2005,7 @@ DerivedMesh *BKE_shard_create_dm(Shard *s, bool 
doCustomData)
MLoop *mloops;
MPoly *mpolys;

-   dm  = CDDM_new(s->totvert, 0, 0, s->totloop, s->totpoly);
+   dm = CDDM_new(s->totvert, 0, 0, s->totloop, s->totpoly);
 
mverts = CDDM_get_verts(dm);
mloops = CDDM_get_loops(dm);
@@ -2553,6 +2551,8 @@ static MeshIsland* 
fracture_shard_to_island(FractureModifierData *fmd, Shard *s,
mi->vertco[j * 3 + 1] = mv->co[1];
mi->vertco[j * 3 + 2] = mv->co[2];
 
+   copy_v3_v3_short(no, mv->no);
+
mi->vertno[j * 3] = no[0];
mi->vertno[j * 3 + 1] = no[1];
mi->vertno[j * 3 + 2] = no[2];
diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index 933b418..a46d2f9 

[Bf-blender-cvs] [265e5de] master: Fix T50104, Race condition in SVMShaderManager::device_update_shader

2016-11-25 Thread lazydodo
Commit: 265e5def76cc08f633e8851236af1ee903d87ff0
Author: lazydodo
Date:   Fri Nov 25 12:02:37 2016 -0700
Branches: master
https://developer.blender.org/rB265e5def76cc08f633e8851236af1ee903d87ff0

Fix T50104, Race condition in SVMShaderManager::device_update_shader

===

M   intern/cycles/render/svm.cpp

===

diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index 9d3f49a..955b892 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -71,14 +71,13 @@ void SVMShaderManager::device_update_shader(Scene *scene,
scene->light_manager->need_update = true;
}
 
-   /* We only calculate offset and do re-allocation from the locked block,
-* actual copy we do after the lock is releases to hopefully gain some
-* percent of performance.
+   /* The copy needs to be done inside the lock, if another thread resizes 
the array 
+* while memcpy is running, it'll be copying into possibly 
invalid/freed ram. 
 */
nodes_lock_.lock();
size_t global_nodes_size = global_svm_nodes->size();
global_svm_nodes->resize(global_nodes_size + svm_nodes.size());
-   nodes_lock_.unlock();
+   
/* Offset local SVM nodes to a global address space. */
int4& jump_node = global_svm_nodes->at(shader->id);
jump_node.y = svm_nodes[0].y + global_nodes_size - 1;
@@ -88,6 +87,7 @@ void SVMShaderManager::device_update_shader(Scene *scene,
memcpy(_svm_nodes->at(global_nodes_size),
   _nodes[1],
   sizeof(int4) * (svm_nodes.size() - 1));
+   nodes_lock_.unlock();
 }
 
 void SVMShaderManager::device_update(Device *device, DeviceScene *dscene, 
Scene *scene, Progress& progress)

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


[Bf-blender-cvs] [5148fd7] fracture_modifier: typo fix

2016-11-25 Thread Martin Felke
Commit: 5148fd7f14853b21478cc31c3e900192653af9aa
Author: Martin Felke
Date:   Fri Nov 25 19:04:08 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB5148fd7f14853b21478cc31c3e900192653af9aa

typo fix

===

M   source/blender/blenkernel/intern/fracture_util.c

===

diff --git a/source/blender/blenkernel/intern/fracture_util.c 
b/source/blender/blenkernel/intern/fracture_util.c
index 3833a79..a10ce88 100644
--- a/source/blender/blenkernel/intern/fracture_util.c
+++ b/source/blender/blenkernel/intern/fracture_util.c
@@ -607,7 +607,7 @@ Shard *BKE_fracture_shard_boolean(Object *obj, DerivedMesh 
*dm_parent, Shard *ch
 
if (output_dm) {
output_dm->needsFree = 1;
-   output_dm->release(left_dm);
+   output_dm->release(output_dm);
output_dm = NULL;
}
}

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


[Bf-blender-cvs] [8dfff7d] fracture_modifier: partial crash fix for dynamic fractal fracture, can still crash in carve and bullet (todo)

2016-11-25 Thread Martin Felke
Commit: 8dfff7d339e746f7f2b50659b0db734e0e81f59c
Author: Martin Felke
Date:   Fri Nov 25 18:19:27 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB8dfff7d339e746f7f2b50659b0db734e0e81f59c

partial crash fix for dynamic fractal fracture, can still crash in carve and 
bullet (todo)

===

M   source/blender/blenkernel/intern/fracture.c
M   source/blender/blenkernel/intern/fracture_util.c

===

diff --git a/source/blender/blenkernel/intern/fracture.c 
b/source/blender/blenkernel/intern/fracture.c
index d53250e..5ab536b 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -558,7 +558,7 @@ static void handle_boolean_fractal(Shard* s, Shard* t, int 
expected_shards, Deri
 
/*continue with "halves", randomly*/
if ((*i) == 0) {
-   *dm_p = dm_parent;
+   *dm_p = CDDM_copy(dm_parent);
}
 
while (s == NULL || s2 == NULL) {
@@ -623,7 +623,7 @@ static void handle_boolean_fractal(Shard* s, Shard* t, int 
expected_shards, Deri
 
Shard *p = (*tempresults)[j];
 
-   if (*dm_p != dm_parent && *dm_p != NULL) {
+   if (*dm_p != NULL) {
(*dm_p)->needsFree = 1;
(*dm_p)->release(*dm_p);
}
@@ -700,12 +700,12 @@ static void do_prepare_cells(FracMesh *fm, cell *cells, 
int expected_shards, int
 
if ((algorithm == MOD_FRACTURE_BOOLEAN) || (algorithm == 
MOD_FRACTURE_BOOLEAN_FRACTAL)) {
MPoly *mpoly, *mp;
-   int totpoly, i;
+   int totpoly, po;
 
*dm_parent = BKE_shard_create_dm(p, true);
mpoly = (*dm_parent)->getPolyArray(*dm_parent);
totpoly = (*dm_parent)->getNumPolys(*dm_parent);
-   for (i = 0, mp = mpoly; i < totpoly; i++, mp++) {
+   for (po = 0, mp = mpoly; po < totpoly; po++, mp++) {
mp->flag &= ~ME_FACE_SEL;
}
}
@@ -893,7 +893,7 @@ static void parse_cells(cell *cells, int expected_shards, 
ShardID parent_id, Fra
if (!fm->last_shard_tree /*&& (fm->shard_count > 0)*/ && mode 
== MOD_FRACTURE_PREFRACTURED)
{
Shard *t;
-   int i = 0;
+   int ti = 0;
count = BLI_listbase_count(>shard_map);
fm->shard_count = count;
if (do_tree)
@@ -913,7 +913,7 @@ static void parse_cells(cell *cells, int expected_shards, 
ShardID parent_id, Fra
BLI_kdtree_insert(fm->last_shard_tree, 
i, t->raw_centroid);
}
fm->last_shards[i] = t;
-   i++;
+   ti++;
}
 
if (do_tree)
@@ -1025,8 +1025,7 @@ static void parse_cells(cell *cells, int expected_shards, 
ShardID parent_id, Fra
dm_p = NULL;
}
 
-   //if (p->shard_id == -2)
-   if (p && (parent_id == -2 /*|| parent_id == -1*/))
+   if (p && (parent_id == -2))// || p->shard_id == -2))
{
BLI_remlink_safe(>shard_map, p);
BKE_shard_free(p, true);
@@ -1063,11 +1062,11 @@ static void parse_cells(cell *cells, int 
expected_shards, ShardID parent_id, Fra
//printf("ADDED: %d %d %d\n", i, j, s->shard_id);
if (parent_id > -1)
{
-   int i = 0;
+   int si = 0;
MVert *v;
 
sub_v3_v3(s->centroid, pcentroid);
-   for (i = 0, v = s->mvert; i < s->totvert; i++, 
v++)
+   for (si = 0, v = s->mvert; si < s->totvert; 
si++, v++)
{
sub_v3_v3(v->co, pcentroid);
}
@@ -2025,7 +2024,7 @@ DerivedMesh *BKE_shard_create_dm(Shard *s, bool 
doCustomData)
CDDM_calc_normals_mapping(dm);
 
if (doCustomData) {
-   if (s->totvert > 1) {
+   if (s->totvert > 0) {
BKE_copy_customdata_layers(>vertData, >vertData, 
CD_MDEFORMVERT, s->totvert);
}
if (s->totloop > 0) {
diff --git a/source/blender/blenkernel/intern/fracture_util.c 
b/source/blender/blenkernel/intern/fracture_util.c
index 151cf5a..3833a79 100644
--- a/source/blender/blenkernel/intern/fracture_util.c
+++ b/source/blender/blenkernel/intern/fracture_util.c
@@ -402,13 +402,14 @@ static Shard *do_output_shard_dm(DerivedMesh** 

[Bf-blender-cvs] [bcd0d85] master: Math Lib: avoid temp array for rotate_m4

2016-11-25 Thread Campbell Barton
Commit: bcd0d8584fbd000a4b2b835f33b7c89fe15609fc
Author: Campbell Barton
Date:   Fri Nov 25 21:00:32 2016 +1100
Branches: master
https://developer.blender.org/rBbcd0d8584fbd000a4b2b835f33b7c89fe15609fc

Math Lib: avoid temp array for rotate_m4

No need to have temp array storage, avoid 2x loops.

===

M   source/blender/blenlib/intern/math_matrix.c

===

diff --git a/source/blender/blenlib/intern/math_matrix.c 
b/source/blender/blenlib/intern/math_matrix.c
index 7176686..9a60c67 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -1634,39 +1634,33 @@ void translate_m4(float mat[4][4], float Tx, float Ty, 
float Tz)
  */
 void rotate_m4(float mat[4][4], const char axis, const float angle)
 {
-   int col;
-   float temp[4] = {0.0f, 0.0f, 0.0f, 0.0f};
-   float cosine, sine;
+   const float angle_cos = cosf(angle);
+   const float angle_sin = sinf(angle);
 
assert(axis >= 'X' && axis <= 'Z');
 
-   cosine = cosf(angle);
-   sine   = sinf(angle);
switch (axis) {
case 'X':
-   for (col = 0; col < 4; col++)
-   temp[col] = cosine * mat[1][col] + sine * 
mat[2][col];
-   for (col = 0; col < 4; col++) {
-   mat[2][col] = -sine * mat[1][col] + cosine * 
mat[2][col];
-   mat[1][col] = temp[col];
+   for (int col = 0; col < 4; col++) {
+   float temp  =  angle_cos * mat[1][col] + 
angle_sin * mat[2][col];
+   mat[2][col] = -angle_sin * mat[1][col] + 
angle_cos * mat[2][col];
+   mat[1][col] =  temp;
}
break;
 
case 'Y':
-   for (col = 0; col < 4; col++)
-   temp[col] = cosine * mat[0][col] - sine * 
mat[2][col];
-   for (col = 0; col < 4; col++) {
-   mat[2][col] = sine * mat[0][col] + cosine * 
mat[2][col];
-   mat[0][col] = temp[col];
+   for (int col = 0; col < 4; col++) {
+   float temp  =  angle_cos * mat[0][col] - 
angle_sin * mat[2][col];
+   mat[2][col] =  angle_sin * mat[0][col] + 
angle_cos * mat[2][col];
+   mat[0][col] =  temp;
}
break;
 
case 'Z':
-   for (col = 0; col < 4; col++)
-   temp[col] = cosine * mat[0][col] + sine * 
mat[1][col];
-   for (col = 0; col < 4; col++) {
-   mat[1][col] = -sine * mat[0][col] + cosine * 
mat[1][col];
-   mat[0][col] = temp[col];
+   for (int col = 0; col < 4; col++) {
+   float temp  =  angle_cos * mat[0][col] + 
angle_sin * mat[1][col];
+   mat[1][col] = -angle_sin * mat[0][col] + 
angle_cos * mat[1][col];
+   mat[0][col] =  temp;
}
break;
}

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