Alternative Upload geometry data in parallel to multiple GPUs using the "Multi-Device" #107552

Open
William Leeson wants to merge 137 commits from leesonw/blender-cluster:upload_changed into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
2 changed files with 16 additions and 19 deletions
Showing only changes of commit 72be875f3c - Show all commits

View File

@ -168,9 +168,24 @@ protected:
}
virtual BVHLayoutMask get_bvh_layout_mask(uint kernel_features) const = 0;
virtual BVHLayout get_bvh_layout(Device *device, BVHLayout layout) {
BVHLayout get_bvh_layout(Device *device, BVHLayout layout)
{
if (layout == BVH_LAYOUT_MULTI_OPTIX)
layout = BVH_LAYOUT_OPTIX;
else if (layout == BVH_LAYOUT_MULTI_METAL)
layout = BVH_LAYOUT_METAL;
else if (layout == BVH_LAYOUT_MULTI_HIPRT)
layout = BVH_LAYOUT_HIPRT;
else if (layout == BVH_LAYOUT_MULTI_OPTIX_EMBREE)
layout = device->info.type == DEVICE_OPTIX ? BVH_LAYOUT_OPTIX : BVH_LAYOUT_EMBREE;
else if (layout == BVH_LAYOUT_MULTI_METAL_EMBREE)
layout = device->info.type == DEVICE_METAL ? BVH_LAYOUT_METAL : BVH_LAYOUT_EMBREE;
else if (layout == BVH_LAYOUT_MULTI_HIPRT_EMBREE)
layout = device->info.type == DEVICE_HIPRT ? BVH_LAYOUT_HIPRT : BVH_LAYOUT_EMBREE;
return layout;
}
/* statistics */
Stats &stats;
Profiler &profiler;

View File

@ -199,24 +199,6 @@ 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 */