mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
Stick with brigand sequences for CUDA device passes.
The tao ones won't compile otherwise. This should be okay, since these are all just compile time helpers on host-only functions -- they won't generate different sized data structures etc if we mix them in the same build.
This commit is contained in:
parent
3fddadb9a2
commit
b2daec0e35
@ -26,6 +26,11 @@
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
// MSVC < 2019 and CUDA have issues with tao integer sequences
|
||||||
|
#if (defined(VTKM_MSVC) && (_MSC_VER < 1920)) || defined(VTKM_CUDA_DEVICE_PASS)
|
||||||
|
#define VTKM_USE_BRIGAND_SEQ
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace vtkm
|
namespace vtkm
|
||||||
{
|
{
|
||||||
namespace cont
|
namespace cont
|
||||||
@ -352,11 +357,11 @@ struct DecoratorStorageTraits
|
|||||||
using ArrayTupleType = vtkmstd::tuple<ArrayTs...>;
|
using ArrayTupleType = vtkmstd::tuple<ArrayTs...>;
|
||||||
|
|
||||||
// size_t integral constants that index ArrayTs:
|
// size_t integral constants that index ArrayTs:
|
||||||
#if defined(VTKM_MSVC) && (_MSC_VER < 1920) //Less than MSCV2019
|
#ifdef VTKM_USE_BRIGAND_SEQ
|
||||||
using IndexList = brigand::make_sequence<brigand::size_t<0>, sizeof...(ArrayTs)>;
|
using IndexList = brigand::make_sequence<brigand::size_t<0>, sizeof...(ArrayTs)>;
|
||||||
#else
|
#else // VTKM_USE_BRIGAND_SEQ
|
||||||
using IndexList = tao::seq::make_index_sequence<sizeof...(ArrayTs)>;
|
using IndexList = tao::seq::make_index_sequence<sizeof...(ArrayTs)>;
|
||||||
#endif
|
#endif // VTKM_USE_BRIGAND_SEQ
|
||||||
|
|
||||||
// Portal lists:
|
// Portal lists:
|
||||||
// NOTE we have to pass the parameter pack here instead of using ArrayList
|
// NOTE we have to pass the parameter pack here instead of using ArrayList
|
||||||
@ -435,7 +440,7 @@ struct DecoratorStorageTraits
|
|||||||
return { impl.CreateFunctor(portals...), impl.CreateInverseFunctor(portals...), numVals };
|
return { impl.CreateFunctor(portals...), impl.CreateInverseFunctor(portals...), numVals };
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(VTKM_MSVC) && (_MSC_VER < 1920) //Less than MSCV2019
|
#ifdef VTKM_USE_BRIGAND_SEQ
|
||||||
// Portal construction methods. These actually create portals.
|
// Portal construction methods. These actually create portals.
|
||||||
template <template <typename...> class List, typename... Indices>
|
template <template <typename...> class List, typename... Indices>
|
||||||
VTKM_CONT static PortalControlType MakePortalControl(const DecoratorImplT& impl,
|
VTKM_CONT static PortalControlType MakePortalControl(const DecoratorImplT& impl,
|
||||||
@ -516,7 +521,7 @@ struct DecoratorStorageTraits
|
|||||||
GetPortalOutput(vtkmstd::get<Indices{}.value>(arrays), dev)...);
|
GetPortalOutput(vtkmstd::get<Indices{}.value>(arrays), dev)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else // VTKM_USE_BRIGAND_SEQ
|
||||||
// Portal construction methods. These actually create portals.
|
// Portal construction methods. These actually create portals.
|
||||||
template <template <typename, std::size_t...> class List, std::size_t... Indices>
|
template <template <typename, std::size_t...> class List, std::size_t... Indices>
|
||||||
VTKM_CONT static PortalControlType MakePortalControl(const DecoratorImplT& impl,
|
VTKM_CONT static PortalControlType MakePortalControl(const DecoratorImplT& impl,
|
||||||
@ -570,7 +575,7 @@ struct DecoratorStorageTraits
|
|||||||
return CreatePortalDecorator<PortalExecutionType<Device>>(
|
return CreatePortalDecorator<PortalExecutionType<Device>>(
|
||||||
numValues, impl, GetPortalOutput(vtkmstd::get<Indices>(arrays), dev)...);
|
numValues, impl, GetPortalOutput(vtkmstd::get<Indices>(arrays), dev)...);
|
||||||
}
|
}
|
||||||
#endif
|
#endif // VTKM_USE_BRIGAND_SEQ
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace decor
|
} // end namespace decor
|
||||||
@ -887,4 +892,6 @@ make_ArrayHandleDecorator(vtkm::Id numValues, DecoratorImplT&& f, ArrayTs&&... a
|
|||||||
}
|
}
|
||||||
} // namespace vtkm::cont
|
} // namespace vtkm::cont
|
||||||
|
|
||||||
|
#undef VTKM_USE_BRIGAND_SEQ
|
||||||
|
|
||||||
#endif //vtk_m_ArrayHandleDecorator_h
|
#endif //vtk_m_ArrayHandleDecorator_h
|
||||||
|
Loading…
Reference in New Issue
Block a user