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

Bruno Pagani archange at gemini.archlinux.org
Sat Mar 19 16:05:22 UTC 2022


    Date: Saturday, March 19, 2022 @ 16:05:22
  Author: archange
Revision: 1161653

archrelease: copy trunk to community-x86_64

Added:
  paraview/repos/community-x86_64/PKGBUILD
    (from rev 1161649, paraview/trunk/PKGBUILD)
  paraview/repos/community-x86_64/ffmpeg5.patch
    (from rev 1161650, paraview/trunk/ffmpeg5.patch)
  paraview/repos/community-x86_64/paraview-tbb-2021.patch
    (from rev 1161650, paraview/trunk/paraview-tbb-2021.patch)
  paraview/repos/community-x86_64/paraview-vtkm-tbb-2021.patch
    (from rev 1161650, paraview/trunk/paraview-vtkm-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                     |  176 +++---
 ffmpeg5.patch                |  316 ++++++------
 paraview-tbb-2021.patch      |  560 ++++++++++-----------
 paraview-vtkm-tbb-2021.patch | 1052 ++++++++++++++++++++---------------------
 4 files changed, 1053 insertions(+), 1051 deletions(-)

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2022-03-19 16:05:18 UTC (rev 1161652)
+++ PKGBUILD	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -1,87 +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=12
-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
-  cmake -B build -S ParaView-v${pkgver/R/-R} -G Ninja \
-    -DCMAKE_BUILD_TYPE=Release \
-    -DCMAKE_INSTALL_PREFIX=/usr \
-    -DCMAKE_SKIP_INSTALL_RPATH=ON \
-    -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 1161649, paraview/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -0,0 +1,89 @@
+# 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}
+}

Deleted: ffmpeg5.patch
===================================================================
--- ffmpeg5.patch	2022-03-19 16:05:18 UTC (rev 1161652)
+++ ffmpeg5.patch	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -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
-

Copied: paraview/repos/community-x86_64/ffmpeg5.patch (from rev 1161650, paraview/trunk/ffmpeg5.patch)
===================================================================
--- ffmpeg5.patch	                        (rev 0)
+++ ffmpeg5.patch	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -0,0 +1,158 @@
+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 16:05:18 UTC (rev 1161652)
+++ paraview-tbb-2021.patch	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -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);
- 

Copied: paraview/repos/community-x86_64/paraview-tbb-2021.patch (from rev 1161650, paraview/trunk/paraview-tbb-2021.patch)
===================================================================
--- paraview-tbb-2021.patch	                        (rev 0)
+++ paraview-tbb-2021.patch	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -0,0 +1,280 @@
+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 16:05:18 UTC (rev 1161652)
+++ paraview-vtkm-tbb-2021.patch	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -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/paraview-vtkm-tbb-2021.patch (from rev 1161650, paraview/trunk/paraview-vtkm-tbb-2021.patch)
===================================================================
--- paraview-vtkm-tbb-2021.patch	                        (rev 0)
+++ paraview-vtkm-tbb-2021.patch	2022-03-19 16:05:22 UTC (rev 1161653)
@@ -0,0 +1,526 @@
+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()
+ 
+ 



More information about the arch-commits mailing list