Revision 2ebe4f6 by Sergey Sharybin January 13, 2014, 10:33 (GMT) |
Compilation error fix and strict warning silence for previous commits |
Revision a8b3abc by Sergey Sharybin January 13, 2014, 10:29 (GMT) |
Remove direct lattice modifiers calc from the drawing code Same as mballs and curves it was only to work around DAG stupidness which hopefully was fixed in one of the previous commits. From quick tests everything works fine, if something is broken now poke me to find a proper solution. |
Revision d01bb0b by Sergey Sharybin January 13, 2014, 10:27 (GMT) |
Avoid memcpy to self when validating UV layer name |
Revision 63095e4 by Sergey Sharybin January 13, 2014, 10:20 (GMT) |
Remove direct mball creation from object conversion Same as previous commit, mball shall be visible before conversion meaning it is to be evaluated already. |
Revision b82cce0 by Sergey Sharybin January 13, 2014, 10:18 (GMT) |
Remove direct mball creation from the drawing code This is the same case as curves, and really this is now totally up to DAG, If something fails, poke me to fix the DAG. |
Revision 881fb43 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Make bvhutil safe for multi-threaded usage There were couple of reasons why it wasn't safe for usage from multiple threads. First of all, it was trying to cache BVH in derived mesh, which wasn't safe because multiple threads might have requested BVH tree and simultaneous reading and writing to the cache became a big headache. Solved this with RW lock so now access to BVH cache is safe. Another issue is causes by the fact that it's not guaranteed DM to have vert/edge/face arrays pre-allocated and when one was calling functions like getVertDataArray() array could have been allocated and marked as temporary. This is REALLY bad, because NO ONE is ever allowed to modify data which doesn't belong to him. This lead to situations when multiple threads were using BVH tree and they run into race condition with this temporary allocated arrays. Now bvhtree owns allocated arrays and keeps track of them, so no race condition happens with temporary data stored in the derived mesh. This solved threading issues and likely wouldn't introduce noticeable slowdown. Even when DM was keeping track of this arrays, they were re-allocated on every BVH creation anyway, because those arrays were temporary and were freed with dm->release() call. We might re-consider this a bit and make it so BVH trees are allocated when DM itself is being allocated based on the DAG layout, but that i'd consider an optimization and not something we need to do 1st priority. Fixes crash happening with 05_4g_track.blend from Mango after the threaded object update landed to master. |
Revision bc98949 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Fix T38139: Objects which are in cyclic dependency are not updated Graph traversal which is based on counting parents which are still to be updated fails in cases there are cycles in the graph. If there are cyclic dependencies in the scene all the objects from the cycles will be updated in a single thread now one by one. This makes blender behave the same way as it was before multi-threaded DAG landed to master. This needed to tweak depsgraph a bit so now dag_check_cycle() sets is_acyclic field of DAG forest if there are cycles in the graph. TODO: It might be possible to save some time on evaluation when all the tagged objects were updated in multi-threaded DAG traversal. |
Revision e618d82 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Fix T38054: High CPU usage with many objects This is a regression since threaded dependency graph landed to master. Root of the issue goes to the loads of graph preparation being done even if there's nothing to be updated. The idea of this change is to use ID type recalc bits to determine whether there're objects to be updated. Generally speaking, we now check object and object data datablocks with DAG_id_type_tagged() and if there's no such IDs tagged we skip the whole task pool creation and so, The only difficult aspect was that in some circumstances it was possible that there are tagged objects but nothing in ID recalc bit fields. There were several different circumstances when it was possible: * When one assigns object->recalc flag directly DAG flush didn't set corresponding bits to ID recalc bits. Partially it is fixed by making it so flush will set bitfield, but also for object types there's no reason to assign recalc flag directly. Using generic DAG_id_type_tag works almost the same fast as direct assignment, ensures all the bitflags are set properly and for the long run it seems it's what we would actually want to. * DAG_on_visible_update() didn't set recalc bits at all. * Some areas were checking for object->recalc != 0, however it is was possible that object recalc flag contains PSYS_RECALC_CHILD which was never cleaned from there. No idea why would we need to assign such a flag when enabling scene simplification, this is to be investigated separately. * It is possible that scene_update_post and frame_update_post handlers will modify objects. The issue is that DAG_ids_clear_recalc is called just after callbacks, which leaves objects with recalc flags but no corresponding bit in ID recalc bitfield. This leads to some kind of regression when using ID type tag fields to check whether there objects to be updated internally comparing threaded DAG with legacy one. For now let's have a workaround which will preserve tag for ID_OB if there're objects with OB_RECALC_ALL bits. This keeps behavior unchanged comparing with 2.69 release. |
Revision ac077f0 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from array modifier First of all, it was needed to have that set scenes fix which was done recently so curve is being evaluated properly on file load. And last but not least, also needed to tag DAG node to evaluate path regardless to curve datablock settings so curve length is always known. |
Revision ce7e6ce by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from constraints Since recent DAG commit for set scenes in DAG_on_visible_update() it seems there're no longer issues with missing curve_cache after file load. |
Revision f00f959 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from curve deform This solves threading conflict which happens when having multiple objects using Curve Deform modifier with the same curve datablock. This conflict was caused by the fact that curve_deform_verts() used to temporary override curve's flags to make it path is there. Actually, it was setting CU_FOLLOW flag temporary which was only used where_on_path() (only in terms that this temporary assignment only affected this function) but it is now commented out for a while, so no reason to set this flag temporary, If it's ever to be done, we'll need to pass flags as an additional function argument. For the path creation i've extended DegNode structure which now holds extra bits which indicates what additional data depending on the graph topology is to be evaluated. Currently this is only used to indicate that curve needs path to be evaluated regardless to cu->flag state. This is so Curve Deform modifier is always happy. In the future this flag might also be used to indicate whether bmesh verts are to update (see recent commit to 3-vertex parent crash fix) or to indicate that the object is the motherball etc. |
Revision f86fbc4 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from BKE_vfont_to_curve_ex() This goes back to ancient era again and such a call isn't safe for threading and really DAG is to make it sure display list for dependencies is always there. |
Revision 9d88203 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Code cleanup: no need to check display list elements in texture space match |
Revision 405cab9 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from object conversion If the object is visible and editable it means there's no way DAG to fail to create needed display lists. |
Revision b5592d8 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from bevel code BKE_curve_bevel_make() is only used from object_handle_update() friends and never called directly. This means if there's no display list ready for the bevel object it's something wrong happened with DAG. In fact, this check goes back to ancient era and from tests it appears this check is no longer needed. |
Revision ba15dd5 by Sergey Sharybin January 13, 2014, 09:57 (GMT) |
Remove direct displist creation from drawing code It was some kind of workaround for DAG glitch in 2009 (commit hash 8c5c7ebb0) and according to the comment was needed to make select outline show immediately. After some tests it appears DAG behaves almost fine now (just needed to make it so layer is flushed properly to the set scene) and no reason to have rather confusing call in the code. |
January 13, 2014, 09:45 (GMT) |
UI: remove create new directory popup for button in file browser header. We do keep it when typing an new directory name in the directory text field. Reviewed By: brecht, billrey Differential Revision: https://developer.blender.org/D188 |
Revision 7ae1949 by Campbell Barton January 13, 2014, 09:39 (GMT) |
Select Random: add option to de-select also made metaball operator behave like the others. Path originally from Walid Shouman, with own edits. |
January 13, 2014, 09:36 (GMT) |
Fix cycles standalone compile on some systems, CMAKE_DL_LIBS should be enough. Reviewed By: brecht Differential Revision: https://developer.blender.org/D205 |
Revision 61ff3df by Campbell Barton January 13, 2014, 04:31 (GMT) |
Code Cleanup: spelling |
|
|
|


Master Commits
MiikaHweb | 2003-2021