Optimize barycentric interpolation #1019
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Purpose of this PR
I noticed during benchmarking math operations that one of the Barycentric overloads was four times slower than the other.
Turns out the slow version contains a naive implementation using operator overloads (leading to a number of unnecessary copies/allocations), while the fast version has an optimized implementation that passes all parameters by reference.
This change replaces the naive implementations with a call to the optimized method instead.
Math
Se comments for impact of current approach.
Testing status
Ran unit tests, and verified the Barycentric ones all passed. Note that the double variants of the vectors do not have existing test coverage.
Comments
Benchmark of current implementations as of a2e1be1: