So we got ahold of an iPhone XR for testing and got different results. Running 16.6, compiling with the new Xcode 15 beta 8.
The error was reliable, and though unrelated to the device in question, I moved the textures out of the argument buffer, turned off indirect rendering and tried again.
Metal had some problems with some index based lookups on that device, so I turned those off and got this gem:
newArgumentEncoder:85: failed assertion `Function fragmentTri_precip does not have a buffer argument with buffer index 2'
Aaand the function in question:
fragment float4 fragmentTri_precip(ProjVertexTriB vert [[stage_in]],
constant Uniforms &uniforms [[ buffer(WKSFragUniformArgBuffer) ]],
constant FragTriArgBufferPrecip &fragArgs [[ buffer(2) ]],
constant TextureInfo &texArgs [[buffer(WKSFragTextureArgBuffer)]],
metal::array<metal::texture2d<float, metal::access::sample>, WKSTextureMax> tex [[ texture(0) ]])
This is definitely a Metal compiler problem. I'm surprised no one else is running into it.