This re-applies pull request #140671, but with a fix for #144713 where the non-pointer part of IntegratorStateGPU was not initialized. This PR is a more extensive follow on from #123551 (removal of AMD and Intel GPU support). All supported Apple GPUs have Metal 3 and tier 2 argument buffer support. The invariant resource properties `gpuAddress` and `gpuResourceID` can be written directly into GPU structs once at setup time rather than once per dispatch. More background info can be found in this article: https://developer.apple.com/documentation/metal/improving-cpu-performance-by-using-argument-buffers?language=objc Code changes: - All code relating to `MTLArgumentEncoder` is removed - `KernelParamsMetal` updates are directly written into `id<MTLBuffer> launch_params_buffer` which is used for the "static" dispatch arguments - Dynamic dispatch arguments are small enough to be encoded using the `MTLComputeCommandEncoder.setBytes` function, eliminating the need for cycling temporary arg buffers Fix #144713 Co-authored-by: Brecht Van Lommel <brecht@noreply.localhost> Pull Request: https://projects.blender.org/blender/blender/pulls/145175