// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause /** * @class vtkConduitArrayUtilitiesDevice * @brief helper to convert Conduit arrays stored on acceleration devices to Viskores arrays. * * vtkConduitArrayUtilitiesDevice is intended to convert Conduit nodes satisfying the * `mcarray` protocol, with memory allocated on acceleration devices, to Viskores arrays. It uses * zero-copy, when possible otherwise it uses deep copy. * * This is primarily designed for use by vtkConduitSource. */ #ifndef vtkConduitArrayUtilitiesDevice_h #define vtkConduitArrayUtilitiesDevice_h #include "vtkDeprecation.h" // for VTK_DEPRECATED_IN_9_6_0 #include "vtkIOCatalystConduitModule.h" // for exports #include "vtkObject.h" #include "vtkSmartPointer.h" // for vtkSmartPointer #include "conduit.h" // for conduit_node #include "viskores/cont/DeviceAdapterTag.h" // for viskores::cont::DeviceAdapterId #include // for std::string VTK_ABI_NAMESPACE_BEGIN class vtkCellArray; class vtkDataArray; class VTKIOCATALYSTCONDUIT_EXPORT vtkConduitArrayUtilitiesDevice : public vtkObject { public: static vtkConduitArrayUtilitiesDevice* New(); vtkTypeMacro(vtkConduitArrayUtilitiesDevice, vtkObject); void PrintSelf(ostream& os, vtkIndent indent) override; static vtkSmartPointer MCArrayToVTKmAOSArray( const conduit_node* mcarray, const viskores::cont::DeviceAdapterId& deviceAdapterId); static vtkSmartPointer MCArrayToVTKmSOAArray( const conduit_node* mcarray, const viskores::cont::DeviceAdapterId& deviceAdapterId); VTK_DEPRECATED_IN_9_6_0("Use the overload without force_signed parameter.") static vtkSmartPointer MCArrayToVTKmAOSArray(const conduit_node* mcarray, bool vtkNotUsed(force_signed), const viskores::cont::DeviceAdapterId& deviceAdapterId) { return MCArrayToVTKmAOSArray(mcarray, deviceAdapterId); } VTK_DEPRECATED_IN_9_6_0("Use the overload without force_signed parameter.") static vtkSmartPointer MCArrayToVTKmSOAArray(const conduit_node* mcarray, bool vtkNotUsed(force_signed), const viskores::cont::DeviceAdapterId& deviceAdapterId) { return MCArrayToVTKmSOAArray(mcarray, deviceAdapterId); } static bool IfVTKmConvertVTKMonoShapedCellArray(vtkIdType numberOfPoints, int cellType, vtkIdType cellSize, vtkDataArray* connectivity, vtkCellArray* cellArray); static bool IfVTKmConvertVTKMixedCellArray(vtkIdType numberOfPoints, vtkDataArray* offsets, vtkDataArray* shapes, vtkDataArray* elements, vtkCellArray* cellArray); static bool CanRunOn(const viskores::cont::DeviceAdapterId& deviceAdapterId); protected: vtkConduitArrayUtilitiesDevice(); ~vtkConduitArrayUtilitiesDevice() override; private: vtkConduitArrayUtilitiesDevice(const vtkConduitArrayUtilitiesDevice&) = delete; void operator=(const vtkConduitArrayUtilitiesDevice&) = delete; }; VTK_ABI_NAMESPACE_END #endif