OpenVDB  8.0.1
PointExecutable.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_POINT_EXECUTABLE_HAS_BEEN_INCLUDED
13 #define OPENVDB_AX_COMPILER_POINT_EXECUTABLE_HAS_BEEN_INCLUDED
14 
15 #include "CustomData.h"
16 #include "AttributeRegistry.h"
17 
18 #include <openvdb/openvdb.h>
19 #include <openvdb/version.h>
21 
22 #include <unordered_map>
23 
24 class TestPointExecutable;
25 
26 namespace llvm {
27 class ExecutionEngine;
28 class LLVMContext;
29 }
30 
31 namespace openvdb {
33 namespace OPENVDB_VERSION_NAME {
34 namespace ax {
35 
36 class Compiler;
37 
40 {
41 public:
42  using Ptr = std::shared_ptr<PointExecutable>;
44 
49 
51 
53  void execute(points::PointDataGrid& grid) const;
54 
56 
63  void setGroupExecution(const std::string& name);
66  const std::string& getGroupExecution() const;
67 
73  void setCreateMissing(const bool flag);
75  bool getCreateMissing() const;
76 
80  void setGrainSize(const size_t grain);
82  size_t getGrainSize() const;
83 
85 
86  // foward declaration of settings for this executable
87  struct Settings;
88 
89 private:
90  friend class Compiler;
91  friend class ::TestPointExecutable;
92 
104  PointExecutable(const std::shared_ptr<const llvm::LLVMContext>& context,
105  const std::shared_ptr<const llvm::ExecutionEngine>& engine,
106  const AttributeRegistry::ConstPtr& attributeRegistry,
107  const CustomData::ConstPtr& customData,
108  const std::unordered_map<std::string, uint64_t>& functions);
109 
110 private:
111  // The Context and ExecutionEngine must exist _only_ for object lifetime
112  // management. The ExecutionEngine must be destroyed before the Context
113  const std::shared_ptr<const llvm::LLVMContext> mContext;
114  const std::shared_ptr<const llvm::ExecutionEngine> mExecutionEngine;
115  const AttributeRegistry::ConstPtr mAttributeRegistry;
116  const CustomData::ConstPtr mCustomData;
117  const std::unordered_map<std::string, uint64_t> mFunctionAddresses;
118  std::unique_ptr<Settings> mSettings;
119 };
120 
121 } // namespace ax
122 } // namespace OPENVDB_VERSION_NAME
123 } // namespace openvdb
124 
125 #endif // OPENVDB_AX_COMPILER_POINT_EXECUTABLE_HAS_BEEN_INCLUDED
126 
These classes contain lists of expected attributes and volumes which are populated by compiler during...
Access to the CustomData class which can provide custom user user data to the OpenVDB AX Compiler.
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
Container class that associates a tree with a transform and metadata.
Definition: Grid.h:577
std::shared_ptr< const AttributeRegistry > ConstPtr
Definition: AttributeRegistry.h:40
The compiler class. This holds an llvm context and set of compiler options, and constructs executable...
Definition: Compiler.h:50
std::shared_ptr< const CustomData > ConstPtr
Definition: CustomData.h:47
Object that encapsulates compiled AX code which can be executed on a target point grid.
Definition: PointExecutable.h:40
void setCreateMissing(const bool flag)
Set the behaviour when missing point attributes are accessed. Default behaviour is true,...
std::shared_ptr< PointExecutable > Ptr
Definition: PointExecutable.h:42
void execute(points::PointDataGrid &grid) const
executes compiled AX code on target grid
PointExecutable(const PointExecutable &other)
Copy constructor. Shares the LLVM constructs but deep copies the settings. Multiple copies of an exec...
void setGrainSize(const size_t grain)
Set the threading grain size. Default is 1. A value of 0 has the effect of disabling multi-threading.
void setGroupExecution(const std::string &name)
Set a specific point group to execute over. The default is none, which corresponds to all points....
const std::string & getGroupExecution() const
Definition: Compiler.h:31
Definition: openvdb/Exceptions.h:13
Library and file format version numbers.
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:101
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:153