In my iOS project Metal is used extensively.
Sometimes MTLDevice newTextureWithDescriptor fails to create a texture.
Texture format is valid, it's a small RGBA 512x512 texture, everything is set up correctly.
When I print MTLDevice.currentAllocatedSize >> 20 it's 1396 MB on iPhone XR ( A12 processor ).
I've used a lot this thread for max runtime RAM estimate: https://stackoverflow.com/a/15200855/2567725
So I believe for iPhone XR max allowed RAM is 1792 MB.
I guess the texture is not created because RAM has been exsausted.
So the guestions are:
Is it true that on A12 Metal's
currentAllocatedSizecorrelates withCPUmemory, andGPUmemory is "shared" with the CPU one, so1792 MB = GPU+CPUfor iPhone XR ?Is there any way to get the description of Metal error? (now it just returns
nilinnewTextureWithDescriptor).Is it possible to know how Metal allocation strategy works, e.g. how small available
RAMshould be toMTLDevice newTextureWithDescriptorreturnnil?
UPDATE:
In some cases, however, MTLDevice.currentAllocatedSize >> 20 is much less, e.g. 14 MB, so I suspect Metal has some state corruption. But how to check what's the reason of the error?
The debug description of a texture descriptor:
textureDescriptor.pixelFormat = 70
textureDescriptor.width = 512
textureDescriptor.height = 512
textureDescriptor.textureType = 3
textureDescriptor.usage = 23
textureDescriptor.arrayLength = 1000
textureDescriptor.sampleCount = 1
textureDescriptor.mipmapLevelCount = 1
device.currentAllocatedSize >> 20 = 14