mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-19 10:35:42 +00:00
fdaccc22db
Change the VTKM_CONT_EXPORT to VTKM_CONT. (Likewise for EXEC and EXEC_CONT.) Remove the inline from these macros so that they can be applied to everything, including implementations in a library. Because inline is not declared in these modifies, you have to add the keyword to functions and methods where the implementation is not inlined in the class.
88 lines
3.1 KiB
C++
88 lines
3.1 KiB
C++
//============================================================================
|
|
// Copyright (c) Kitware, Inc.
|
|
// All rights reserved.
|
|
// See LICENSE.txt for details.
|
|
// This software is distributed WITHOUT ANY WARRANTY; without even
|
|
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
// PURPOSE. See the above copyright notice for more information.
|
|
//
|
|
// Copyright 2014 Sandia Corporation.
|
|
// Copyright 2014 UT-Battelle, LLC.
|
|
// Copyright 2014 Los Alamos National Security.
|
|
//
|
|
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
// the U.S. Government retains certain rights in this software.
|
|
//
|
|
// Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
|
|
// Laboratory (LANL), the U.S. Government retains certain rights in
|
|
// this software.
|
|
//============================================================================
|
|
#ifndef vtk_m_exec_arg_VisitIndex_h
|
|
#define vtk_m_exec_arg_VisitIndex_h
|
|
|
|
#include <vtkm/exec/arg/Fetch.h>
|
|
#include <vtkm/exec/arg/ExecutionSignatureTagBase.h>
|
|
|
|
namespace vtkm {
|
|
namespace exec {
|
|
namespace arg {
|
|
|
|
/// \brief Aspect tag to use for getting the work index.
|
|
///
|
|
/// The \c AspectTagVisitIndex aspect tag causes the \c Fetch class to ignore
|
|
/// whatever data is in the associated execution object and return the visit
|
|
/// index.
|
|
///
|
|
struct AspectTagVisitIndex { };
|
|
|
|
/// \brief The \c ExecutionSignature tag to use to get the visit index
|
|
///
|
|
/// When a worklet is dispatched, there is a scatter operation defined that
|
|
/// optionally allows each input to go to multiple output entries. When one
|
|
/// input is assigned to multiple outputs, there needs to be a mechanism to
|
|
/// uniquely identify which output is which. The visit index is a value between
|
|
/// 0 and the number of outputs a particular input goes to. This tag in the \c
|
|
/// ExecutionSignature passes the visit index for this work. \c WorkletBase
|
|
/// contains a typedef that points to this class.
|
|
///
|
|
struct VisitIndex : vtkm::exec::arg::ExecutionSignatureTagBase
|
|
{
|
|
// The index does not really matter because the fetch is going to ignore it.
|
|
// However, it still has to point to a valid parameter in the
|
|
// ControlSignature because the templating is going to grab a fetch tag
|
|
// whether we use it or not. 1 should be guaranteed to be valid since you
|
|
// need at least one argument for the input domain.
|
|
static const vtkm::IdComponent INDEX = 1;
|
|
typedef vtkm::exec::arg::AspectTagVisitIndex AspectTag;
|
|
};
|
|
|
|
template<typename FetchTag, typename ThreadIndicesType, typename ExecObjectType>
|
|
struct Fetch<FetchTag,
|
|
vtkm::exec::arg::AspectTagVisitIndex,
|
|
ThreadIndicesType,
|
|
ExecObjectType>
|
|
{
|
|
typedef vtkm::IdComponent ValueType;
|
|
|
|
VTKM_EXEC
|
|
vtkm::IdComponent Load(const ThreadIndicesType &indices,
|
|
const ExecObjectType &) const
|
|
{
|
|
return indices.GetVisitIndex();
|
|
}
|
|
|
|
VTKM_EXEC
|
|
void Store(const ThreadIndicesType &,
|
|
const ExecObjectType &,
|
|
const ValueType &) const
|
|
{
|
|
// Store is a no-op.
|
|
}
|
|
};
|
|
|
|
}
|
|
}
|
|
} // namespace vtkm::exec::arg
|
|
|
|
#endif //vtk_m_exec_arg_VisitIndex_h
|