This patch adds MetalRT support to Cycles kernel code. It is mostly additive in nature or confined to Metal-specific code, however there are a few areas where this interacts with other code:
- MetalRT closely follows the Optix implementation, and in some cases (notably handling of transforms) it makes sense to extend Optix special-casing to MetalRT. For these generalisations we now have __KERNEL_GPU_RAYTRACING__ instead of __KERNEL_OPTIX__.
- MetalRT doesn't support primitive offsetting (as with primitiveIndexOffset in Optix), so we define and populate a new kernel texture, __object_prim_offset, containing per-object primitive / curve-segment offsets. This is referenced and applied in MetalRT intersection handlers.
- Two new BVH layout enum values have been added: BVH_LAYOUT_METAL and BVH_LAYOUT_MULTI_METAL_EMBREE for XPU mode). Some host-side enum case handling has been updated where it is trivial to do so.
Ref T92212