MTLResourceStorageModePrivate on Apple Silicon

According to the Metal Best Practices guide, on Mac:

If the texture is initialized once by the CPU and accessed frequently by the GPU, initialize a source texture with a Managed mode and then blit its data into a destination texture with a Private mode. This is a common case for static textures, such as diffuse maps.

This would seem to be the best practice for things like material textures in a game that are loaded once, and then exclusively used by the GPU.

However - the guide isn't specific on how Apple Silicon should be treated. It does say:

Some macOS devices feature integrated GPUs. In these devices, the driver optimizes the underlying architecture to support a discrete memory model. macOS Metal apps should always target a discrete memory model.

The iOS guide still mentions private textures, but does not going into detail, and has less prescriptive language.

I'm basically unsure if Apple Silicon Macs should follow the iOS performance guide or the macOS performance guide. The guide also has a last updated of 2017, implying that it may not have been updated for Apple Silicon.

I'm not quite sure for static texture resources for games what the best path is.

  • Apple Silicon has a single address space - which I assume would reduce the penalty for having a shared resource.
  • However, private resources can be optimized for GPU use during a blit. It's been hinted that things like textures might be compressed in a way that they typically couldn't if CPU access needed to be maintained.

Very possible that the guide hasn't been updated because the guidance is unchanged. But I wanted to check in since I'd assume iOS and macOS on Apple Silicon should be similar.

MTLResourceStorageModePrivate on Apple Silicon
 
 
Q