- Home /
Getting a crash on iOS Metal devices but not on equivalent iOS non-metal devices.
My game is crashing on iOS devices utilizing Metal rendering with the following error string:
/SourceCache/AcceleratorKit/AcceleratorKit-17.7/Framework/MTLSampler.m:27: failed assertion `filter is not a valid MTLSamplerMinMagFilter.'
This is happening when building with Unity 4.6.8 and Xcode 6.4 (6E35b). I have tested on two devices (iPhone6 and an iPhone 5S) running iOS 8.4 (12H143) and one (iPhone 5S) running iOS 8.3 (12F70). It also crashes at the same step (loading a texture from streaming assets, creating sprites and then loading one of those sprites into an Image) if I force it into OpenGL 3.0 mode.
This does not happen on the iPhone 5C running iOS 8.0.2 (12A405) nor on an iPad Mini 1 running 8.4 (12H143).
Answer by indiec0re · Aug 28, 2015 at 11:13 AM
So, if anyone is looking at this in the future try checking your filter mode. My problem was that I was setting the filter mode of the loaded texture to one that I had custom serialized using the TextureImporter.filterMode value.
It turns out that Unity doesn't actually set a filter mode unless you've manually changed it and then re-imported, it just sets the value of the enum field to something that serializes as -1. This of course does not lead to a valid MTLSamplerFilter (which is what does texture sampling in Metal) and thus crashes the device.
It also doesn't lead to a valid OpenGL sampler either so that explains why it crashes on OGL mode. Presumably some default is embedded in the pre-A7 GPUs on iOS devices that kicks in and so it went un-noticed.