 
 struct PartitionSideToUint2 {
     __host__ __device__
-    uint2 operator()(const PartitionSide side) const {
+    inline uint2 operator()(const PartitionSide side) const {
         return make_uint2(side & LEFT ? 1 : 0, 
                           side & RIGHT ? 1 : 0);
     }

        : rayMortonCoder(rMC) {}

    __host__ __device__
    thrust::tuple<SignedAxis, float2, float2, float2, float2, float2> operator()(const MortonBound bound) const {
        HyperCube cube = rayMortonCoder.HyperCubeFromBound(bound);
        
        return thrust::tuple<SignedAxis, float2, float2, float2, float2, float2>

                          bounds.begin(), CreateBoundsFromPartitions(rayMortonCodes));
        // cout << "bounds:\n" << bounds << endl;

        // static HyperCubes hyperCubes(128); hyperCubes.Resize(bounds.size());
        // thrust::transform(bounds.begin(), bounds.end(), 
        //                   hyperCubes.Begin(), CreateHyperCubesFromBounds(rayMortonCoder));
        // cout << hyperCubes << endl;
        
        static thrust::device_vector<Cone> cones(bounds.size()); cones.resize(bounds.size());
        thrust::transform(bounds.begin(), bounds.end(), cones.begin(), CreateConesFromBounds(rayMortonCoder));
        // cout << "cones:\n" << cones << endl;

        // Sphere's are partitioned | LEFT0 | RIGHT0 | LEFT1 | RIGHT1 | ....
        const unsigned int nActiveSpheres = sphereIndices.size() - leafSphereIndices;
