From dac8b08f4cc2d832bd99d2397bcf73278286b30d Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Tue, 24 Apr 2018 10:28:38 +0200 Subject: [PATCH 1/5] Build deps: Fixed capitalisation of CMake modules path for OpenVDB. Before, OpenVDB would always build without BLOSC and TBB support on case-sensitive file systems. --- build_files/build_environment/patches/cmakelists_openvdb.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_files/build_environment/patches/cmakelists_openvdb.txt b/build_files/build_environment/patches/cmakelists_openvdb.txt index dd3e9c1a887..43161b8acff 100644 --- a/build_files/build_environment/patches/cmakelists_openvdb.txt +++ b/build_files/build_environment/patches/cmakelists_openvdb.txt @@ -8,7 +8,7 @@ project(OpenVDB) # -------------------------------------------------------------------------------- -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules") +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") # -------------------------------------------------------------------------------- From 0ab30f9e391ae4497e5e8e4009db02f4bf58810a Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Tue, 24 Apr 2018 13:23:52 +0200 Subject: [PATCH 2/5] Build deps: Fixed TBB build with GCC 6 and newer, turning off dead store elimination. --- build_files/build_environment/patches/cmakelists_tbb.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build_files/build_environment/patches/cmakelists_tbb.txt b/build_files/build_environment/patches/cmakelists_tbb.txt index 1be9ca25f6a..da9fd938943 100644 --- a/build_files/build_environment/patches/cmakelists_tbb.txt +++ b/build_files/build_environment/patches/cmakelists_tbb.txt @@ -88,6 +88,14 @@ elseif(WIN32) set(DISABLE_RTTI "/EHs- /GR- ") endif() +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-flifetime-dse=1" SUPPORTS_FLIFETIME) + if (SUPPORTS_FLIFETIME) + add_definitions(-flifetime-dse=1) + endif() +endif() + # Linker export definitions if (WIN32) add_custom_command(OUTPUT tbb.def From f1e6838376a0a07b5ce45d70ad18357c7c6cc2eb Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Tue, 24 Apr 2018 13:26:54 +0200 Subject: [PATCH 3/5] Build: Added explicit search for Blosc in CMake files. Unix build will now disable WITH_OPENVDB_BLOSC if Blosc libraries cannot be found. --- build_files/cmake/Modules/FindBlosc.cmake | 72 +++++++++++++++++++ build_files/cmake/macros.cmake | 2 +- .../cmake/platform/platform_unix.cmake | 4 ++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 build_files/cmake/Modules/FindBlosc.cmake diff --git a/build_files/cmake/Modules/FindBlosc.cmake b/build_files/cmake/Modules/FindBlosc.cmake new file mode 100644 index 00000000000..79590f11c4f --- /dev/null +++ b/build_files/cmake/Modules/FindBlosc.cmake @@ -0,0 +1,72 @@ +# - Find Blosc library +# Find the native Blosc includes and library +# This module defines +# BLOSC_INCLUDE_DIRS, where to find blosc.h, Set when +# Blosc is found. +# BLOSC_LIBRARIES, libraries to link against to use Blosc. +# BLOSC_ROOT_DIR, The base directory to search for Blosc. +# This can also be an environment variable. +# BLOSC_FOUND, If false, do not try to use Blosc. +# +# also defined, but not for general use are +# BLOSC_LIBRARY, where to find the Blosc library. + +#============================================================================= +# Copyright 2018 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If BLOSC_ROOT_DIR was defined in the environment, use it. +IF(NOT BLOSC_ROOT_DIR AND NOT $ENV{BLOSC_ROOT_DIR} STREQUAL "") + SET(BLOSC_ROOT_DIR $ENV{BLOSC_ROOT_DIR}) +ENDIF() + +SET(_blosc_SEARCH_DIRS + ${BLOSC_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/lib/blosc +) + +FIND_PATH(BLOSC_INCLUDE_DIR + NAMES + blosc.h + HINTS + ${_blosc_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(BLOSC_LIBRARY + NAMES + blosc + HINTS + ${_blosc_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set BLOSC_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(BLOSC DEFAULT_MSG + BLOSC_LIBRARY BLOSC_INCLUDE_DIR) + +IF(BLOSC_FOUND) + SET(BLOSC_LIBRARIES ${BLOSC_LIBRARY}) + SET(BLOSC_INCLUDE_DIRS ${BLOSC_INCLUDE_DIR}) +ELSE() + SET(BLOSC_BLOSC_FOUND FALSE) +ENDIF() + +MARK_AS_ADVANCED( + BLOSC_INCLUDE_DIR + BLOSC_LIBRARY +) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 107b29e0cc8..abf8da11c8e 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -425,7 +425,7 @@ function(setup_liblinks target_link_libraries(${target} ${OPENSUBDIV_LIBRARIES}) endif() if(WITH_OPENVDB) - target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${TBB_LIBRARIES}) + target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${TBB_LIBRARIES} ${BLOSC_LIBRARIES}) endif() if(WITH_CYCLES_OSL) target_link_libraries(${target} ${OSL_LIBRARIES}) diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 6796e254c27..75222b6663f 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -237,10 +237,14 @@ endif() if(WITH_OPENVDB) find_package_wrapper(OpenVDB) find_package_wrapper(TBB) + find_package_wrapper(Blosc) if(NOT OPENVDB_FOUND OR NOT TBB_FOUND) set(WITH_OPENVDB OFF) set(WITH_OPENVDB_BLOSC OFF) message(STATUS "OpenVDB not found, disabling it") + elseif(NOT BLOSC_FOUND) + set(WITH_OPENVDB_BLOSC OFF) + message(STATUS "Blosc not found, disabling it") endif() endif() From bb92d9a9466e4eb924d8be90ec5ddd4be2b70d95 Mon Sep 17 00:00:00 2001 From: Germano Date: Tue, 24 Apr 2018 09:48:14 -0300 Subject: [PATCH 4/5] BLI BVHTree Walk DFS: Decreases the size of the stack space used for the recursive function. Each parameter of the function is copied into the memory stack. This also brought an improvement in peformance of snapping functions between 5% and 12% in my tests. --- source/blender/blenlib/intern/BLI_kdopbvh.c | 34 ++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index 06e8ade68a2..44ff78ea71a 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -2015,29 +2015,31 @@ int BLI_bvhtree_range_query( /** \name BLI_bvhtree_walk_dfs * \{ */ +typedef struct BVHTree_WalkData { + BVHTree_WalkParentCallback walk_parent_cb; + BVHTree_WalkLeafCallback walk_leaf_cb; + BVHTree_WalkOrderCallback walk_order_cb; + void *userdata; +} BVHTree_WalkData; + /** * Runs first among nodes children of the first node before going to the next node in the same layer. * * \return false to break out of the search early. */ static bool bvhtree_walk_dfs_recursive( - BVHTree_WalkParentCallback walk_parent_cb, - BVHTree_WalkLeafCallback walk_leaf_cb, - BVHTree_WalkOrderCallback walk_order_cb, - const BVHNode *node, void *userdata) + BVHTree_WalkData *walk_data, + const BVHNode *node) { if (node->totnode == 0) { - return walk_leaf_cb((const BVHTreeAxisRange *)node->bv, node->index, userdata); + return walk_data->walk_leaf_cb((const BVHTreeAxisRange *)node->bv, node->index, walk_data->userdata); } else { /* First pick the closest node to recurse into */ - if (walk_order_cb((const BVHTreeAxisRange *)node->bv, node->main_axis, userdata)) { + if (walk_data->walk_order_cb((const BVHTreeAxisRange *)node->bv, node->main_axis, walk_data->userdata)) { for (int i = 0; i != node->totnode; i++) { - if (walk_parent_cb((const BVHTreeAxisRange *)node->children[i]->bv, userdata)) { - if (!bvhtree_walk_dfs_recursive( - walk_parent_cb, walk_leaf_cb, walk_order_cb, - node->children[i], userdata)) - { + if (walk_data->walk_parent_cb((const BVHTreeAxisRange *)node->children[i]->bv, walk_data->userdata)) { + if (!bvhtree_walk_dfs_recursive(walk_data, node->children[i])) { return false; } } @@ -2045,11 +2047,8 @@ static bool bvhtree_walk_dfs_recursive( } else { for (int i = node->totnode - 1; i >= 0; i--) { - if (walk_parent_cb((const BVHTreeAxisRange *)node->children[i]->bv, userdata)) { - if (!bvhtree_walk_dfs_recursive( - walk_parent_cb, walk_leaf_cb, walk_order_cb, - node->children[i], userdata)) - { + if (walk_data->walk_parent_cb((const BVHTreeAxisRange *)node->children[i]->bv, walk_data->userdata)) { + if (!bvhtree_walk_dfs_recursive(walk_data, node->children[i])) { return false; } } @@ -2079,9 +2078,10 @@ void BLI_bvhtree_walk_dfs( { const BVHNode *root = tree->nodes[tree->totleaf]; if (root != NULL) { + BVHTree_WalkData walk_data = {walk_parent_cb, walk_leaf_cb, walk_order_cb, userdata}; /* first make sure the bv of root passes in the test too */ if (walk_parent_cb((const BVHTreeAxisRange *)root->bv, userdata)) { - bvhtree_walk_dfs_recursive(walk_parent_cb, walk_leaf_cb, walk_order_cb, root, userdata); + bvhtree_walk_dfs_recursive(&walk_data, root); } } } From 5285de16f3e8f6b29a85eda5d7632a98cd0cddfe Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Wed, 25 Apr 2018 09:28:35 +0200 Subject: [PATCH 5/5] Fix string comparison in GNUMakefile for linux systems --- GNUmakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GNUmakefile b/GNUmakefile index 46f0fa18eec..23903d36e63 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -424,7 +424,7 @@ icons: .FORCE "$(BLENDER_DIR)/release/datafiles/prvicons_update.py" update: .FORCE - if [ "$(OS_NCASE)" == "darwin" ] && [ ! -d "../lib/$(OS_NCASE)" ]; then \ + if [ "$(OS_NCASE)" = "darwin" ] && [ ! -d "../lib/$(OS_NCASE)" ]; then \ svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/$(OS_NCASE) ../lib/$(OS_NCASE) ; \ fi if [ -d "../lib" ]; then \