[arch-commits] Commit in paraview/repos/community-x86_64 (6 files)

Bruno Pagani archange at gemini.archlinux.org
Sat Mar 19 21:09:41 UTC 2022


    Date: Saturday, March 19, 2022 @ 21:09:40
  Author: archange
Revision: 1161820

archrelease: copy trunk to community-x86_64

Added:
  paraview/repos/community-x86_64/PKGBUILD
    (from rev 1161819, paraview/trunk/PKGBUILD)
  paraview/repos/community-x86_64/vtk-tbb-2021.patch
    (from rev 1161819, paraview/trunk/vtk-tbb-2021.patch)
Deleted:
  paraview/repos/community-x86_64/PKGBUILD
  paraview/repos/community-x86_64/ffmpeg5.patch
  paraview/repos/community-x86_64/paraview-tbb-2021.patch
  paraview/repos/community-x86_64/paraview-vtkm-tbb-2021.patch

------------------------------+
 PKGBUILD                     |  184 +++++++-------
 ffmpeg5.patch                |  158 ------------
 paraview-tbb-2021.patch      |  280 ---------------------
 paraview-vtkm-tbb-2021.patch |  526 -----------------------------------------
 vtk-tbb-2021.patch           |  329 +++++++++++++++++++++++++
 5 files changed, 424 insertions(+), 1053 deletions(-)

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2022-03-19 21:09:10 UTC (rev 1161819)
+++ PKGBUILD	2022-03-19 21:09:40 UTC (rev 1161820)
@@ -1,89 +0,0 @@
-# Maintainer: Bruno Pagani <archange at archlinux.org>
-# Maintainer: Mathieu Westphal <mathieu.westphal at kitware.com>
-# Contributor: Stéphane Gaudreault <stephane at archlinux.org>
-# Contributor: <xantares09 at hotmail.com>
-
-_pkg=paraview
-_mpi=openmpi
-pkgname=${_pkg}
-#-${_mpi}
-pkgver=5.9.1
-pkgrel=13
-pkgdesc="Parallel Visualization application using VTK (${_mpi} version)"
-arch=(x86_64)
-url="https://www.paraview.org"
-license=(BSD custom)
-depends=(boost-libs qt5-tools qt5-x11extras qt5-svg intel-tbb openmpi ffmpeg
-         adios2 liblas ospray pdal python-numpy cgns protobuf
-         double-conversion expat freetype2 gdal gl2ps glew hdf5 libjpeg jsoncpp
-         libjsoncpp.so libharu libxml2 lz4 xz python-mpi4py netcdf libogg
-         libpng pugixml rapidjson libtheora libtiff zlib)
-optdepends=(python-matplotlib python-pandas)
-makedepends=(cmake boost mesa gcc-fortran ninja qt5-tools qt5-xmlpatterns eigen utf8cpp)
-# pegtl https://gitlab.kitware.com/vtk/vtk/-/issues/18151
-conflicts=(vtk)
-source=(${url}/files/v${pkgver:0:3}/ParaView-v${pkgver/R/-R}.tar.xz
-        vtk-gcc11.patch::https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7554.patch
-        vtk-fix-shader-initialization.patch::https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7978.patch
-        paraview-tbb-2021.patch
-        paraview-vtkm-tbb-2021.patch
-        ffmpeg5.patch)
-sha256sums=('0d486cb6fbf55e428845c9650486f87466efcb3155e40489182a7ea85dfd4c8d'
-            'c9959adcb59e2f2657f0144b0b68239d4174947fb2ab8051f2575241281e4d68'
-            '10864f69e2d6577c56cc536438b5dd7a52b004f6bb253a17569899922d804fe8'
-            '7091f7b4052688191ca5594f8e1dc1ed00dcc882343b9d360fbacd187161a914'
-            'ee0b5b28fdb2e906ee04b5eb28d87fa1e6646601d48b523d3d8f1760a811c416'
-            '066ad5eb3f7cd101c4bbbe4d91ba97419f18537f9dadf6654776b7151c7c6a8d')
-
-prepare() {
-  cd ParaView-v${pkgver/R/-R}
-  # We have a patched libharu
-  sed -i "s|2.4.0|2.3.0|" VTK/ThirdParty/libharu/CMakeLists.txt
-  # Missing includes with GCC11
-  patch -p1 -d VTK < ../vtk-gcc11.patch
-  # FS#71081
-  patch -p1 -d VTK < ../vtk-fix-shader-initialization.patch
-  # Fix build with HDF5 1.12.1, https://gitlab.kitware.com/vtk/vtk/-/issues/18265
-  sed -i 's/typedef int hid_t;/typedef int64_t hid_t;/' VTK/ThirdParty/xdmf3/vtkxdmf3/core/XdmfHDF5Controller.hpp
-  # Fix build with TBB 2021
-  patch -p1 -d VTK < ../paraview-tbb-2021.patch
-  cp VTK/CMake/FindTBB.cmake VTK/ThirdParty/vtkm/vtkvtkm/vtk-m/CMake/FindTBB.cmake
-  patch -p1 -d VTK/ThirdParty/vtkm/vtkvtkm/vtk-m < "$srcdir"/paraview-vtkm-tbb-2021.patch
-  # Fix build with FFmpeg 5 https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8863
-  patch -p1 -d VTK < "$srcdir"/ffmpeg5.patch
-}
-
-build() {
-  # LICENSEDIR blocked by https://gitlab.kitware.com/vtk/vtk/-/issues/18266
-  export CFLAGS+=" -ffat-lto-objects"
-  export CXXFLAGS+=" -ffat-lto-objects"
-  cmake -B build -S ParaView-v${pkgver/R/-R} -G Ninja \
-    -DCMAKE_BUILD_TYPE=Release \
-    -DCMAKE_INSTALL_PREFIX=/usr \
-    -DCMAKE_SKIP_INSTALL_RPATH=OFF \
-    -DPARAVIEW_ENABLE_ADIOS2=ON \
-    -DPARAVIEW_ENABLE_FFMPEG=ON \
-    -DPARAVIEW_ENABLE_FIDES=ON \
-    -DPARAVIEW_ENABLE_GDAL=ON \
-    -DPARAVIEW_ENABLE_LAS=ON \
-    -DPARAVIEW_ENABLE_MOTIONFX=ON \
-    -DPARAVIEW_ENABLE_PDAL=ON \
-    -DPARAVIEW_ENABLE_RAYTRACING=ON \
-    -DPARAVIEW_ENABLE_VISITBRIDGE=ON \
-    -DPARAVIEW_ENABLE_XDMF3=ON \
-    -DPARAVIEW_USE_MPI=ON \
-    -DPARAVIEW_USE_PYTHON=ON \
-    -DPARAVIEW_VERSIONED_INSTALL=OFF \
-    -DPARAVIEW_BUILD_WITH_EXTERNAL=ON \
-    -DVTK_SMP_IMPLEMENTATION_TYPE=TBB \
-    -DVTKm_ENABLE_MPI=ON \
-    -DVTK_MODULE_USE_EXTERNAL_VTK_pegtl=OFF \
-    -Wno-dev
-  ninja -C build ${MAKEFLAGS}
-}
-
-package() {
-  DESTDIR="${pkgdir}" ninja -C build install
-  # Fix licenses install
-  mv "${pkgdir}"/usr/share/licenses/{ParaView,paraview}
-}

Copied: paraview/repos/community-x86_64/PKGBUILD (from rev 1161819, paraview/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2022-03-19 21:09:40 UTC (rev 1161820)
@@ -0,0 +1,95 @@
+# Maintainer: Bruno Pagani <archange at archlinux.org>
+# Maintainer: Mathieu Westphal <mathieu.westphal at kitware.com>
+# Contributor: Stéphane Gaudreault <stephane at archlinux.org>
+# Contributor: <xantares09 at hotmail.com>
+
+_pkg=paraview
+_mpi=openmpi
+pkgname=${_pkg}
+#-${_mpi}
+pkgver=5.9.1
+pkgrel=14
+pkgdesc="Parallel Visualization application using VTK (${_mpi} version)"
+arch=(x86_64)
+url="https://www.paraview.org"
+license=(BSD custom)
+depends=(boost-libs qt5-tools qt5-x11extras qt5-svg intel-tbb openmpi ffmpeg
+         adios2 liblas ospray pdal python-numpy cgns protobuf
+         double-conversion expat freetype2 gdal gl2ps glew hdf5 libjpeg jsoncpp
+         libjsoncpp.so libharu libxml2 lz4 xz python-mpi4py netcdf libogg
+         libpng pugixml rapidjson libtheora libtiff zlib)
+optdepends=(python-matplotlib python-pandas)
+makedepends=(cmake boost mesa gcc-fortran ninja qt5-tools qt5-xmlpatterns eigen utf8cpp)
+# pegtl https://gitlab.kitware.com/vtk/vtk/-/issues/18151
+conflicts=(vtk)
+source=(${url}/files/v${pkgver%.*}/ParaView-v${pkgver/R/-R}.tar.xz
+        vtk-gcc11.patch::https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7554.patch
+        vtk-fix-shader-initialization.patch::https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7978.patch
+        vtk-tbb-2021.patch
+        vtkm-tbb-2021-pre.patch::https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/2452.patch
+        vtkm-tbb-2021.patch::https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/2509.patch
+        vtk-ffmpeg5.patch::https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8863.patch)
+sha256sums=('0d486cb6fbf55e428845c9650486f87466efcb3155e40489182a7ea85dfd4c8d'
+            'c9959adcb59e2f2657f0144b0b68239d4174947fb2ab8051f2575241281e4d68'
+            '10864f69e2d6577c56cc536438b5dd7a52b004f6bb253a17569899922d804fe8'
+            '5e621ed053ae6e27fea32c09ff64a700684983703d2361c658e1701b0b413189'
+            '39a84440097147338fcfcc937a2efed4ff887e83c2040d43abb97f5532bdb2fc'
+            '37cff664c4eaacf44ecb995e62e9e54e54880bae0857d598c74660a2159ccb2e'
+            '066ad5eb3f7cd101c4bbbe4d91ba97419f18537f9dadf6654776b7151c7c6a8d')
+
+prepare() {
+  cd ParaView-v${pkgver/R/-R}
+  # We have a patched libharu
+  sed -i "s|2.4.0|2.3.0|" VTK/ThirdParty/libharu/CMakeLists.txt
+  # Fix licences install (upstreamed but not released)
+  sed -i 's|CACHE PATH "License|CACHE STRING "License|g' CMakeLists.txt
+  sed -i 's|CACHE PATH "License|CACHE STRING "License|g' VTK/CMakeLists.txt
+  # Missing includes with GCC11
+  patch -p1 -d VTK < ../vtk-gcc11.patch
+  # FS#71081
+  patch -p1 -d VTK < ../vtk-fix-shader-initialization.patch
+  # Fix build with HDF5 1.12.1, https://gitlab.kitware.com/vtk/vtk/-/issues/18265
+  sed -i 's/typedef int hid_t;/typedef int64_t hid_t;/' VTK/ThirdParty/xdmf3/vtkxdmf3/core/XdmfHDF5Controller.hpp
+  # Fix build with TBB 2021
+  # https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7650
+  # https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7765
+  # https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8011
+  patch -p1 -d VTK < ../vtk-tbb-2021.patch
+  patch -p1 -d VTK/ThirdParty/vtkm/vtkvtkm/vtk-m < ../vtkm-tbb-2021-pre.patch
+  patch -p1 -d VTK/ThirdParty/vtkm/vtkvtkm/vtk-m < ../vtkm-tbb-2021.patch
+  # Fix build with FFmpeg 5
+  patch -p1 -d VTK < ../vtk-ffmpeg5.patch
+}
+
+build() {
+  export CFLAGS+=" -ffat-lto-objects"
+  export CXXFLAGS+=" -ffat-lto-objects"
+  cmake -B build -S ParaView-v${pkgver/R/-R} -G Ninja \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DCMAKE_INSTALL_PREFIX=/usr \
+    -DCMAKE_INSTALL_LICENSEDIR=share/licenses/paraview \
+    -DCMAKE_SKIP_INSTALL_RPATH=OFF \
+    -DPARAVIEW_ENABLE_ADIOS2=ON \
+    -DPARAVIEW_ENABLE_FFMPEG=ON \
+    -DPARAVIEW_ENABLE_FIDES=ON \
+    -DPARAVIEW_ENABLE_GDAL=ON \
+    -DPARAVIEW_ENABLE_LAS=ON \
+    -DPARAVIEW_ENABLE_MOTIONFX=ON \
+    -DPARAVIEW_ENABLE_PDAL=ON \
+    -DPARAVIEW_ENABLE_RAYTRACING=ON \
+    -DPARAVIEW_ENABLE_VISITBRIDGE=ON \
+    -DPARAVIEW_ENABLE_XDMF3=ON \
+    -DPARAVIEW_USE_MPI=ON \
+    -DPARAVIEW_USE_PYTHON=ON \
+    -DPARAVIEW_VERSIONED_INSTALL=OFF \
+    -DPARAVIEW_BUILD_WITH_EXTERNAL=ON \
+    -DVTK_SMP_IMPLEMENTATION_TYPE=TBB \
+    -DVTKm_ENABLE_MPI=ON \
+    -DVTK_MODULE_USE_EXTERNAL_VTK_pegtl=OFF \
+    -Wno-dev
+  ninja -C build ${MAKEFLAGS}
+}
+
+package() {
+  DESTDIR="${pkgdir}" ninja -C build install
+}

Deleted: ffmpeg5.patch
===================================================================
--- ffmpeg5.patch	2022-03-19 21:09:10 UTC (rev 1161819)
+++ ffmpeg5.patch	2022-03-19 21:09:40 UTC (rev 1161820)
@@ -1,158 +0,0 @@
-From bad8f3e9d0aad03e8f2aff9524cb3c5f2d10ccaf Mon Sep 17 00:00:00 2001
-From: Ben Boeckel <ben.boeckel at kitware.com>
-Date: Fri, 28 Jan 2022 10:44:28 -0500
-Subject: [PATCH] IO/FFMPEG: support FFmpeg 5.0 API changes
-
-Fixes: #18445
----
- Documentation/release/dev/ffmpeg-5.0.md |  3 +++
- IO/FFMPEG/CMakeLists.txt                | 18 +++++++++++++++--
- IO/FFMPEG/vtkFFMPEGVideoSource.cxx      |  4 ++--
- IO/FFMPEG/vtkFFMPEGWriter.cxx           | 27 +++++++++++++------------
- 4 files changed, 35 insertions(+), 17 deletions(-)
- create mode 100644 Documentation/release/dev/ffmpeg-5.0.md
-
-diff --git a/Documentation/release/dev/ffmpeg-5.0.md b/Documentation/release/dev/ffmpeg-5.0.md
-new file mode 100644
-index 00000000000..02ebd3ff840
---- /dev/null
-+++ b/Documentation/release/dev/ffmpeg-5.0.md
-@@ -0,0 +1,3 @@
-+## FFmpeg 5.0 support
-+
-+FFmpeg 5.0 API changes are now supported.
-diff --git a/IO/FFMPEG/CMakeLists.txt b/IO/FFMPEG/CMakeLists.txt
-index f6900843ac0..ed43978cfc6 100644
---- a/IO/FFMPEG/CMakeLists.txt
-+++ b/IO/FFMPEG/CMakeLists.txt
-@@ -6,7 +6,9 @@ vtk_module_find_package(
-     avformat
-     avcodec
-     avutil
--    swscale)
-+    swscale
-+  OPTIONAL_COMPONENTS
-+    swresample)
- 
- set(classes
-   vtkFFMPEGWriter)
-@@ -21,6 +23,17 @@ if (NOT FFMPEG_VERSION VERSION_LESS "3.1")
-     vtkFFMPEGVideoSource)
- endif ()
- 
-+set(ffmpeg_libraries)
-+if (NOT FFMPEG_VERSION VERSION_LESS "5.0")
-+  if (NOT FFMPEG_swresample_FOUND)
-+    message(FATAL_ERROR
-+      "FFMPEG 5.0 requires the `swresample` library.")
-+  endif ()
-+
-+  list(APPEND ffmpeg_libraries
-+    FFMPEG::swresample)
-+endif ()
-+
- vtk_module_add_module(VTK::IOFFMPEG
-   CLASSES ${classes})
- vtk_module_link(VTK::IOFFMPEG
-@@ -28,4 +41,5 @@ vtk_module_link(VTK::IOFFMPEG
-     FFMPEG::avformat
-     FFMPEG::avcodec
-     FFMPEG::avutil
--    FFMPEG::swscale)
-+    FFMPEG::swscale
-+    ${ffmpeg_libraries})
-diff --git a/IO/FFMPEG/vtkFFMPEGVideoSource.cxx b/IO/FFMPEG/vtkFFMPEGVideoSource.cxx
-index 45900ee02bc..f3169d3545d 100644
---- a/IO/FFMPEG/vtkFFMPEGVideoSource.cxx
-+++ b/IO/FFMPEG/vtkFFMPEGVideoSource.cxx
-@@ -205,7 +205,7 @@ void vtkFFMPEGVideoSource::Initialize()
- 
-   this->Internal->VideoStream = fcontext->streams[this->Internal->VideoStreamIndex];
- 
--  AVCodec* dec = avcodec_find_decoder(this->Internal->VideoStream->codecpar->codec_id);
-+  const AVCodec* dec = avcodec_find_decoder(this->Internal->VideoStream->codecpar->codec_id);
-   if (!dec)
-   {
-     vtkErrorMacro("Failed to find codec for video");
-@@ -271,7 +271,7 @@ void vtkFFMPEGVideoSource::Initialize()
-   {
-     this->Internal->AudioStream = fcontext->streams[this->Internal->AudioStreamIndex];
- 
--    AVCodec* adec = avcodec_find_decoder(this->Internal->AudioStream->codecpar->codec_id);
-+    const AVCodec* adec = avcodec_find_decoder(this->Internal->AudioStream->codecpar->codec_id);
-     if (!adec)
-     {
-       vtkErrorMacro("Failed to find codec for audio");
-diff --git a/IO/FFMPEG/vtkFFMPEGWriter.cxx b/IO/FFMPEG/vtkFFMPEGWriter.cxx
-index 5011b40f579..5d284b088ed 100644
---- a/IO/FFMPEG/vtkFFMPEGWriter.cxx
-+++ b/IO/FFMPEG/vtkFFMPEGWriter.cxx
-@@ -21,10 +21,17 @@
- 
- extern "C"
- {
-+#include <libavcodec/avcodec.h>
- #include <libavformat/avformat.h>
- #include <libswscale/swscale.h>
- }
- 
-+#if LIBAVFORMAT_VERSION_MAJOR < 59
-+#define vtk_ff_const59
-+#else
-+#define vtk_ff_const59 const
-+#endif
-+
- #if defined(LIBAVFORMAT_VERSION_MAJOR) && LIBAVFORMAT_VERSION_MAJOR >= 57
- extern "C"
- {
-@@ -51,7 +58,7 @@ private:
- 
-   AVFormatContext* avFormatContext;
- 
--  AVOutputFormat* avOutputFormat;
-+  vtk_ff_const59 AVOutputFormat* avOutputFormat;
- 
-   AVStream* avStream;
- 
-@@ -115,15 +122,9 @@ int vtkFFMPEGWriterInternal::Start()
-     return 0;
-   }
- 
--  if (this->Writer->GetCompression())
--  {
--    // choose a codec that is easily playable on windows
--    this->avOutputFormat->video_codec = AV_CODEC_ID_MJPEG;
--  }
--  else
--  {
--    this->avOutputFormat->video_codec = AV_CODEC_ID_RAWVIDEO;
--  }
-+  enum AVCodecID video_codec = this->Writer->GetCompression()
-+    ? AV_CODEC_ID_MJPEG // choose a codec that is easily playable on windows
-+    : AV_CODEC_ID_RAWVIDEO;
- 
-   // create the format context that wraps all of the media output structures
-   if (avformat_alloc_output_context2(
-@@ -133,8 +134,8 @@ int vtkFFMPEGWriterInternal::Start()
-     return 0;
-   }
- 
--  AVCodec* codec;
--  if (!(codec = avcodec_find_encoder(this->avOutputFormat->video_codec)))
-+  vtk_ff_const59 AVCodec* codec;
-+  if (!(codec = avcodec_find_encoder(video_codec)))
-   {
-     vtkGenericWarningMacro(<< "Failed to get video codec.");
-     return 0;
-@@ -155,7 +156,7 @@ int vtkFFMPEGWriterInternal::Start()
-     return 0;
-   }
- 
--  this->avStream->codecpar->codec_id = static_cast<AVCodecID>(this->avOutputFormat->video_codec);
-+  this->avStream->codecpar->codec_id = video_codec;
-   this->avStream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
-   this->avStream->codecpar->width = this->Dim[0];
-   this->avStream->codecpar->height = this->Dim[1];
--- 
-GitLab
-

Deleted: paraview-tbb-2021.patch
===================================================================
--- paraview-tbb-2021.patch	2022-03-19 21:09:10 UTC (rev 1161819)
+++ paraview-tbb-2021.patch	2022-03-19 21:09:40 UTC (rev 1161820)
@@ -1,280 +0,0 @@
-diff --git a/CMake/FindTBB.cmake b/CMake/FindTBB.cmake
-index 27576a5cc8..bd75631317 100644
---- a/CMake/FindTBB.cmake
-+++ b/CMake/FindTBB.cmake
-@@ -68,6 +68,32 @@
- #  FindTBB helper functions and macros
- #
- 
-+# Use TBBConfig.cmake if possible.
-+
-+set(_tbb_find_quiet)
-+if (TBB_FIND_QUIETLY)
-+  set(_tbb_find_quiet QUIET)
-+endif ()
-+set(_tbb_find_components)
-+set(_tbb_find_optional_components)
-+foreach (_tbb_find_component IN LISTS TBB_FIND_COMPONENTS)
-+  if (TBB_FIND_REQUIRED_${_tbb_find_component})
-+    list(APPEND _tbb_find_components "${_tbb_find_component}")
-+  else ()
-+    list(APPEND _tbb_find_optional_components "${_tbb_find_component}")
-+  endif ()
-+endforeach ()
-+unset(_tbb_find_component)
-+find_package(TBB CONFIG ${_tbb_find_quiet}
-+  COMPONENTS ${_tbb_find_components}
-+  OPTIONAL_COMPONENTS ${_tbb_find_optional_components})
-+unset(_tbb_find_quiet)
-+unset(_tbb_find_components)
-+unset(_tbb_find_optional_components)
-+if (TBB_FOUND)
-+  return ()
-+endif ()
-+
- #====================================================
- # Fix the library path in case it is a linker script
- #====================================================
-@@ -398,12 +424,18 @@ findpkg_finish(TBB_MALLOC_PROXY tbbmalloc_proxy)
- #=============================================================================
- #parse all the version numbers from tbb
- if(NOT TBB_VERSION)
--
-- #only read the start of the file
-- file(STRINGS
-+  if (EXISTS "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h")
-+    file(STRINGS
-+      "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h"
-+      TBB_VERSION_CONTENTS
-+      REGEX "VERSION")
-+  else()
-+    #only read the start of the file
-+    file(STRINGS
-       "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h"
-       TBB_VERSION_CONTENTS
-       REGEX "VERSION")
-+  endif()
- 
-   string(REGEX REPLACE
-     ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
-diff --git a/Common/Core/SMP/TBB/vtkSMPTools.cxx b/Common/Core/SMP/TBB/vtkSMPTools.cxx
-index e4423f26d5..90d32832e1 100644
---- a/Common/Core/SMP/TBB/vtkSMPTools.cxx
-+++ b/Common/Core/SMP/TBB/vtkSMPTools.cxx
-@@ -23,24 +23,13 @@
- #define __TBB_NO_IMPLICIT_LINKAGE 1
- #endif
- 
--#include <tbb/task_scheduler_init.h>
-+#include <tbb/task_arena.h>
- 
- #ifdef _MSC_VER
- #pragma pop_macro("__TBB_NO_IMPLICIT_LINKAGE")
- #endif
- 
--struct vtkSMPToolsInit
--{
--  tbb::task_scheduler_init Init;
--
--  vtkSMPToolsInit(int numThreads)
--    : Init(numThreads)
--  {
--  }
--};
--
--static bool vtkSMPToolsInitialized = 0;
--static int vtkTBBNumSpecifiedThreads = 0;
-+static tbb::task_arena taskArena;
- static vtkSimpleCriticalSection vtkSMPToolsCS;
- 
- //------------------------------------------------------------------------------
-@@ -53,23 +42,37 @@ const char* vtkSMPTools::GetBackend()
- void vtkSMPTools::Initialize(int numThreads)
- {
-   vtkSMPToolsCS.Lock();
--  if (!vtkSMPToolsInitialized)
-+
-+  // If numThreads <= 0, don't create a task_arena
-+  // and let TBB do the default thing.
-+  if (numThreads > 0 && numThreads != taskArena.max_concurrency())
-   {
--    // If numThreads <= 0, don't create a task_scheduler_init
--    // and let TBB do the default thing.
--    if (numThreads > 0)
-+    if (taskArena.is_active())
-     {
--      static vtkSMPToolsInit aInit(numThreads);
--      vtkTBBNumSpecifiedThreads = numThreads;
-+      taskArena.terminate();
-     }
--    vtkSMPToolsInitialized = true;
-+    taskArena.initialize(numThreads);
-   }
-+
-   vtkSMPToolsCS.Unlock();
- }
- 
- //------------------------------------------------------------------------------
- int vtkSMPTools::GetEstimatedNumberOfThreads()
- {
--  return vtkTBBNumSpecifiedThreads ? vtkTBBNumSpecifiedThreads
--                                   : tbb::task_scheduler_init::default_num_threads();
-+  return taskArena.max_concurrency();
-+}
-+
-+//------------------------------------------------------------------------------
-+void vtk::detail::smp::vtkSMPTools_Impl_For_TBB(vtkIdType first, vtkIdType last, vtkIdType grain,
-+  ExecuteFunctorPtrType functorExecuter, void* functor)
-+{
-+  if (taskArena.is_active())
-+  {
-+    taskArena.execute([&] { functorExecuter(functor, first, last, grain); });
-+  }
-+  else
-+  {
-+    functorExecuter(functor, first, last, grain);
-+  }
- }
-diff --git a/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in b/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in
-index c6614e42a4..1c7253deee 100644
---- a/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in
-+++ b/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in
-@@ -12,7 +12,8 @@
-      PURPOSE.  See the above copyright notice for more information.
- 
- =========================================================================*/
--#include "vtkNew.h"
-+
-+#include "vtkCommonCoreModule.h" // For export macro
- 
- #ifdef _MSC_VER
- #  pragma push_macro("__TBB_NO_IMPLICIT_LINKAGE")
-@@ -34,6 +35,10 @@ namespace detail
- namespace smp
- {
- 
-+typedef void (*ExecuteFunctorPtrType)(void*, vtkIdType, vtkIdType, vtkIdType);
-+void VTKCOMMONCORE_EXPORT vtkSMPTools_Impl_For_TBB(vtkIdType first, vtkIdType last, vtkIdType grain,
-+  ExecuteFunctorPtrType functorExecuter, void* functor);
-+
- //--------------------------------------------------------------------------------
- template <typename T>
- class FuncCall
-@@ -43,22 +48,22 @@ class FuncCall
-   void operator=(const FuncCall&) = delete;
- 
- public:
--  void operator() (const tbb::blocked_range<vtkIdType>& r) const
--  {
--      o.Execute(r.begin(), r.end());
-+  void operator()(const tbb::blocked_range<vtkIdType>& r) const {
-+    o.Execute(r.begin(), r.end());
-   }
- 
--  FuncCall (T& _o) : o(_o)
-+  FuncCall(T& _o)
-+    : o(_o)
-   {
-   }
- };
- 
- //--------------------------------------------------------------------------------
- template <typename FunctorInternal>
--void vtkSMPTools_Impl_For(
--  vtkIdType first, vtkIdType last, vtkIdType grain,
--  FunctorInternal& fi)
-+void ExecuteFunctor(void* functor, vtkIdType first, vtkIdType last, vtkIdType grain)
- {
-+  FunctorInternal& fi = *reinterpret_cast<FunctorInternal*>(functor);
-+
-   vtkIdType range = last - first;
-   if (range <= 0)
-   {
-@@ -66,20 +71,26 @@ void vtkSMPTools_Impl_For(
-   }
-   if (grain > 0)
-   {
--    tbb::parallel_for(tbb::blocked_range<vtkIdType>(first, last, grain), FuncCall<FunctorInternal>(fi));
-+    tbb::parallel_for(
-+      tbb::blocked_range<vtkIdType>(first, last, grain), FuncCall<FunctorInternal>(fi));
-   }
-   else
-   {
-     // When the grain is not specified, automatically calculate an appropriate grain size so
-     // most of the time will still be spent running the calculation and not task overhead.
--    const vtkIdType numberThreadsEstimate = 40; // Estimate of how many threads we might be able to run
--    const vtkIdType batchesPerThread = 5; // Plan for a few batches per thread so one busy core doesn't stall the whole system
-+
-+    // Estimate of how many threads we might be able to run
-+    const vtkIdType numberThreadsEstimate = 40;
-+    // Plan for a few batches per thread so one busy core doesn't stall the whole system
-+    const vtkIdType batchesPerThread = 5;
-     const vtkIdType batches = numberThreadsEstimate * batchesPerThread;
- 
-     if (range >= batches)
-     {
--      vtkIdType calculatedGrain = ((range - 1) / batches) + 1; // std::ceil round up for systems without cmath
--      tbb::parallel_for(tbb::blocked_range<vtkIdType>(first, last, calculatedGrain), FuncCall<FunctorInternal>(fi));
-+      // std::ceil round up for systems without cmath
-+      vtkIdType calculatedGrain = ((range - 1) / batches) + 1;
-+      tbb::parallel_for(
-+        tbb::blocked_range<vtkIdType>(first, last, calculatedGrain), FuncCall<FunctorInternal>(fi));
-     }
-     else
-     {
-@@ -91,23 +102,26 @@ void vtkSMPTools_Impl_For(
- }
- 
- //--------------------------------------------------------------------------------
--template<typename RandomAccessIterator>
--void vtkSMPTools_Impl_Sort(RandomAccessIterator begin,
--                                  RandomAccessIterator end)
-+template <typename FunctorInternal>
-+void vtkSMPTools_Impl_For(vtkIdType first, vtkIdType last, vtkIdType grain, FunctorInternal& fi)
-+{
-+  vtkSMPTools_Impl_For_TBB(first, last, grain, ExecuteFunctor<FunctorInternal>, &fi);
-+}
-+
-+//--------------------------------------------------------------------------------
-+template <typename RandomAccessIterator>
-+void vtkSMPTools_Impl_Sort(RandomAccessIterator begin, RandomAccessIterator end)
- {
-   tbb::parallel_sort(begin, end);
- }
- 
- //--------------------------------------------------------------------------------
--template<typename RandomAccessIterator, typename Compare>
--void vtkSMPTools_Impl_Sort(RandomAccessIterator begin,
--                                  RandomAccessIterator end,
--                                  Compare comp)
-+template <typename RandomAccessIterator, typename Compare>
-+void vtkSMPTools_Impl_Sort(RandomAccessIterator begin, RandomAccessIterator end, Compare comp)
- {
-   tbb::parallel_sort(begin, end, comp);
- }
- 
--
--}//namespace smp
--}//namespace detail
--}//namespace vtk
-+} // namespace smp
-+} // namespace detail
-+} // namespace vtk
-diff --git a/Common/Core/vtkSMPTools.h b/Common/Core/vtkSMPTools.h
-index cee63ad6ec..4fa28abd72 100644
---- a/Common/Core/vtkSMPTools.h
-+++ b/Common/Core/vtkSMPTools.h
-@@ -228,11 +228,8 @@ public:
-    * Initialize the underlying libraries for execution. This is
-    * not required as it is automatically called before the first
-    * execution of any parallel code. However, it can be used to
--   * control the maximum number of threads used when the back-end
--   * supports it (currently Simple and TBB only). Make sure to call
--   * it before any other parallel operation.
--   * When using Kaapi, use the KAAPI_CPUCOUNT env. variable to control
--   * the number of threads used in the thread pool.
-+   * control the maximum number of threads used. Make sure to call
-+   * it before the parallel operation.
-    */
-   static void Initialize(int numThreads = 0);
- 

Deleted: paraview-vtkm-tbb-2021.patch
===================================================================
--- paraview-vtkm-tbb-2021.patch	2022-03-19 21:09:10 UTC (rev 1161819)
+++ paraview-vtkm-tbb-2021.patch	2022-03-19 21:09:40 UTC (rev 1161820)
@@ -1,526 +0,0 @@
-From 904e784e895229d675cd7b3b43a963fdc5813ac8 Mon Sep 17 00:00:00 2001
-From: Kenneth Moreland <morelandkd at ornl.gov>
-Date: Fri, 4 Jun 2021 09:30:52 -0600
-Subject: [PATCH 2/6] Remove TBB parallel_sort patch
-
-Years ago we discovered a problem with TBB's parallel sort, which we
-patch in our local repo and submitted a change to TBB, which has been
-accepted.
-
-The code to decide whether to use our parallel_sort patch does not work
-with the latest versions of TBB because it requires including a header
-that changed names to get the TBB version.
-
-We no longer support any TBB version with this bug, so just remove the
-patch from VTK-m.
----
- vtkm/cont/tbb/internal/CMakeLists.txt  |   1 -
- vtkm/cont/tbb/internal/FunctorsTBB.h   |  10 +-
- vtkm/cont/tbb/internal/parallel_sort.h | 273 -------------------------
- 3 files changed, 1 insertion(+), 283 deletions(-)
- delete mode 100644 vtkm/cont/tbb/internal/parallel_sort.h
-
-diff --git a/vtkm/cont/tbb/internal/CMakeLists.txt b/vtkm/cont/tbb/internal/CMakeLists.txt
-index 1283307be..ffbf1e845 100644
---- a/vtkm/cont/tbb/internal/CMakeLists.txt
-+++ b/vtkm/cont/tbb/internal/CMakeLists.txt
-@@ -25,7 +25,6 @@ endif()
- 
- vtkm_declare_headers(${headers}
-    ParallelSortTBB.hxx
--   parallel_sort.h
-    )
- 
- #These sources need to always be built
-diff --git a/vtkm/cont/tbb/internal/FunctorsTBB.h b/vtkm/cont/tbb/internal/FunctorsTBB.h
-index dc988f7f8..c538c2240 100644
---- a/vtkm/cont/tbb/internal/FunctorsTBB.h
-+++ b/vtkm/cont/tbb/internal/FunctorsTBB.h
-@@ -38,15 +38,6 @@ VTKM_THIRDPARTY_PRE_INCLUDE
- // correct settings so that we don't clobber any existing function
- #include <vtkm/internal/Windows.h>
- 
--#include <tbb/tbb_stddef.h>
--#if (TBB_VERSION_MAJOR == 4) && (TBB_VERSION_MINOR == 2)
--//we provide an patched implementation of tbb parallel_sort
--//that fixes ADL for std::swap. This patch has been submitted to Intel
--//and is fixed in TBB 4.2 update 2.
--#include <vtkm/cont/tbb/internal/parallel_sort.h>
--#else
--#include <tbb/parallel_sort.h>
--#endif
- 
- #include <numeric>
- #include <tbb/blocked_range.h>
-@@ -54,6 +45,7 @@ VTKM_THIRDPARTY_PRE_INCLUDE
- #include <tbb/parallel_for.h>
- #include <tbb/parallel_reduce.h>
- #include <tbb/parallel_scan.h>
-+#include <tbb/parallel_sort.h>
- #include <tbb/partitioner.h>
- #include <tbb/tick_count.h>
- 
-diff --git a/vtkm/cont/tbb/internal/parallel_sort.h b/vtkm/cont/tbb/internal/parallel_sort.h
-deleted file mode 100644
-index 3451a369f..000000000
---- a/vtkm/cont/tbb/internal/parallel_sort.h
-+++ /dev/null
-@@ -1,273 +0,0 @@
--/*
--    Copyright 2005-2013 Intel Corporation.  All Rights Reserved.
--
--    This file is part of Threading Building Blocks.
--
--    Threading Building Blocks is free software; you can redistribute it
--    and/or modify it under the terms of the GNU General Public License
--    version 2 as published by the Free Software Foundation.
--
--    Threading Building Blocks is distributed in the hope that it will be
--    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
--    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--    GNU General Public License for more details.
--
--    You should have received a copy of the GNU General Public License
--    along with Threading Building Blocks; if not, write to the Free Software
--    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
--
--    As a special exception, you may use this file as part of a free software
--    library without restriction.  Specifically, if other files instantiate
--    templates or use macros or inline functions from this file, or you compile
--    this file and link it with other files to produce an executable, this
--    file does not by itself cause the resulting executable to be covered by
--    the GNU General Public License.  This exception does not however
--    invalidate any other reasons why the executable file might be covered by
--    the GNU General Public License.
--*/
--
--#ifndef __TBB_parallel_sort_H
--#define __TBB_parallel_sort_H
--
--#include <tbb/blocked_range.h>
--#include <tbb/parallel_for.h>
--
--#include <algorithm>
--#include <functional>
--#include <iterator>
--
--namespace tbb
--{
--
--//! @cond INTERNAL
--namespace internal
--{
--
--//! Range used in quicksort to split elements into subranges based on a value.
--/** The split operation selects a splitter and places all elements less than or equal
--    to the value in the first range and the remaining elements in the second range.
--    @ingroup algorithms */
--template <typename RandomAccessIterator, typename Compare>
--class quick_sort_range : private no_assign
--{
--
--  inline size_t median_of_three(const RandomAccessIterator& array,
--                                size_t l,
--                                size_t m,
--                                size_t r) const
--  {
--    return comp(array[l], array[m])
--      ? (comp(array[m], array[r]) ? m : (comp(array[l], array[r]) ? r : l))
--      : (comp(array[r], array[m]) ? m : (comp(array[r], array[l]) ? r : l));
--  }
--
--  inline size_t pseudo_median_of_nine(const RandomAccessIterator& array,
--                                      const quick_sort_range& range) const
--  {
--    size_t offset = range.size / 8u;
--    return median_of_three(array,
--                           median_of_three(array, 0, offset, offset * 2),
--                           median_of_three(array, offset * 3, offset * 4, offset * 5),
--                           median_of_three(array, offset * 6, offset * 7, range.size - 1));
--  }
--
--public:
--  static const size_t grainsize = 500;
--  const Compare& comp;
--  RandomAccessIterator begin;
--  size_t size;
--
--  quick_sort_range(RandomAccessIterator begin_, size_t size_, const Compare& comp_)
--    : comp(comp_)
--    , begin(begin_)
--    , size(size_)
--  {
--  }
--
--  bool empty() const { return size == 0; }
--  bool is_divisible() const { return size >= grainsize; }
--
--  quick_sort_range(quick_sort_range& range, split)
--    : comp(range.comp)
--  {
--    using std::swap;
--    RandomAccessIterator array = range.begin;
--    RandomAccessIterator key0 = range.begin;
--    size_t m = pseudo_median_of_nine(array, range);
--    if (m)
--      swap(array[0], array[m]);
--
--    size_t i = 0;
--    size_t j = range.size;
--    // Partition interval [i+1,j-1] with key *key0.
--    for (;;)
--    {
--      __TBB_ASSERT(i < j, nullptr);
--      // Loop must terminate since array[l]==*key0.
--      do
--      {
--        --j;
--        __TBB_ASSERT(i <= j, "bad ordering relation?");
--      } while (comp(*key0, array[j]));
--      do
--      {
--        __TBB_ASSERT(i <= j, nullptr);
--        if (i == j)
--          goto partition;
--        ++i;
--      } while (comp(array[i], *key0));
--      if (i == j)
--        goto partition;
--      swap(array[i], array[j]);
--    }
--  partition:
--    // Put the partition key were it belongs
--    swap(array[j], *key0);
--    // array[l..j) is less or equal to key.
--    // array(j..r) is greater or equal to key.
--    // array[j] is equal to key
--    i = j + 1;
--    begin = array + i;
--    size = range.size - i;
--    range.size = j;
--  }
--};
--
--#if __TBB_TASK_GROUP_CONTEXT
--//! Body class used to test if elements in a range are presorted
--/** @ingroup algorithms */
--template <typename RandomAccessIterator, typename Compare>
--class quick_sort_pretest_body : internal::no_assign
--{
--  const Compare& comp;
--
--public:
--  quick_sort_pretest_body(const Compare& _comp)
--    : comp(_comp)
--  {
--  }
--
--  void operator()(const blocked_range<RandomAccessIterator>& range) const
--  {
--    task& my_task = task::self();
--    RandomAccessIterator my_end = range.end();
--
--    int i = 0;
--    for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i)
--    {
--      if (i % 64 == 0 && my_task.is_cancelled())
--        break;
--
--      // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1
--      if (comp(*(k), *(k - 1)))
--      {
--        my_task.cancel_group_execution();
--        break;
--      }
--    }
--  }
--};
--#endif /* __TBB_TASK_GROUP_CONTEXT */
--
--//! Body class used to sort elements in a range that is smaller than the grainsize.
--/** @ingroup algorithms */
--template <typename RandomAccessIterator, typename Compare>
--struct quick_sort_body
--{
--  void operator()(const quick_sort_range<RandomAccessIterator, Compare>& range) const
--  {
--    //SerialQuickSort( range.begin, range.size, range.comp );
--    std::sort(range.begin, range.begin + range.size, range.comp);
--  }
--};
--
--//! Wrapper method to initiate the sort by calling parallel_for.
--/** @ingroup algorithms */
--template <typename RandomAccessIterator, typename Compare>
--void parallel_quick_sort(RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp)
--{
--#if __TBB_TASK_GROUP_CONTEXT
--  task_group_context my_context;
--  const int serial_cutoff = 9;
--
--  __TBB_ASSERT(begin + serial_cutoff < end, "min_parallel_size is smaller than serial cutoff?");
--  RandomAccessIterator k;
--  for (k = begin; k != begin + serial_cutoff; ++k)
--  {
--    if (comp(*(k + 1), *k))
--    {
--      goto do_parallel_quick_sort;
--    }
--  }
--
--  parallel_for(blocked_range<RandomAccessIterator>(k + 1, end),
--               quick_sort_pretest_body<RandomAccessIterator, Compare>(comp),
--               auto_partitioner(),
--               my_context);
--
--  if (my_context.is_group_execution_cancelled())
--  do_parallel_quick_sort:
--#endif /* __TBB_TASK_GROUP_CONTEXT */
--    parallel_for(quick_sort_range<RandomAccessIterator, Compare>(begin, end - begin, comp),
--                 quick_sort_body<RandomAccessIterator, Compare>(),
--                 auto_partitioner());
--}
--
--} // namespace internal
--//! @endcond
--
--//! @cond INTERNAL
--/** \page parallel_sort_iter_req Requirements on iterators for parallel_sort
--    Requirements on value type \c T of \c RandomAccessIterator for \c parallel_sort:
--    - \code void swap( T& x, T& y ) \endcode        Swaps \c x and \c y
--    - \code bool Compare::operator()( const T& x, const T& y ) \endcode
--                                                    True if x comes before y;
--**/
--
--/** \name parallel_sort
--    See also requirements on \ref parallel_sort_iter_req "iterators for parallel_sort". **/
--//@{
--
--//! Sorts the data in [begin,end) using the given comparator
--/** The compare function object is used for all comparisons between elements during sorting.
--    The compare object must define a bool operator() function.
--    @ingroup algorithms **/
--//! @endcond
--template <typename RandomAccessIterator, typename Compare>
--void parallel_sort(RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp)
--{
--  const int min_parallel_size = 500;
--  if (end > begin)
--  {
--    if (end - begin < min_parallel_size)
--    {
--      std::sort(begin, end, comp);
--    }
--    else
--    {
--      internal::parallel_quick_sort(begin, end, comp);
--    }
--  }
--}
--
--//! Sorts the data in [begin,end) with a default comparator \c std::less<RandomAccessIterator>
--/** @ingroup algorithms **/
--template <typename RandomAccessIterator>
--inline void parallel_sort(RandomAccessIterator begin, RandomAccessIterator end)
--{
--  parallel_sort(
--    begin, end, std::less<typename std::iterator_traits<RandomAccessIterator>::value_type>());
--}
--
--//! Sorts the data in the range \c [begin,end) with a default comparator \c std::less<T>
--/** @ingroup algorithms **/
--template <typename T>
--inline void parallel_sort(T* begin, T* end)
--{
--  parallel_sort(begin, end, std::less<T>());
--}
--//@}
--
--} // namespace tbb
--
--#endif
--- 
-GitLab
-
-
-From 1eea0bee122fa3ef47cc488d97f82e008d69c8bd Mon Sep 17 00:00:00 2001
-From: Kenneth Moreland <morelandkd at ornl.gov>
-Date: Fri, 4 Jun 2021 09:34:30 -0600
-Subject: [PATCH 3/6] Use TBB task_group for radix sort
-
-TBB 2020 introduced a new class called `task_group`. TBB 2021 removed
-the old class `task` as its functionality was replaced by `task_group`.
-Our parallel radix sort for TBB was implemented using `task`s, so change
-it to use `task_group` (which actually cleans up the code a bit).
----
- vtkm/cont/internal/ParallelRadixSort.h     |  2 +-
- vtkm/cont/tbb/internal/ParallelSortTBB.cxx | 35 ++++++++++++++++++++--
- 2 files changed, 33 insertions(+), 4 deletions(-)
-
-diff --git a/vtkm/cont/internal/ParallelRadixSort.h b/vtkm/cont/internal/ParallelRadixSort.h
-index 7604aacd7..cca8f6b72 100644
---- a/vtkm/cont/internal/ParallelRadixSort.h
-+++ b/vtkm/cont/internal/ParallelRadixSort.h
-@@ -485,7 +485,7 @@ struct RunTask
-   }
- 
-   template <typename ThreaderData = void*>
--  void operator()(ThreaderData tData = nullptr)
-+  void operator()(ThreaderData tData = nullptr) const
-   {
-     size_t num_nodes_at_current_height = (size_t)pow(2, (double)binary_tree_height_);
-     if (num_threads_ <= num_nodes_at_current_height)
-diff --git a/vtkm/cont/tbb/internal/ParallelSortTBB.cxx b/vtkm/cont/tbb/internal/ParallelSortTBB.cxx
-index 9243017e6..d99406954 100644
---- a/vtkm/cont/tbb/internal/ParallelSortTBB.cxx
-+++ b/vtkm/cont/tbb/internal/ParallelSortTBB.cxx
-@@ -53,7 +53,7 @@
- // correct settings so that we don't clobber any existing function
- #include <vtkm/internal/Windows.h>
- 
--#include <tbb/task.h>
-+#include <tbb/tbb.h>
- #include <thread>
- 
- #if defined(VTKM_MSVC)
-@@ -71,6 +71,7 @@ namespace sort
- 
- const size_t MAX_CORES = std::thread::hardware_concurrency();
- 
-+#if TBB_VERSION_MAJOR < 2020
- // Simple TBB task wrapper around a generic functor.
- template <typename FunctorType>
- struct TaskWrapper : public ::tbb::task
-@@ -94,7 +95,7 @@ struct RadixThreaderTBB
-   size_t GetAvailableCores() const { return MAX_CORES; }
- 
-   template <typename TaskType>
--  void RunParentTask(TaskType task)
-+  void RunParentTask(TaskType task) const
-   {
-     using Task = TaskWrapper<TaskType>;
-     Task& root = *new (::tbb::task::allocate_root()) Task(task);
-@@ -102,7 +103,7 @@ struct RadixThreaderTBB
-   }
- 
-   template <typename TaskType>
--  void RunChildTasks(TaskWrapper<TaskType>* wrapper, TaskType left, TaskType right)
-+  void RunChildTasks(TaskWrapper<TaskType>* wrapper, TaskType left, TaskType right) const
-   {
-     using Task = TaskWrapper<TaskType>;
-     ::tbb::empty_task& p = *new (wrapper->allocate_continuation())::tbb::empty_task();
-@@ -115,6 +116,34 @@ struct RadixThreaderTBB
-   }
- };
- 
-+#else // TBB_VERSION_MAJOR >= 2020
-+
-+// In TBB version 2020, the task class was deprecated. Instead, we use the simpler task_group.
-+
-+struct RadixThreaderTBB
-+{
-+  std::shared_ptr<::tbb::task_group> TaskGroup =
-+    std::shared_ptr<::tbb::task_group>(new ::tbb::task_group);
-+
-+  size_t GetAvailableCores() const { return MAX_CORES; }
-+
-+  template <typename TaskType>
-+  void RunParentTask(TaskType task) const
-+  {
-+    this->TaskGroup->run_and_wait(task);
-+    // All tasks should be complete at this point.
-+  }
-+
-+  template <typename TaskType>
-+  void RunChildTasks(void*, TaskType left, TaskType right) const
-+  {
-+    this->TaskGroup->run(left);
-+    this->TaskGroup->run(right);
-+  }
-+};
-+
-+#endif
-+
- VTKM_INSTANTIATE_RADIX_SORT_FOR_THREADER(RadixThreaderTBB)
- }
- }
--- 
-GitLab
-
-
-From 5eb688da2a39a9db2245a96ebef4811cc6de778e Mon Sep 17 00:00:00 2001
-From: Kenneth Moreland <morelandkd at ornl.gov>
-Date: Fri, 4 Jun 2021 10:05:28 -0600
-Subject: [PATCH 4/6] Update parallel radix sort for OpenMP
-
-Some changes required for TBB bled into the implementation of OpenMP.
----
- vtkm/cont/openmp/internal/ParallelRadixSortOpenMP.cxx | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/vtkm/cont/openmp/internal/ParallelRadixSortOpenMP.cxx b/vtkm/cont/openmp/internal/ParallelRadixSortOpenMP.cxx
-index 891d92aba..1bad0bc5a 100644
---- a/vtkm/cont/openmp/internal/ParallelRadixSortOpenMP.cxx
-+++ b/vtkm/cont/openmp/internal/ParallelRadixSortOpenMP.cxx
-@@ -44,7 +44,7 @@ struct RadixThreaderOpenMP
-   }
- 
-   template <typename TaskType>
--  void RunParentTask(TaskType task)
-+  void RunParentTask(TaskType task) const
-   {
-     assert(!omp_in_parallel());
- #pragma omp parallel default(none) shared(task)
-@@ -57,7 +57,7 @@ struct RadixThreaderOpenMP
-   }
- 
-   template <typename TaskType, typename ThreadData>
--  void RunChildTasks(ThreadData, TaskType left, TaskType right)
-+  void RunChildTasks(ThreadData, TaskType left, TaskType right) const
-   {
-     assert(omp_in_parallel());
- #pragma omp task default(none) firstprivate(right)
-diff --git a/CMake/VTKmDeviceAdapters.cmake b/CMake/VTKmDeviceAdapters.cmake
-index eb98d5c03..5523eac0b 100644
---- a/CMake/VTKmDeviceAdapters.cmake
-+++ b/CMake/VTKmDeviceAdapters.cmake
-@@ -43,38 +43,7 @@ endfunction()
- 
- if(VTKm_ENABLE_TBB AND NOT TARGET vtkm::tbb)
-   find_package(TBB REQUIRED)
--  add_library(vtkm::tbb UNKNOWN IMPORTED GLOBAL)
--
--  set_target_properties(vtkm::tbb PROPERTIES
--      INTERFACE_INCLUDE_DIRECTORIES "${TBB_INCLUDE_DIRS}")
--
--  if(EXISTS "${TBB_LIBRARY_RELEASE}")
--    vtkm_extract_real_library("${TBB_LIBRARY_RELEASE}" real_path)
--    set_property(TARGET vtkm::tbb APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
--    set_target_properties(vtkm::tbb PROPERTIES
--      IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
--      IMPORTED_LOCATION_RELEASE "${real_path}"
--      )
--  elseif(EXISTS "${TBB_LIBRARY}")
--    #When VTK-m is mixed with OSPray we could use the OSPray FindTBB file
--    #which doesn't define TBB_LIBRARY_RELEASE but instead defined only
--    #TBB_LIBRARY
--    vtkm_extract_real_library("${TBB_LIBRARY}" real_path)
--    set_property(TARGET vtkm::tbb APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
--    set_target_properties(vtkm::tbb PROPERTIES
--      IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
--      IMPORTED_LOCATION_RELEASE "${real_path}"
--      )
--  endif()
--
--  if(EXISTS "${TBB_LIBRARY_DEBUG}")
--    vtkm_extract_real_library("${TBB_LIBRARY_DEBUG}" real_path)
--    set_property(TARGET vtkm::tbb APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
--    set_target_properties(vtkm::tbb PROPERTIES
--      IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
--      IMPORTED_LOCATION_DEBUG "${real_path}"
--      )
--  endif()
-+  add_library(vtkm::tbb ALIAS TBB::tbb)
- endif()
- 
- 

Copied: paraview/repos/community-x86_64/vtk-tbb-2021.patch (from rev 1161819, paraview/trunk/vtk-tbb-2021.patch)
===================================================================
--- vtk-tbb-2021.patch	                        (rev 0)
+++ vtk-tbb-2021.patch	2022-03-19 21:09:40 UTC (rev 1161820)
@@ -0,0 +1,329 @@
+From 172e85feaf7cd36533012d66fb12a8942888d61d Mon Sep 17 00:00:00 2001
+From: Ben Boeckel <ben.boeckel at kitware.com>
+Date: Fri, 19 Feb 2021 12:41:29 -0500
+Subject: [PATCH] FindTBB: chain off to TBBConfig if available
+
+Fixes: #18112
+---
+ CMake/FindTBB.cmake | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/CMake/FindTBB.cmake b/CMake/FindTBB.cmake
+index 27576a5cc8b..5ba89d52fb9 100644
+--- a/CMake/FindTBB.cmake
++++ b/CMake/FindTBB.cmake
+@@ -68,6 +68,32 @@
+ #  FindTBB helper functions and macros
+ #
+ 
++# Use TBBConfig.cmake if possible.
++
++set(_tbb_find_quiet)
++if (TBB_FIND_QUIETLY)
++  set(_tbb_find_quiet QUIET)
++endif ()
++set(_tbb_find_components)
++set(_tbb_find_optional_components)
++foreach (_tbb_find_component IN LISTS TBB_FIND_COMPONENTS)
++  if (TBB_FIND_REQUIRED_${_tbb_find_component})
++    list(APPEND _tbb_find_components "${_tbb_find_component}")
++  else ()
++    list(APPEND _tbb_find_optional_components "${_tbb_find_component}")
++  endif ()
++endforeach ()
++unset(_tbb_find_component)
++find_package(TBB CONFIG ${_tbb_find_quiet}
++  COMPONENTS ${_tbb_find_components}
++  OPTIONAL_COMPONENTS ${_tbb_find_optional_components})
++unset(_tbb_find_quiet)
++unset(_tbb_find_components)
++unset(_tbb_find_optional_components)
++if (TBB_FOUND)
++  return ()
++endif ()
++
+ #====================================================
+ # Fix the library path in case it is a linker script
+ #====================================================
+-- 
+GitLab
+
+From 56cf03534c58a21f3cea608e4f53b7e7e00670fc Mon Sep 17 00:00:00 2001
+From: Mickael PHILIT <mickey.phy at gmail.com>
+Date: Thu, 27 May 2021 04:32:51 +0000
+Subject: [PATCH 1/2] Update TBB version file location
+
+From ded89c1e3a025874bfd69feb6c67fa21d6af36d4 Mon Sep 17 00:00:00 2001
+From: Mickael PHILIT <mickey.phy at gmail.com>
+Date: Thu, 27 May 2021 04:44:42 +0000
+Subject: [PATCH 2/2] add missing {
+
+---
+ CMake/FindTBB.cmake | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/CMake/FindTBB.cmake b/CMake/FindTBB.cmake
+index 5ba89d52fb9..bd756313176 100644
+--- a/CMake/FindTBB.cmake
++++ b/CMake/FindTBB.cmake
+@@ -424,12 +424,18 @@ findpkg_finish(TBB_MALLOC_PROXY tbbmalloc_proxy)
+ #=============================================================================
+ #parse all the version numbers from tbb
+ if(NOT TBB_VERSION)
+-
+- #only read the start of the file
+- file(STRINGS
++  if (EXISTS "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h")
++    file(STRINGS
++      "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h"
++      TBB_VERSION_CONTENTS
++      REGEX "VERSION")
++  else()
++    #only read the start of the file
++    file(STRINGS
+       "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h"
+       TBB_VERSION_CONTENTS
+       REGEX "VERSION")
++  endif()
+ 
+   string(REGEX REPLACE
+     ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
+-- 
+GitLab
+
+From 3e5313e71c35aaeabfd4e65e090031716460d35e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= <timothee.couble at kitware.com>
+Date: Thu, 18 Mar 2021 16:43:47 +0100
+Subject: [PATCH] Replace task_scheduler_init with task_arena
+
+And update Initialize documentation
+---
+ Common/Core/SMP/TBB/vtkSMPTools.cxx          | 47 ++++++++-------
+ Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in | 62 ++++++++++++--------
+ Common/Core/vtkSMPTools.h                    |  7 +--
+ 3 files changed, 65 insertions(+), 51 deletions(-)
+
+diff --git a/Common/Core/SMP/TBB/vtkSMPTools.cxx b/Common/Core/SMP/TBB/vtkSMPTools.cxx
+index c3f45fa4888..596aedbb963 100644
+--- a/Common/Core/SMP/TBB/vtkSMPTools.cxx
++++ b/Common/Core/SMP/TBB/vtkSMPTools.cxx
+@@ -24,24 +24,13 @@
+ #define __TBB_NO_IMPLICIT_LINKAGE 1
+ #endif
+ 
+-#include <tbb/task_scheduler_init.h>
++#include <tbb/task_arena.h>
+ 
+ #ifdef _MSC_VER
+ #pragma pop_macro("__TBB_NO_IMPLICIT_LINKAGE")
+ #endif
+ 
+-struct vtkSMPToolsInit
+-{
+-  tbb::task_scheduler_init Init;
+-
+-  vtkSMPToolsInit(int numThreads)
+-    : Init(numThreads)
+-  {
+-  }
+-};
+-
+-static bool vtkSMPToolsInitialized = 0;
+-static int vtkTBBNumSpecifiedThreads = 0;
++static tbb::task_arena taskArena;
+ static vtkSimpleCriticalSection vtkSMPToolsCS;
+ 
+ //------------------------------------------------------------------------------
+@@ -54,23 +43,37 @@ const char* vtkSMPTools::GetBackend()
+ void vtkSMPTools::Initialize(int numThreads)
+ {
+   vtkSMPToolsCS.Lock();
+-  if (!vtkSMPToolsInitialized)
++
++  // If numThreads <= 0, don't create a task_arena
++  // and let TBB do the default thing.
++  if (numThreads > 0 && numThreads != taskArena.max_concurrency())
+   {
+-    // If numThreads <= 0, don't create a task_scheduler_init
+-    // and let TBB do the default thing.
+-    if (numThreads > 0)
++    if (taskArena.is_active())
+     {
+-      static vtkSMPToolsInit aInit(numThreads);
+-      vtkTBBNumSpecifiedThreads = numThreads;
++      taskArena.terminate();
+     }
+-    vtkSMPToolsInitialized = true;
++    taskArena.initialize(numThreads);
+   }
++
+   vtkSMPToolsCS.Unlock();
+ }
+ 
+ //------------------------------------------------------------------------------
+ int vtkSMPTools::GetEstimatedNumberOfThreads()
+ {
+-  return vtkTBBNumSpecifiedThreads ? vtkTBBNumSpecifiedThreads
+-                                   : tbb::task_scheduler_init::default_num_threads();
++  return taskArena.max_concurrency();
++}
++
++//------------------------------------------------------------------------------
++void vtk::detail::smp::vtkSMPTools_Impl_For_TBB(vtkIdType first, vtkIdType last, vtkIdType grain,
++  ExecuteFunctorPtrType functorExecuter, void* functor)
++{
++  if (taskArena.is_active())
++  {
++    taskArena.execute([&] { functorExecuter(functor, first, last, grain); });
++  }
++  else
++  {
++    functorExecuter(functor, first, last, grain);
++  }
+ }
+diff --git a/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in b/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in
+index c6614e42a4a..1c7253deeec 100644
+--- a/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in
++++ b/Common/Core/SMP/TBB/vtkSMPToolsInternal.h.in
+@@ -12,7 +12,8 @@
+      PURPOSE.  See the above copyright notice for more information.
+ 
+ =========================================================================*/
+-#include "vtkNew.h"
++
++#include "vtkCommonCoreModule.h" // For export macro
+ 
+ #ifdef _MSC_VER
+ #  pragma push_macro("__TBB_NO_IMPLICIT_LINKAGE")
+@@ -34,6 +35,10 @@ namespace detail
+ namespace smp
+ {
+ 
++typedef void (*ExecuteFunctorPtrType)(void*, vtkIdType, vtkIdType, vtkIdType);
++void VTKCOMMONCORE_EXPORT vtkSMPTools_Impl_For_TBB(vtkIdType first, vtkIdType last, vtkIdType grain,
++  ExecuteFunctorPtrType functorExecuter, void* functor);
++
+ //--------------------------------------------------------------------------------
+ template <typename T>
+ class FuncCall
+@@ -43,22 +48,22 @@ class FuncCall
+   void operator=(const FuncCall&) = delete;
+ 
+ public:
+-  void operator() (const tbb::blocked_range<vtkIdType>& r) const
+-  {
+-      o.Execute(r.begin(), r.end());
++  void operator()(const tbb::blocked_range<vtkIdType>& r) const {
++    o.Execute(r.begin(), r.end());
+   }
+ 
+-  FuncCall (T& _o) : o(_o)
++  FuncCall(T& _o)
++    : o(_o)
+   {
+   }
+ };
+ 
+ //--------------------------------------------------------------------------------
+ template <typename FunctorInternal>
+-void vtkSMPTools_Impl_For(
+-  vtkIdType first, vtkIdType last, vtkIdType grain,
+-  FunctorInternal& fi)
++void ExecuteFunctor(void* functor, vtkIdType first, vtkIdType last, vtkIdType grain)
+ {
++  FunctorInternal& fi = *reinterpret_cast<FunctorInternal*>(functor);
++
+   vtkIdType range = last - first;
+   if (range <= 0)
+   {
+@@ -66,20 +71,26 @@ void vtkSMPTools_Impl_For(
+   }
+   if (grain > 0)
+   {
+-    tbb::parallel_for(tbb::blocked_range<vtkIdType>(first, last, grain), FuncCall<FunctorInternal>(fi));
++    tbb::parallel_for(
++      tbb::blocked_range<vtkIdType>(first, last, grain), FuncCall<FunctorInternal>(fi));
+   }
+   else
+   {
+     // When the grain is not specified, automatically calculate an appropriate grain size so
+     // most of the time will still be spent running the calculation and not task overhead.
+-    const vtkIdType numberThreadsEstimate = 40; // Estimate of how many threads we might be able to run
+-    const vtkIdType batchesPerThread = 5; // Plan for a few batches per thread so one busy core doesn't stall the whole system
++
++    // Estimate of how many threads we might be able to run
++    const vtkIdType numberThreadsEstimate = 40;
++    // Plan for a few batches per thread so one busy core doesn't stall the whole system
++    const vtkIdType batchesPerThread = 5;
+     const vtkIdType batches = numberThreadsEstimate * batchesPerThread;
+ 
+     if (range >= batches)
+     {
+-      vtkIdType calculatedGrain = ((range - 1) / batches) + 1; // std::ceil round up for systems without cmath
+-      tbb::parallel_for(tbb::blocked_range<vtkIdType>(first, last, calculatedGrain), FuncCall<FunctorInternal>(fi));
++      // std::ceil round up for systems without cmath
++      vtkIdType calculatedGrain = ((range - 1) / batches) + 1;
++      tbb::parallel_for(
++        tbb::blocked_range<vtkIdType>(first, last, calculatedGrain), FuncCall<FunctorInternal>(fi));
+     }
+     else
+     {
+@@ -91,23 +102,26 @@ void vtkSMPTools_Impl_For(
+ }
+ 
+ //--------------------------------------------------------------------------------
+-template<typename RandomAccessIterator>
+-void vtkSMPTools_Impl_Sort(RandomAccessIterator begin,
+-                                  RandomAccessIterator end)
++template <typename FunctorInternal>
++void vtkSMPTools_Impl_For(vtkIdType first, vtkIdType last, vtkIdType grain, FunctorInternal& fi)
++{
++  vtkSMPTools_Impl_For_TBB(first, last, grain, ExecuteFunctor<FunctorInternal>, &fi);
++}
++
++//--------------------------------------------------------------------------------
++template <typename RandomAccessIterator>
++void vtkSMPTools_Impl_Sort(RandomAccessIterator begin, RandomAccessIterator end)
+ {
+   tbb::parallel_sort(begin, end);
+ }
+ 
+ //--------------------------------------------------------------------------------
+-template<typename RandomAccessIterator, typename Compare>
+-void vtkSMPTools_Impl_Sort(RandomAccessIterator begin,
+-                                  RandomAccessIterator end,
+-                                  Compare comp)
++template <typename RandomAccessIterator, typename Compare>
++void vtkSMPTools_Impl_Sort(RandomAccessIterator begin, RandomAccessIterator end, Compare comp)
+ {
+   tbb::parallel_sort(begin, end, comp);
+ }
+ 
+-
+-}//namespace smp
+-}//namespace detail
+-}//namespace vtk
++} // namespace smp
++} // namespace detail
++} // namespace vtk
+diff --git a/Common/Core/vtkSMPTools.h b/Common/Core/vtkSMPTools.h
+index cee63ad6ec6..4fa28abd72a 100644
+--- a/Common/Core/vtkSMPTools.h
++++ b/Common/Core/vtkSMPTools.h
+@@ -228,11 +228,8 @@ public:
+    * Initialize the underlying libraries for execution. This is
+    * not required as it is automatically called before the first
+    * execution of any parallel code. However, it can be used to
+-   * control the maximum number of threads used when the back-end
+-   * supports it (currently Simple and TBB only). Make sure to call
+-   * it before any other parallel operation.
+-   * When using Kaapi, use the KAAPI_CPUCOUNT env. variable to control
+-   * the number of threads used in the thread pool.
++   * control the maximum number of threads used. Make sure to call
++   * it before the parallel operation.
+    */
+   static void Initialize(int numThreads = 0);
+ 
+-- 
+GitLab
+



More information about the arch-commits mailing list