OpenVDB  7.2.0
VolumeExecutable.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 
11 
12 #ifndef OPENVDB_AX_COMPILER_VOLUME_EXECUTABLE_HAS_BEEN_INCLUDED
13 #define OPENVDB_AX_COMPILER_VOLUME_EXECUTABLE_HAS_BEEN_INCLUDED
14 
15 #include "CustomData.h"
16 #include "AttributeRegistry.h"
17 
18 #include <openvdb/version.h>
19 #include <openvdb/Grid.h>
20 
21 #include <unordered_map>
22 
23 class TestVolumeExecutable;
24 
25 namespace llvm {
26 class ExecutionEngine;
27 class LLVMContext;
28 }
29 
30 namespace openvdb {
32 namespace OPENVDB_VERSION_NAME {
33 namespace ax {
34 
35 class Compiler;
36 
40 {
41 public:
42  using Ptr = std::shared_ptr<VolumeExecutable>;
44 
48  VolumeExecutable(const VolumeExecutable& other);
49 
51 
53  void execute(openvdb::GridPtrVec& grids) const;
54  void execute(openvdb::GridBase& grid) const;
55 
57 
62  void setCreateMissing(const bool flag);
64  bool getCreateMissing() const;
65 
77  void setTreeExecutionLevel(const Index level);
79  Index getTreeExecutionLevel() const;
80 
81  enum class IterType { ON, OFF, ALL };
85  void setValueIterator(const IterType& iter);
87  IterType getValueIterator() const;
88 
92  void setGrainSize(const size_t grain);
94  size_t getGrainSize() const;
95 
97 
98  // @brief deprecated methods
101  const IterType iter,
102  const bool create) const
103  {
104  VolumeExecutable copy(*this);
105  copy.setValueIterator(iter);
106  copy.setCreateMissing(create);
107  copy.execute(grids);
108  }
109 
110  OPENVDB_DEPRECATED void
112  const IterType iter) const
113  {
114  VolumeExecutable copy(*this);
115  copy.setValueIterator(iter);
116  copy.execute(grids);
117  }
118 
120 
121  // foward declaration of settings for this executable
122  struct Settings;
123 
124 private:
125  friend class Compiler;
126  friend class ::TestVolumeExecutable;
127 
139  VolumeExecutable(const std::shared_ptr<const llvm::LLVMContext>& context,
140  const std::shared_ptr<const llvm::ExecutionEngine>& engine,
141  const AttributeRegistry::ConstPtr& accessRegistry,
142  const CustomData::ConstPtr& customData,
143  const std::unordered_map<std::string, uint64_t>& functions);
144 
145 private:
146  // The Context and ExecutionEngine must exist _only_ for object lifetime
147  // management. The ExecutionEngine must be destroyed before the Context
148  const std::shared_ptr<const llvm::LLVMContext> mContext;
149  const std::shared_ptr<const llvm::ExecutionEngine> mExecutionEngine;
150  const AttributeRegistry::ConstPtr mAttributeRegistry;
151  const CustomData::ConstPtr mCustomData;
152  const std::unordered_map<std::string, uint64_t> mFunctionAddresses;
153  std::unique_ptr<Settings> mSettings;
154 };
155 
156 } // namespace ax
157 } // namespace OPENVDB_VERSION_NAME
158 } // namespace openvdb
159 
160 #endif // OPENVDB_AX_COMPILER_VOLUME_EXECUTABLE_HAS_BEEN_INCLUDED
161 
Definition: Compiler.h:31
#define OPENVDB_DEPRECATED
Definition: Platform.h:42
std::vector< GridBase::Ptr > GridPtrVec
Definition: Grid.h:509
Definition: IndexIterator.h:43
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:94
std::shared_ptr< const AttributeRegistry > ConstPtr
Definition: AttributeRegistry.h:40
OPENVDB_DEPRECATED void execute(openvdb::GridPtrVec &grids, const IterType iter) const
Definition: VolumeExecutable.h:111
std::shared_ptr< const CustomData > ConstPtr
Definition: CustomData.h:47
Definition: openvdb/Exceptions.h:13
std::shared_ptr< VolumeExecutable > Ptr
Definition: VolumeExecutable.h:42
OPENVDB_DEPRECATED void execute(openvdb::GridPtrVec &grids, const IterType iter, const bool create) const
Definition: VolumeExecutable.h:100
The compiler class. This holds an llvm context and set of compiler options, and constructs executable...
Definition: Compiler.h:49
void setCreateMissing(const bool flag)
Set the behaviour when missing grids are accessed. Default behaviour is true, which creates them with...
void setValueIterator(const IterType &iter)
Set the value iterator type to use with this executable. Options are ON, OFF, ALL. Default is ON.
Library and file format version numbers.
Abstract base class for typed grids.
Definition: Grid.h:77
void execute(openvdb::GridPtrVec &grids) const
Execute AX code on target grids.
These classes contain lists of expected attributes and volumes which are populated by compiler during...
IterType
Definition: VolumeExecutable.h:81
Object that encapsulates compiled AX code which can be executed on a collection of VDB volume grids...
Definition: VolumeExecutable.h:39
Access to the CustomData class which can provide custom user user data to the OpenVDB AX Compiler...
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:146
Index32 Index
Definition: openvdb/Types.h:32