diff options
author | Michael Jones <michael_p_jones@apple.com> | 2021-12-07 18:11:35 +0300 |
---|---|---|
committer | Michael Jones <michael_p_jones@apple.com> | 2021-12-07 18:52:21 +0300 |
commit | 9558fa5196033390111a2348caa66ab18b8a4f89 (patch) | |
tree | acc3ed446f709390abfef5f97f82c1ed9abe0100 /intern/cycles/bvh | |
parent | 565b33c0ad31966b860123837d2c4b5a8cbedad2 (diff) |
Cycles: Metal host-side code
This patch adds the Metal host-side code:
- Add all core host-side Metal backend files (device_impl, queue, etc)
- Add MetalRT BVH setup files
- Integrate with Cycles device enumeration code
- Revive `path_source_replace_includes` in util/path (required for MSL compilation)
This patch also includes a couple of small kernel-side fixes:
- Add an implementation of `lgammaf` for Metal [Nemes, Gergő (2010), "New asymptotic expansion for the Gamma function", Archiv der Mathematik](https://users.renyi.hu/~gergonemes/)
- include "work_stealing.h" inside the Metal context class because it accesses state now
Ref T92212
Reviewed By: brecht
Maniphest Tasks: T92212
Differential Revision: https://developer.blender.org/D13423
Diffstat (limited to 'intern/cycles/bvh')
-rw-r--r-- | intern/cycles/bvh/CMakeLists.txt | 2 | ||||
-rw-r--r-- | intern/cycles/bvh/bvh.cpp | 10 | ||||
-rw-r--r-- | intern/cycles/bvh/metal.h | 35 | ||||
-rw-r--r-- | intern/cycles/bvh/metal.mm | 33 |
4 files changed, 78 insertions, 2 deletions
diff --git a/intern/cycles/bvh/CMakeLists.txt b/intern/cycles/bvh/CMakeLists.txt index 9edc30cf9c4..cdaa6628be2 100644 --- a/intern/cycles/bvh/CMakeLists.txt +++ b/intern/cycles/bvh/CMakeLists.txt @@ -31,6 +31,7 @@ set(SRC sort.cpp split.cpp unaligned.cpp + metal.mm ) set(SRC_HEADERS @@ -46,6 +47,7 @@ set(SRC_HEADERS sort.h split.h unaligned.h + metal.h ) set(LIB diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp index d3c8e4db6d0..540bf52f7ac 100644 --- a/intern/cycles/bvh/bvh.cpp +++ b/intern/cycles/bvh/bvh.cpp @@ -19,6 +19,7 @@ #include "bvh/bvh2.h" #include "bvh/embree.h" +#include "bvh/metal.h" #include "bvh/multi.h" #include "bvh/optix.h" @@ -106,12 +107,17 @@ BVH *BVH::create(const BVHParams ¶ms, (void)device; break; #endif + case BVH_LAYOUT_METAL: +#ifdef WITH_METAL + return bvh_metal_create(params, geometry, objects, device); +#else + (void)device; + break; +#endif case BVH_LAYOUT_MULTI_OPTIX: case BVH_LAYOUT_MULTI_OPTIX_EMBREE: case BVH_LAYOUT_MULTI_METAL_EMBREE: return new BVHMulti(params, geometry, objects); - case BVH_LAYOUT_METAL: - /* host-side changes for BVH_LAYOUT_METAL are imminent */ case BVH_LAYOUT_NONE: case BVH_LAYOUT_ALL: break; diff --git a/intern/cycles/bvh/metal.h b/intern/cycles/bvh/metal.h new file mode 100644 index 00000000000..8de07927e61 --- /dev/null +++ b/intern/cycles/bvh/metal.h @@ -0,0 +1,35 @@ +/* + * Copyright 2021 Blender Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __BVH_METAL_H__ +#define __BVH_METAL_H__ + +#ifdef WITH_METAL + +# include "bvh/bvh.h" + +CCL_NAMESPACE_BEGIN + +BVH *bvh_metal_create(const BVHParams ¶ms, + const vector<Geometry *> &geometry, + const vector<Object *> &objects, + Device *device); + +CCL_NAMESPACE_END + +#endif /* WITH_METAL */ + +#endif /* __BVH_METAL_H__ */ diff --git a/intern/cycles/bvh/metal.mm b/intern/cycles/bvh/metal.mm new file mode 100644 index 00000000000..90a52012f12 --- /dev/null +++ b/intern/cycles/bvh/metal.mm @@ -0,0 +1,33 @@ +/* + * Copyright 2021 Blender Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef WITH_METAL + +# include "device/metal/bvh.h" + +CCL_NAMESPACE_BEGIN + +BVH *bvh_metal_create(const BVHParams ¶ms, + const vector<Geometry *> &geometry, + const vector<Object *> &objects, + Device *device) +{ + return new BVHMetal(params, geometry, objects, device); +} + +CCL_NAMESPACE_END + +#endif /* WITH_METAL */ |