mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-19 18:45:43 +00:00
Allocate the scatter arrays to be proper length.
The previous code would over allocate all the scatter arrays since it was computing the output range, than using that as the input range.
This commit is contained in:
parent
e9040745e0
commit
40896e2bab
@ -445,6 +445,7 @@ protected:
|
|||||||
{
|
{
|
||||||
this->InvokeTransportParameters(
|
this->InvokeTransportParameters(
|
||||||
invocation,
|
invocation,
|
||||||
|
numInstances,
|
||||||
this->Worklet.GetScatter().GetOutputRange(numInstances),
|
this->Worklet.GetScatter().GetOutputRange(numInstances),
|
||||||
device);
|
device);
|
||||||
}
|
}
|
||||||
@ -469,6 +470,7 @@ protected:
|
|||||||
{
|
{
|
||||||
this->InvokeTransportParameters(
|
this->InvokeTransportParameters(
|
||||||
invocation,
|
invocation,
|
||||||
|
dimensions,
|
||||||
this->Worklet.GetScatter().GetOutputRange(dimensions),
|
this->Worklet.GetScatter().GetOutputRange(dimensions),
|
||||||
device);
|
device);
|
||||||
}
|
}
|
||||||
@ -480,10 +482,11 @@ private:
|
|||||||
DispatcherBase(const MyType &);
|
DispatcherBase(const MyType &);
|
||||||
void operator=(const MyType &);
|
void operator=(const MyType &);
|
||||||
|
|
||||||
template<typename Invocation, typename RangeType, typename DeviceAdapter>
|
template<typename Invocation, typename InputRangeType, typename OutputRangeType, typename DeviceAdapter>
|
||||||
VTKM_CONT_EXPORT
|
VTKM_CONT_EXPORT
|
||||||
void InvokeTransportParameters(const Invocation &invocation,
|
void InvokeTransportParameters(const Invocation &invocation,
|
||||||
RangeType range,
|
const InputRangeType& inputRange,
|
||||||
|
const OutputRangeType& outputRange,
|
||||||
DeviceAdapter device) const
|
DeviceAdapter device) const
|
||||||
{
|
{
|
||||||
// The first step in invoking a worklet is to transport the arguments to
|
// The first step in invoking a worklet is to transport the arguments to
|
||||||
@ -504,13 +507,13 @@ private:
|
|||||||
TransportFunctorType>::type ExecObjectParameters;
|
TransportFunctorType>::type ExecObjectParameters;
|
||||||
|
|
||||||
ExecObjectParameters execObjectParameters =
|
ExecObjectParameters execObjectParameters =
|
||||||
parameters.StaticTransformCont(TransportFunctorType(range));
|
parameters.StaticTransformCont(TransportFunctorType(outputRange));
|
||||||
|
|
||||||
// Get the arrays used for scattering input to output.
|
// Get the arrays used for scattering input to output.
|
||||||
typename WorkletType::ScatterType::OutputToInputMapType outputToInputMap =
|
typename WorkletType::ScatterType::OutputToInputMapType outputToInputMap =
|
||||||
this->Worklet.GetScatter().GetOutputToInputMap(range);
|
this->Worklet.GetScatter().GetOutputToInputMap(inputRange);
|
||||||
typename WorkletType::ScatterType::VisitArrayType visitArray =
|
typename WorkletType::ScatterType::VisitArrayType visitArray =
|
||||||
this->Worklet.GetScatter().GetVisitArray(range);
|
this->Worklet.GetScatter().GetVisitArray(inputRange);
|
||||||
|
|
||||||
// Replace the parameters in the invocation with the execution object and
|
// Replace the parameters in the invocation with the execution object and
|
||||||
// pass to next step of Invoke. Also add the scatter information.
|
// pass to next step of Invoke. Also add the scatter information.
|
||||||
@ -519,7 +522,7 @@ private:
|
|||||||
.ChangeParameters(execObjectParameters)
|
.ChangeParameters(execObjectParameters)
|
||||||
.ChangeOutputToInputMap(outputToInputMap.PrepareForInput(device))
|
.ChangeOutputToInputMap(outputToInputMap.PrepareForInput(device))
|
||||||
.ChangeVisitArray(visitArray.PrepareForInput(device)),
|
.ChangeVisitArray(visitArray.PrepareForInput(device)),
|
||||||
range,
|
outputRange,
|
||||||
device);
|
device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user