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:
Sujin Philip 2015-08-24 15:33:08 -04:00 committed by Kitware Robot
commit 0e964f6484
2 changed files with 30 additions and 13 deletions

@ -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());
}
};