immDrawPixels performs significantly slower in Metal than OpenGL. This was caused by two main factors. Firstly, the additional overhead of tiled texture update, where all memory needed to be kept in flight for each update, but caused update to take a slow path. Avoiding tile update with Metal is more efficient for both memory pressure and GPU pipelining. Secondly, on AMD platforms, the staging buffer used for temporary texture data was page-faulting when several texture updates would occur within one frame. This is due to limitations of allocating one large contiguous memory chunk. Using the Metal buffer pool for staging data is more efficient. Authored by Apple: Michael Parkin-White Pull Request: blender/blender#105794