Change how worklets do execution object creation for a device
For a review of the Execution object see chapter 13.9 on worklets in the user manual.
-
Currently if you have a plane old data type then that's fine, for example an interpolater function like less than, but for more complicated type (see user guide example for construction and execution object) templated on the device adapter accessing the arrays table we run into issues.
-
Currently you have to know what device you are using in order to pass it to the worklet.
-
We want to change it so that we can create the execution object in the control environment based on the device, to do this we need to create a special method that will create the execution object for each specific device.
Currently we do something like this and you fill out the execution object:
Class MyexecutionObj: public vtkm::exec::ExecutionObjectBase
{
}
Instead we will now fill out the factory so we can call prepareForExecution() and create the execution object for the device we want to work on:
class Foo: public vtkm::cont::ExecBbjectFactorBase{
public:
template<typename Device>
VTKM_CONT MyExecObj<Device> prepareForExecution(Device);
(arrayhandle does something like this for getting the type)
template<typename Device>
using ExecObj = MyExecObj<Device>
}