OpenVDB: PointComputeGenerator.h Source File

OpenVDB 8.0.0

PointComputeGenerator.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_POINT_COMPUTE_GENERATOR_HAS_BEEN_INCLUDED
13 #define OPENVDB_AX_POINT_COMPUTE_GENERATOR_HAS_BEEN_INCLUDED
14
15 #include "ComputeGenerator.h"
16 #include "FunctionTypes.h"
17 #include "Types.h"
18 #include "Utils.h"
19
20 #include "../compiler/AttributeRegistry.h"
21
22 #include <openvdb/version.h>
23
24 namespace openvdb {
25 OPENVDB_USE_VERSION_NAMESPACE
26 namespace OPENVDB_VERSION_NAME {
27
28 namespace ax {
29 namespace codegen {
30
47 struct PointKernel
48 {
50 using Signature =
51 void(const void* const,
52 const void* const,
53 uint64_t,
54 void**,
55 void**,
56 void*);
57
58 using FunctionTraitsT = codegen::FunctionTraits<Signature>;
59 static const size_t N_ARGS = FunctionTraitsT::N_ARGS;
60
62 static const std::array<std::string, N_ARGS>& argumentKeys();
63 static std::string getDefaultName();
64 };
65
69 struct PointRangeKernel : public PointKernel
70 {
71 static std::string getDefaultName();
72 };
73
74
77
78 namespace codegen_internal {
79
84 struct PointComputeGenerator : public ComputeGenerator
85 {
92 PointComputeGenerator(llvm::Module& module,
93 const FunctionOptions& options,
94 FunctionRegistry& functionRegistry,
95 Logger& logger);
96
97 ~PointComputeGenerator() override = default;
98
99 using ComputeGenerator::traverse;
100 using ComputeGenerator::visit;
101
102 AttributeRegistry::Ptr generate(const ast::Tree& node);
103 bool visit(const ast::Attribute*) override;
104
105 private:
106 llvm::Value* attributeHandleFromToken(const std::string&);
107 void getAttributeValue(const std::string& globalName, llvm::Value* location);
108 };
109
110 } // namespace namespace codegen_internal
111
112 } // namespace codegen
113 } // namespace ax
114 } // namespace OPENVDB_VERSION_NAME
115 } // namespace openvdb
116
117 #endif // OPENVDB_AX_POINT_COMPUTE_GENERATOR_HAS_BEEN_INCLUDED
118
openvdb::v8_2::ax::codegen::codegen_internal::PointComputeGenerator
Visitor object which will generate llvm IR for a syntax tree which has been generated from AX that ta...
Definition: PointComputeGenerator.h:85
Types.h
Consolidated llvm types for most supported types.
openvdb::v8_2::ax::codegen::codegen_internal::PointComputeGenerator::visit
bool visit(const ast::Attribute *) override
openvdb::v8_2::ax::codegen::FunctionTraits
Templated function traits which provides compile-time index access to the types of the function signa...
Definition: ax/openvdb_ax/codegen/Types.h:279
openvdb::v8_2::ax::codegen::codegen_internal::PointComputeGenerator::~PointComputeGenerator
~PointComputeGenerator() override=default
openvdb::v8_2::ax::codegen::codegen_internal::ComputeGenerator
Visitor object which will generate llvm IR for a syntax tree. This provides the majority of the code ...
Definition: ComputeGenerator.h:84
openvdb::v8_2::ax::AttributeRegistry::Ptr
std::shared_ptr< AttributeRegistry > Ptr
Definition: AttributeRegistry.h:39
openvdb::v8_2::ax::codegen::codegen_internal::PointComputeGenerator::PointComputeGenerator
PointComputeGenerator(llvm::Module &module, const FunctionOptions &options, FunctionRegistry &functionRegistry, Logger &logger)
Constructor.
openvdb::v8_2::ax::ast::Tree
A Tree is the highest concrete (non-abstract) node in the entire AX AST hierarchy....
Definition: AST.h:562
version.h
Library and file format version numbers.
openvdb::v8_2::ax::codegen::PointRangeKernel::getDefaultName
static std::string getDefaultName()
openvdb::v8_2::ax::codegen::PointRangeKernel
An additonal function built by the PointComputeGenerator. Currently both compute and compute range fu...
Definition: PointComputeGenerator.h:70
openvdb::v8_2::ax::codegen::PointKernel::getDefaultName
static std::string getDefaultName()
openvdb::v8_2::ax::ast::Attribute
Attributes represent any access to a primitive value, typically associated with the '@' symbol syntax...
Definition: AST.h:1874
openvdb::v8_2::ax::codegen::PointKernel::Signature
void(const void *const, const void *const, uint64_t, void **, void **, void *) Signature
The signature of the generated function.
Definition: PointComputeGenerator.h:56
openvdb::v8_2::ax::codegen::codegen_internal::PointComputeGenerator::generate
AttributeRegistry::Ptr generate(const ast::Tree &node)
openvdb::v8_2::ax::codegen::PointKernel
The function definition and signature which is built by the PointComputeGenerator.
Definition: PointComputeGenerator.h:48
Utils.h
Utility code generation methods for performing various llvm operations.
ComputeGenerator.h
The core visitor framework for code generation.
OPENVDB_USE_VERSION_NAMESPACE
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:153
FunctionTypes.h
Contains frameworks for creating custom AX functions which can be registered within the FunctionRegis...
openvdb::v8_2::ax::codegen::PointKernel::argumentKeys
static const std::array< std::string, N_ARGS > & argumentKeys()
The argument key names available during code generation.
openvdb::v8_2::ax::codegen::FunctionRegistry
The function registry which is used for function code generation. Each time a function is visited wit...
Definition: FunctionRegistry.h:37
OPENVDB_VERSION_NAME
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:101
openvdb::v8_2::ax::Logger
Logger for collecting errors and warnings that occur during AX compilation.
Definition: Logger.h:55
openvdb::v8_2::ax::FunctionOptions
Options that control how functions behave.
Definition: CompilerOptions.h:25
openvdb
Definition: openvdb/Exceptions.h:13