Alternative Upload geometry data in parallel to multiple GPUs using the "Multi-Device" #107552
|
@ -168,6 +168,9 @@ protected:
|
|||
}
|
||||
virtual BVHLayoutMask get_bvh_layout_mask(uint kernel_features) const = 0;
|
||||
|
||||
virtual BVHLayout get_bvh_layout(Device *device, BVHLayout layout) {
|
||||
return layout;
|
||||
}
|
||||
/* statistics */
|
||||
Stats &stats;
|
||||
Profiler &profiler;
|
||||
|
|
|
@ -199,6 +199,24 @@ class MultiDevice : public Device {
|
|||
return true;
|
||||
}
|
||||
|
||||
BVHLayout get_bvh_layout(Device *device, BVHLayout bvh_layout) override
|
||||
{
|
||||
if (bvh_layout == BVH_LAYOUT_MULTI_OPTIX)
|
||||
bvh_layout = BVH_LAYOUT_OPTIX;
|
||||
else if (bvh_layout == BVH_LAYOUT_MULTI_METAL)
|
||||
bvh_layout = BVH_LAYOUT_METAL;
|
||||
else if (bvh_layout == BVH_LAYOUT_MULTI_HIPRT)
|
||||
bvh_layout = BVH_LAYOUT_HIPRT;
|
||||
else if (bvh_layout == BVH_LAYOUT_MULTI_OPTIX_EMBREE)
|
||||
bvh_layout = device->info.type == DEVICE_OPTIX ? BVH_LAYOUT_OPTIX : BVH_LAYOUT_EMBREE;
|
||||
else if (bvh_layout == BVH_LAYOUT_MULTI_METAL_EMBREE)
|
||||
bvh_layout = device->info.type == DEVICE_METAL ? BVH_LAYOUT_METAL : BVH_LAYOUT_EMBREE;
|
||||
else if (bvh_layout == BVH_LAYOUT_MULTI_HIPRT_EMBREE)
|
||||
bvh_layout = device->info.type == DEVICE_HIPRT ? BVH_LAYOUT_HIPRT : BVH_LAYOUT_EMBREE;
|
||||
|
||||
return bvh_layout;
|
||||
}
|
||||
|
||||
void build_bvh(BVH *bvh, DeviceScene *dscene, Progress &progress, bool refit) override
|
||||
{
|
||||
/* Try to build and share a single acceleration structure, if possible */
|
||||
|
@ -226,21 +244,7 @@ class MultiDevice : public Device {
|
|||
|
||||
if (!bvh_multi->sub_bvhs[id]) {
|
||||
BVHParams params = bvh_multi->params;
|
||||
if (bvh_multi->params.bvh_layout == BVH_LAYOUT_MULTI_OPTIX)
|
||||
params.bvh_layout = BVH_LAYOUT_OPTIX;
|
||||
else if (bvh_multi->params.bvh_layout == BVH_LAYOUT_MULTI_METAL)
|
||||
params.bvh_layout = BVH_LAYOUT_METAL;
|
||||
else if (bvh_multi->params.bvh_layout == BVH_LAYOUT_MULTI_HIPRT)
|
||||
params.bvh_layout = BVH_LAYOUT_HIPRT;
|
||||
else if (bvh_multi->params.bvh_layout == BVH_LAYOUT_MULTI_OPTIX_EMBREE)
|
||||
params.bvh_layout = sub->device->info.type == DEVICE_OPTIX ? BVH_LAYOUT_OPTIX :
|
||||
BVH_LAYOUT_EMBREE;
|
||||
else if (bvh_multi->params.bvh_layout == BVH_LAYOUT_MULTI_METAL_EMBREE)
|
||||
params.bvh_layout = sub->device->info.type == DEVICE_METAL ? BVH_LAYOUT_METAL :
|
||||
BVH_LAYOUT_EMBREE;
|
||||
else if (bvh_multi->params.bvh_layout == BVH_LAYOUT_MULTI_HIPRT_EMBREE)
|
||||
params.bvh_layout = sub->device->info.type == DEVICE_HIPRT ? BVH_LAYOUT_HIPRT :
|
||||
BVH_LAYOUT_EMBREE;
|
||||
params.bvh_layout = get_bvh_layout(sub->device, bvh_multi->params.bvh_layout);
|
||||
|
||||
/* Skip building a bottom level acceleration structure for non-instanced geometry on
|
||||
* Embree (since they are put into the top level directly, see bvh_embree.cpp) */
|
||||
|
@ -516,7 +520,7 @@ class MultiDevice : public Device {
|
|||
// }
|
||||
// }
|
||||
// }
|
||||
//stats.mem_alloc(sub_mem.device_size - existing_size);
|
||||
stats.mem_alloc(sub_mem.device_size - existing_size);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -174,16 +174,7 @@ void GeometryManager::device_update_sub_bvh(Device *device,
|
|||
// Yes, so setup the device specific sub_bvh in the multi-bvh.
|
||||
BVHParams bparams = bvh->params;
|
||||
// Set the layout to the correct one for the device
|
||||
if (bvh->params.bvh_layout == BVH_LAYOUT_MULTI_OPTIX)
|
||||
bparams.bvh_layout = BVH_LAYOUT_OPTIX;
|
||||
else if (bvh->params.bvh_layout == BVH_LAYOUT_MULTI_METAL)
|
||||
bparams.bvh_layout = BVH_LAYOUT_METAL;
|
||||
else if (bvh->params.bvh_layout == BVH_LAYOUT_MULTI_OPTIX_EMBREE)
|
||||
bparams.bvh_layout = device->info.type == DEVICE_OPTIX ? BVH_LAYOUT_OPTIX :
|
||||
BVH_LAYOUT_EMBREE;
|
||||
else if (bvh->params.bvh_layout == BVH_LAYOUT_MULTI_METAL_EMBREE)
|
||||
bparams.bvh_layout = device->info.type == DEVICE_METAL ? BVH_LAYOUT_METAL :
|
||||
BVH_LAYOUT_EMBREE;
|
||||
bparams.bvh_layout = device->get_bvh(device, bvh->params.bvh_layout);
|
||||
if (sub_bvh != NULL) {
|
||||
delete sub_bvh;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue