[Bf-blender-cvs] [9a440cd] soc-2016-cycles_denoising: Cycles: Improve tile highlighting when denoising after rendering
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
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
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
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
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
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
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
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
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
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
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)
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
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