diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-04-25 10:31:25 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-04-25 10:31:25 +0300 |
commit | dfd82b18df6b73cd91272f0b66d9fa59815db44c (patch) | |
tree | 654ccb30fd83ee9ed9a8cac46df742180445e2e6 | |
parent | 2fe35914e17d6173925be06c61974479666b9ef7 (diff) | |
parent | 5285de16f3e8f6b29a85eda5d7632a98cd0cddfe (diff) |
Merge remote-tracking branch 'origin/master' into blender2.8
-rw-r--r-- | GNUmakefile | 2 | ||||
-rw-r--r-- | build_files/build_environment/patches/cmakelists_openvdb.txt | 2 | ||||
-rw-r--r-- | build_files/build_environment/patches/cmakelists_tbb.txt | 8 | ||||
-rw-r--r-- | build_files/cmake/Modules/FindBlosc.cmake | 72 | ||||
-rw-r--r-- | build_files/cmake/macros.cmake | 2 | ||||
-rw-r--r-- | build_files/cmake/platform/platform_unix.cmake | 4 | ||||
-rw-r--r-- | source/blender/blenlib/intern/BLI_kdopbvh.c | 34 |
7 files changed, 104 insertions, 20 deletions
diff --git a/GNUmakefile b/GNUmakefile index 3817e6b3e5c..01806b53e61 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -429,7 +429,7 @@ icons_geom: .FORCE "$(BLENDER_DIR)/release/datafiles/blender_icons_geom_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 \ 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") # -------------------------------------------------------------------------------- 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 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 23d4d0d2054..3bb435fa892 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 306a09a3a5b..32a2d695895 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() 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); } } } |