Does MTLBlitEncoder allow uploading more than one array texture per call?

I see region support in MTLBuffer to MTLTexture upload calls, but I’d like to upload an entire level of same-sized mips in 1 call. Calling these routines once for every image x 2048 layers x every mip is a lot of commands. If I could do this once for each mip size, that seems more efficient, though a longer command for Metal to complete.
There is no call to blit multiple mips or slices. This is pretty simple to implement by making copyFromBuffer calls in a loop. If you had a call that did multiple slices/mips it would be unlikely to yield any perf benefits since, somewhere in your code, you need to iterate over each to load the buffer anyways.
I already have an entire level of the array texture loaded into the buffer with a single memcpy. The way KTX and KTX2 store data is an entire level of the same mip size are stored together. I can upload them all at once in GL, so why not in Metal?

There should be no iteration on a blit encoder. I should be able to upload 2048 array layers at 1x1 or 2x2 each in a single call., but there is no call in Metal from what I see. I think this would be a big improvement to the MTLBlitEncoder. I shouldn’t have to upload faces, arrays, slices one a time. For mips yes, I can iterate but that count is much less than the array count.
I'm not aware of a function OpenGL offers that does this. What is the name of the function?

Please create a ticket with Feedback Assistant if you'd like to see an API for this. The more requests we get for a feature, the more heavily we'll prioritize this.

Here's the most basic op on a 2d array, where in GL one can easily specify all the array layers. This is going up the mip chain in one call for each mip, not each mip x each layer. Metal should offer the same ability. The buffer can then be twiddled to the private texture as needed.

Here's a ticket on it.
https://feedbackassistant.apple.com/feedback/9009192

See the Khronos wiki page on Array Textures, since I can't include the link.

glBindTexture(GL_TEXTURE_2D_ARRAY, tex);
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, format, width, height, num_layers, ...);
glTexImage3D(GL_TEXTURE_2D_ARRAY, 1, format, width/2, height/2, num_layers, ...);
glTexImage3D(GL_TEXTURE_2D_ARRAY, 2, format, width/4, height/4, num_layers, ...);
Thanks for the ticket.

I had forgotten that you can load 2D slices with glTex[Sub]Image3D (although you cannot load multiple mips).

In the time being, loading each slice in a loop should be sufficient unless you are already CPU bound, in which case, we should discuss other aspects of your code which may yield more improvements.
Does MTLBlitEncoder allow uploading more than one array texture per call?
 
 
Q