From f4847b7b089a346bfa314203fd66226e2a791576 Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Fri, 6 Nov 2026 16:24:03 +0100 Subject: [PATCH] GPU Metal: accept the registration of host memory The GPU reconstruction workflow registers its shared-memory segments for the GPU, and the Metal backend fell back to the device base, which fails for every GPU backend that does not implement it: the full system test's WITHGPU stage stopped with "Error registering memory for GPU". Metal memory is shared with the host, and GPUMemCpy copies from memory outside the Metal buffers on the host, so there is nothing to pin: accept the registration as the CPU backend does. --- GPU/GPUTracking/Base/metal/GPUReconstructionMetal.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GPU/GPUTracking/Base/metal/GPUReconstructionMetal.h b/GPU/GPUTracking/Base/metal/GPUReconstructionMetal.h index 50eb40ebf7ccc..247ae6657c01e 100644 --- a/GPU/GPUTracking/Base/metal/GPUReconstructionMetal.h +++ b/GPU/GPUTracking/Base/metal/GPUReconstructionMetal.h @@ -46,6 +46,10 @@ class GPUReconstructionMetal : public GPUReconstructionProcessing::KernelInterfa size_t GPUMemCpy(void* dst, const void* src, size_t size, int32_t stream, int32_t toGPU, deviceEvent* ev = nullptr, deviceEvent* evList = nullptr, int32_t nEvents = 1) override; void ReleaseEvent(deviceEvent ev) override; void RecordMarker(deviceEvent* ev, int32_t stream) override; + // The memory is shared with the host, and GPUMemCpy copies from memory outside the Metal buffers on the + // host, so there is nothing to pin. + int32_t registerMemoryForGPU_internal(const void* ptr, size_t size) override { return 0; } + int32_t unregisterMemoryForGPU_internal(const void* ptr) override { return 0; } template int32_t AddKernel();