Draft PLBVH construction using binary radix tree.

This commit is contained in:
Jackson Lee
2014-03-03 14:33:53 -08:00
parent 4dcd52c090
commit f19f853685
4 changed files with 564 additions and 6 deletions

View File

@@ -56,10 +56,17 @@ class b3GpuParallelLinearBvh
cl_kernel m_findAllNodesMergedAabbKernel;
cl_kernel m_assignMortonCodesAndAabbIndiciesKernel;
//Binary tree construction kernels
//Simple binary tree construction kernels
cl_kernel m_constructBinaryTreeKernel;
cl_kernel m_determineInternalNodeAabbsKernel;
//Radix binary tree construction kernels
cl_kernel m_computePrefixAndInitPointersKernel;
cl_kernel m_correctDuplicatePrefixesKernel;
cl_kernel m_buildBinaryRadixTreeLeafNodesKernel;
cl_kernel m_buildBinaryRadixTreeInternalNodesKernel;
cl_kernel m_convertChildNodeFormatKernel;
//Traversal kernels
cl_kernel m_plbvhCalculateOverlappingPairsKernel;
cl_kernel m_plbvhRayTraverseKernel;
@@ -85,6 +92,14 @@ class b3GpuParallelLinearBvh
b3OpenCLArray<b3Int2> m_internalNodeChildNodes; //x == left child, y == right child
b3OpenCLArray<int> m_internalNodeParentNodes;
//1 element per internal node; for radix binary tree construction
b3OpenCLArray<int> m_maxCommonPrefix;
b3OpenCLArray<int> m_commonPrefixes;
b3OpenCLArray<int> m_leftInternalNodePointers; //Linked list
b3OpenCLArray<int> m_rightInternalNodePointers; //Linked list
b3OpenCLArray<int> m_internalNodeLeftChildNodes;
b3OpenCLArray<int> m_internalNodeRightChildNodes;
//1 element per leaf node (leaf nodes only include small AABBs)
b3OpenCLArray<int> m_leafNodeParentNodes;
b3OpenCLArray<b3SortData> m_mortonCodesAndAabbIndicies; //m_key = morton code, m_value == aabb index