mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-21 11:35:43 +00:00
Merge topic 'fix-ExecutionWholeArray'
e2129364 Fix ExecutionWholeArray Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Robert Maynard <robert.maynard@kitware.com> Merge-request: !138
This commit is contained in:
commit
0e964f6484
@ -46,9 +46,15 @@ public:
|
||||
}
|
||||
|
||||
VTKM_CONT_EXPORT
|
||||
ExecutionWholeArray( const vtkm::cont::ArrayHandle<T,StorageTag>& handle,
|
||||
ExecutionWholeArray( vtkm::cont::ArrayHandle<T,StorageTag>& handle ):
|
||||
Portal( handle.PrepareForInPlace( DeviceAdapterTag()) )
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT_EXPORT
|
||||
ExecutionWholeArray( vtkm::cont::ArrayHandle<T,StorageTag>& handle,
|
||||
vtkm::Id length ):
|
||||
Portal( handle.PrepareForInPlace(length, DeviceAdapterTag()) )
|
||||
Portal( handle.PrepareForOutput( length, DeviceAdapterTag()) )
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -31,25 +31,27 @@
|
||||
class TestExecObjectWorklet : public vtkm::worklet::WorkletMapField
|
||||
{
|
||||
public:
|
||||
typedef void ControlSignature( FieldIn<>, ExecObject, FieldOut<>);
|
||||
typedef void ExecutionSignature(_1, _2, _3);
|
||||
typedef void ControlSignature( FieldIn<>, ExecObject, ExecObject, FieldOut<>);
|
||||
typedef void ExecutionSignature(_1, _2, _3, _4);
|
||||
|
||||
template<typename T, typename StorageTag>
|
||||
VTKM_EXEC_EXPORT
|
||||
void operator()(const vtkm::Id &index,
|
||||
const vtkm::exec::ExecutionWholeArrayConst<T,StorageTag> &execArg,
|
||||
const vtkm::exec::ExecutionWholeArrayConst<T,StorageTag> &execIn,
|
||||
vtkm::exec::ExecutionWholeArray<T,StorageTag> &execOut,
|
||||
T& out) const
|
||||
{
|
||||
if (!test_equal(execArg.Get(index), TestValue(index, T()) + T(100)))
|
||||
if (!test_equal(execIn.Get(index), TestValue(index, T()) + T(100)))
|
||||
{
|
||||
this->RaiseError("Got wrong input value.");
|
||||
}
|
||||
out = execArg.Get(index) - T(100);
|
||||
out = execIn.Get(index) - T(100);
|
||||
execOut.Set(index, out);
|
||||
}
|
||||
|
||||
template<typename T1, typename T2>
|
||||
template<typename T1, typename T2, typename T3>
|
||||
VTKM_EXEC_EXPORT
|
||||
void operator()(const vtkm::Id &, const T1 &, const T2 &) const
|
||||
void operator()(const vtkm::Id &, const T1 &, const T2 &, const T3&) const
|
||||
{
|
||||
this->RaiseError("Cannot call this worklet with different types.");
|
||||
}
|
||||
@ -78,24 +80,33 @@ struct DoTestWorklet
|
||||
vtkm::cont::ArrayHandle<T> inputHandle =
|
||||
vtkm::cont::make_ArrayHandle(inputArray, ARRAY_SIZE);
|
||||
vtkm::cont::ArrayHandle<T> outputHandle;
|
||||
vtkm::cont::ArrayHandle<T> outputFieldArray;
|
||||
|
||||
std::cout << "Create and run dispatcher." << std::endl;
|
||||
vtkm::worklet::DispatcherMapField<WorkletType> dispatcher;
|
||||
dispatcher.Invoke(counting,
|
||||
vtkm::exec::ExecutionWholeArrayConst<T>(inputHandle),
|
||||
outputHandle);
|
||||
vtkm::exec::ExecutionWholeArray<T>(outputHandle, ARRAY_SIZE),
|
||||
outputFieldArray);
|
||||
|
||||
std::cout << "Check result." << std::endl;
|
||||
CheckPortal(outputHandle.GetPortalConstControl());
|
||||
CheckPortal(outputFieldArray.GetPortalConstControl());
|
||||
|
||||
std::cout << "Repeat with dynamic arrays." << std::endl;
|
||||
// Clear out output array.
|
||||
// Clear out output arrays.
|
||||
outputFieldArray = vtkm::cont::ArrayHandle<T>();
|
||||
outputHandle = vtkm::cont::ArrayHandle<T>();
|
||||
vtkm::cont::DynamicArrayHandle outputDynamic(outputHandle);
|
||||
|
||||
vtkm::cont::DynamicArrayHandle outputFieldDynamic(outputFieldArray);
|
||||
dispatcher.Invoke(counting,
|
||||
vtkm::exec::ExecutionWholeArrayConst<T>(inputHandle),
|
||||
outputDynamic);
|
||||
vtkm::exec::ExecutionWholeArray<T>(outputHandle, ARRAY_SIZE),
|
||||
outputFieldDynamic);
|
||||
|
||||
std::cout << "Check dynamic array result." << std::endl;
|
||||
CheckPortal(outputHandle.GetPortalConstControl());
|
||||
CheckPortal(outputFieldArray.GetPortalConstControl());
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user