Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GNUmakefile2
-rw-r--r--build_files/build_environment/patches/cmakelists_openvdb.txt2
-rw-r--r--build_files/build_environment/patches/cmakelists_tbb.txt8
-rw-r--r--build_files/cmake/Modules/FindBlosc.cmake72
-rw-r--r--build_files/cmake/macros.cmake2
-rw-r--r--build_files/cmake/platform/platform_unix.cmake4
-rw-r--r--source/blender/blenlib/intern/BLI_kdopbvh.c34
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);
}
}
}