diff --git a/.gitlab/ci/config/initial_config.cmake b/.gitlab/ci/config/initial_config.cmake index c58a3935b..3953183c7 100644 --- a/.gitlab/ci/config/initial_config.cmake +++ b/.gitlab/ci/config/initial_config.cmake @@ -29,6 +29,10 @@ foreach(option IN LISTS options) elseif(vtk_types STREQUAL option) set(VTKm_USE_DEFAULT_TYPES_FOR_VTK "ON" CACHE STRING "") + elseif(ascent_types STREQUAL option) + # Note: ascent_types also requires 32bit_ids and 64bit_floats + set(VTKm_USE_DEFAULT_TYPES_FOR_ASCENT "ON" CACHE STRING "") + elseif(32bit_ids STREQUAL option) set(VTKm_USE_64BIT_IDS "OFF" CACHE STRING "") diff --git a/.gitlab/ci/ubuntu1604.yml b/.gitlab/ci/ubuntu1604.yml index 8d8f1ac99..4267ab397 100644 --- a/.gitlab/ci/ubuntu1604.yml +++ b/.gitlab/ci/ubuntu1604.yml @@ -17,7 +17,7 @@ build:ubuntu1604_gcc5: CC: "gcc-5" CXX: "g++-5" CMAKE_BUILD_TYPE: RelWithDebInfo - VTKM_SETTINGS: "cuda+pascal+no_virtual" + VTKM_SETTINGS: "cuda+pascal+no_virtual+ascent_types+32bit_ids+64bit_floats" test:ubuntu1604_gcc5: tags: diff --git a/vtkm/cont/CMakeLists.txt b/vtkm/cont/CMakeLists.txt index 1245c6899..f4f77e40f 100644 --- a/vtkm/cont/CMakeLists.txt +++ b/vtkm/cont/CMakeLists.txt @@ -217,12 +217,36 @@ endif() vtkm_get_kit_name(kit_name kit_dir) # Some custom types included with VTK-m -vtkm_option(VTKm_USE_DEFAULT_TYPES_FOR_VTK "Compile VTK-m algorithms for use with types from VTK." OFF) +vtkm_option(VTKm_USE_DEFAULT_TYPES_FOR_VTK + "Compile VTK-m algorithms for use with types from VTK." + OFF + ) if (VTKm_USE_DEFAULT_TYPES_FOR_VTK) set(VTKm_DEFAULT_TYPES_HEADER "internal/DefaultTypesVTK.h.in") endif() -mark_as_advanced(VTKm_USE_DEFAULT_TYPES_FOR_VTK) +vtkm_option(VTKm_USE_DEFAULT_TYPES_FOR_ASCENT + "Compile VTK-m algorithms for use with types from Ascent." + OFF + ) +if (VTKm_USE_DEFAULT_TYPES_FOR_ASCENT) + set(VTKm_DEFAULT_TYPES_HEADER "internal/DefaultTypesAscent.h.in") + if (VTKm_USE_64BIT_IDS) + message(SEND_ERROR + "When VTKm_USE_DEFAULT_TYPES_FOR_ASCENT is ON, VTKm_USE_64BIT_IDS must be set to OFF" + ) + endif() + if (NOT VTKm_USE_DOUBLE_PRECISION) + message(SEND_ERROR + "When VTKm_USE_DEFAULT_TYPES_FOR_ASCENT is ON, VTKm_USE_DOUBLE_PRECISION must be set to ON" + ) + endif() +endif() + +mark_as_advanced( + VTKm_USE_DEFAULT_TYPES_FOR_VTK + VTKm_USE_DEFAULT_TYPES_FOR_ASCENT + ) if (VTKm_DEFAULT_TYPES_HEADER) set(VTK_M_HAS_DEFAULT_TYPES_HEADER TRUE) diff --git a/vtkm/cont/internal/DefaultTypesAscent.h.in b/vtkm/cont/internal/DefaultTypesAscent.h.in new file mode 100644 index 000000000..8c81d8740 --- /dev/null +++ b/vtkm/cont/internal/DefaultTypesAscent.h.in @@ -0,0 +1,69 @@ +//============================================================================ +// Copyright (c) Kitware, Inc. +// All rights reserved. +// See LICENSE.txt for details. +// +// This software is distributed WITHOUT ANY WARRANTY; without even +// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the above copyright notice for more information. +//============================================================================ +#ifndef vtk_m_cont_internal_DefaultTypesAscent_h +#define vtk_m_cont_internal_DefaultTypesAscent_h + +#include +#include + +#include +#include +#include +#include + +#ifdef VTKM_USE_64BIT_IDS +#error "VTK-m must be compiled with VTKM_USE_64BITS_IDS set to OFF for Ascent." +#endif + +#ifndef VTKM_USE_DOUBLE_PRECISION +#error "VTK-m must be compiled with VTKM_USE_DOUBLE_PRECISION to ON for Ascent." +#endif + +namespace vtkm +{ +namespace internal +{ + +// Default value types for fields in Ascent. +using TypeListAscent = vtkm::List; + +} +} // namespace vtkm::internal + +#define VTKM_DEFAULT_TYPE_LIST ::vtkm::internal::TypeListAscent + +namespace vtkm +{ +namespace cont +{ +namespace internal +{ + +using StorageListAscent = vtkm::List< + vtkm::cont::StorageTagBasic, // Basic storage should always be included + vtkm::cont::StorageTagSOA, // Support separate arrays for each component + vtkm::cont::StorageTagUniformPoints, // Support uniform structured grids + vtkm::cont::StorageTagCartesianProduct>; + +} +} +} // namespace vtkm::cont::internal + +#define VTKM_DEFAULT_STORAGE_LIST ::vtkm::cont::internal::StorageListAscent + +#endif //vtk_m_cont_internal_DefaultTypesAscent_h diff --git a/vtkm/cont/internal/DefaultTypesVTK.h.in b/vtkm/cont/internal/DefaultTypesVTK.h.in index fee736362..199efa594 100644 --- a/vtkm/cont/internal/DefaultTypesVTK.h.in +++ b/vtkm/cont/internal/DefaultTypesVTK.h.in @@ -7,8 +7,8 @@ // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. //============================================================================ -#ifndef vtkmDefaultTypes_h -#define vtkmDefaultTypes_h +#ifndef vtk_m_cont_internal_DefaultTypesVTK_h +#define vtk_m_cont_internal_DefaultTypesVTK_h // This configures the default types to use when compiling VTK-m for use as an // accelerator in VTK. @@ -105,4 +105,4 @@ using CellListAllOutVTK = vtkm::ListAppend -void TryDefaultType(T) +struct TryDefaultType { - vtkm::cont::VariantArrayHandle array = CreateArrayVariant(T()); + template + void operator()(T) const + { + vtkm::cont::VariantArrayHandle array = CreateArrayVariant(T()); - CheckArrayVariant(array, vtkm::VecTraits::NUM_COMPONENTS, true); + CheckArrayVariant(array, vtkm::VecTraits::NUM_COMPONENTS, true); - TryNewInstance(T(), array); + TryNewInstance(T(), array); - TryAsMultiplexer(T(), array); -} + TryAsMultiplexer(T(), array); + } +}; struct TryBasicVTKmType { @@ -471,18 +474,18 @@ void TryCastToArrayHandle(const ArrayHandleType& array) void TryCastToArrayHandle() { std::cout << " Normal array handle." << std::endl; - vtkm::Id buffer[ARRAY_SIZE]; + vtkm::FloatDefault buffer[ARRAY_SIZE]; for (vtkm::Id index = 0; index < ARRAY_SIZE; index++) { - buffer[index] = TestValue(index, vtkm::Id()); + buffer[index] = TestValue(index, vtkm::FloatDefault()); } - vtkm::cont::ArrayHandle array = + vtkm::cont::ArrayHandle array = vtkm::cont::make_ArrayHandle(buffer, ARRAY_SIZE, vtkm::CopyFlag::On); TryCastToArrayHandle(array); std::cout << " Cast array handle." << std::endl; - TryCastToArrayHandle(vtkm::cont::make_ArrayHandleCast(array, vtkm::FloatDefault())); + TryCastToArrayHandle(vtkm::cont::make_ArrayHandleCast(array)); std::cout << " Composite vector array handle." << std::endl; TryCastToArrayHandle(vtkm::cont::make_ArrayHandleCompositeVector(array, array)); @@ -495,7 +498,8 @@ void TryCastToArrayHandle() TryCastToArrayHandle(countingArray); std::cout << " Group vec array handle" << std::endl; - vtkm::cont::ArrayHandleGroupVec, 2> groupVecArray(array); + vtkm::cont::ArrayHandleGroupVec, 2> groupVecArray( + array); TryCastToArrayHandle(groupVecArray); std::cout << " Implicit array handle." << std::endl; @@ -522,18 +526,7 @@ void TryCastToArrayHandle() void TestVariantArrayHandle() { std::cout << "Try common types with default type lists." << std::endl; - std::cout << "*** vtkm::Id **********************" << std::endl; - TryDefaultType(vtkm::Id()); - std::cout << "*** vtkm::FloatDefault ************" << std::endl; - TryDefaultType(vtkm::FloatDefault()); - std::cout << "*** vtkm::Float32 *****************" << std::endl; - TryDefaultType(vtkm::Float32()); - std::cout << "*** vtkm::Float64 *****************" << std::endl; - TryDefaultType(vtkm::Float64()); - std::cout << "*** vtkm::Vec **********" << std::endl; - TryDefaultType(vtkm::Vec3f_32()); - std::cout << "*** vtkm::Vec **********" << std::endl; - TryDefaultType(vtkm::Vec3f_64()); + vtkm::testing::Testing::TryTypes(TryDefaultType{}, VTKM_DEFAULT_TYPE_LIST{}); std::cout << "Try exemplar VTK-m types." << std::endl; vtkm::testing::Testing::TryTypes(TryBasicVTKmType()); diff --git a/vtkm/filter/testing/UnitTestFieldToColors.cxx b/vtkm/filter/testing/UnitTestFieldToColors.cxx index 96914ca80..a82ea83d9 100644 --- a/vtkm/filter/testing/UnitTestFieldToColors.cxx +++ b/vtkm/filter/testing/UnitTestFieldToColors.cxx @@ -18,7 +18,7 @@ void TestFieldToColors() { //faux input field constexpr vtkm::Id nvals = 8; - constexpr int data[nvals] = { -1, 0, 10, 20, 30, 40, 50, 60 }; + constexpr vtkm::FloatDefault data[nvals] = { -1, 0, 10, 20, 30, 40, 50, 60 }; //build a color table with clamping off and verify that sampling works vtkm::Range range{ 0.0, 50.0 }; diff --git a/vtkm/filter/testing/UnitTestPartitionedDataSetFilters.cxx b/vtkm/filter/testing/UnitTestPartitionedDataSetFilters.cxx index 8af9fcc13..398a36b51 100644 --- a/vtkm/filter/testing/UnitTestPartitionedDataSetFilters.cxx +++ b/vtkm/filter/testing/UnitTestPartitionedDataSetFilters.cxx @@ -70,7 +70,7 @@ vtkm::cont::PartitionedDataSet PartitionedDataSetBuilder(std::size_t partitionNu } return partitions; } -template +template void Result_Verify(const vtkm::cont::PartitionedDataSet& result, D& filter, const vtkm::cont::PartitionedDataSet& partitions, @@ -88,9 +88,9 @@ void Result_Verify(const vtkm::cont::PartitionedDataSet& result, partitionResult.GetField(outputFieldName).GetNumberOfValues(), "result vectors' size incorrect"); - vtkm::cont::ArrayHandle partitionArray; + vtkm::cont::ArrayHandle partitionArray; result.GetPartition(j).GetField(outputFieldName).GetData().CopyTo(partitionArray); - vtkm::cont::ArrayHandle sDataSetArray; + vtkm::cont::ArrayHandle sDataSetArray; partitionResult.GetField(outputFieldName).GetData().CopyTo(sDataSetArray); const vtkm::Id numValues = result.GetPartition(j).GetField(outputFieldName).GetNumberOfValues(); @@ -109,12 +109,12 @@ void TestPartitionedDataSetFilters() vtkm::cont::PartitionedDataSet result; vtkm::cont::PartitionedDataSet partitions; - partitions = PartitionedDataSetBuilder(partitionNum, "pointvar"); + partitions = PartitionedDataSetBuilder(partitionNum, "pointvar"); vtkm::filter::CellAverage cellAverage; cellAverage.SetOutputFieldName("average"); cellAverage.SetActiveField("pointvar"); result = cellAverage.Execute(partitions); - Result_Verify(result, cellAverage, partitions, std::string("pointvar")); + Result_Verify(result, cellAverage, partitions, std::string("pointvar")); } int UnitTestPartitionedDataSetFilters(int argc, char* argv[]) diff --git a/vtkm/worklet/testing/UnitTestWorkletMapField.cxx b/vtkm/worklet/testing/UnitTestWorkletMapField.cxx index d50c58bc2..077934bda 100644 --- a/vtkm/worklet/testing/UnitTestWorkletMapField.cxx +++ b/vtkm/worklet/testing/UnitTestWorkletMapField.cxx @@ -126,14 +126,16 @@ struct DoVariantTestWorklet std::cout << "Create and run dispatcher with unknown arrays." << std::endl; vtkm::worklet::DispatcherMapField dispatcher; - vtkm::cont::UnknownArrayHandle inputVariant(inputHandle); + using UncertainArrayType = + vtkm::cont::UncertainArrayHandle, VTKM_DEFAULT_STORAGE_LIST>; + UncertainArrayType inputVariant(inputHandle); { //Verify we can pass by value vtkm::cont::ArrayCopy(inputHandle, inoutHandle); vtkm::cont::UnknownArrayHandle outputVariant(outputHandle); vtkm::cont::UnknownArrayHandle inoutVariant(inoutHandle); dispatcher.Invoke( - inputVariant.ResetTypes, vtkm::List>(), + inputVariant.template ResetTypes, vtkm::List>(), outputVariant.ResetTypes, vtkm::List>(), inoutVariant.ResetTypes, vtkm::List>()); CheckPortal(outputHandle.ReadPortal()); @@ -141,8 +143,8 @@ struct DoVariantTestWorklet } { //Verify we can pass by pointer - vtkm::cont::UnknownArrayHandle outputVariant(outputHandle); - vtkm::cont::UnknownArrayHandle inoutVariant(inoutHandle); + UncertainArrayType outputVariant(outputHandle); + UncertainArrayType inoutVariant(inoutHandle); vtkm::cont::ArrayCopy(inputHandle, inoutHandle); dispatcher.Invoke(&inputVariant, outputHandle, inoutHandle);