May 23, 2016, 13:07 (GMT) |
Generate wrapper functions in LLVM for converting dual types to primitives. Currently Dual2 arguments are structs with the main value and 2 derivatives in x and y. Node functions will generally be implemented using the base types, so the value and derivatives have to be extracted and later combined using the chain rule. |
May 20, 2016, 06:00 (GMT) |
Generate dual values for input constants to match the declared function signatures. Note that actual functions currently don't use Dual2<> values, but because they only read/write the 'value' field it works anyway ... |
May 19, 2016, 16:34 (GMT) |
Fix module linking: initialize the node graph module right away to avoid repeating code. |
May 19, 2016, 16:22 (GMT) |
Leave the decision about passing arguments by pointer to the compiler class too. This removes the last "global" type function, so all the details of types are now decided in the compiler implementation subclass. |
May 19, 2016, 16:06 (GMT) |
Removed unused codegen_begin/end functions. |
May 19, 2016, 16:04 (GMT) |
Define a separate node function module for every compiler type. This means we can have differing implementations for every potential use of nodes, such as plain value functions vs. dual values with derivatives. Node functions for each compiler type are stored in a static map and are lazy-initialized on the first node graph compilation. |
May 19, 2016, 09:52 (GMT) |
Pass texture arguments and return values as dual values. Currently only the value part is actually accessed. Using dual values allows the node graph to handle input/output arguments are single a single llvm::Value instance. |
May 18, 2016, 15:40 (GMT) |
Preparatory changes for differing node compiler implementations. Uses some virtual functions of the node compiler to allow different implementation of values. This will be used for calculating values and partial derivatives in texture nodes. |
May 18, 2016, 09:28 (GMT) |
Use a TypeSpec pointer for structure fields rather than direct storage. |
May 18, 2016, 06:03 (GMT) |
Type system refactor: Use a global type definition map instead of defining each type locally. |
May 16, 2016, 10:45 (GMT) |
Merge branch 'master' into object_nodes |
May 16, 2016, 10:44 (GMT) |
Cleanup: removed some unused code. |
May 16, 2016, 10:37 (GMT) |
Enable the new depsgraph by default. The blenvm system depends on the new depsgraph, so it doesn't make sense to have to enable it every time. The legacy depsgraph can still be switched back on by the --enable-legacy-depsgraph option. |
May 14, 2016, 17:49 (GMT) |
Internal definition of commonly used node functions, so that LLVM can optimize better. This currently includes just a few 'value' nodes, but should be extended as much as feasible. In particular many vector functions can be split component-wise. |
May 14, 2016, 10:44 (GMT) |
Implemented common procedural texture patterns for LLVM. |
May 14, 2016, 08:25 (GMT) |
Include all module functions in a single header for convenience. |
May 14, 2016, 07:55 (GMT) |
Simple coordinate input node for texture nodes. |
May 14, 2016, 07:53 (GMT) |
Handle all node type kinds appropriately. The LLVM backend also supports PASS nodes, even though these are usually removed from the node graph in a preprocessing step for clarity. ARG nodes have their output values mapped in advance, so no extra code needs to be generated for them. |
May 14, 2016, 07:52 (GMT) |
Fix incorrect argument order for vector/color constructor functions. |
May 14, 2016, 07:09 (GMT) |
Replaced mix of bool type flags for node types with a single enum for special kinds of nodes. |
|