@abadams @slomp @shoaibkamil In order for Metal device buffers to support cropping, we're going to have to make the device field into a pointer to a structure that holds the mtl_buffer and an offset. (Metal supports passing the offset in arguments to kernels, but it doesn't support making one buffer from another with the offset built-in.) First, can someone else who knows Metal double check my thinking here. Secondly, this is a breaking change to some code which uses the device field of the buffer directly. It also requires strict wrap/unwrap discipline. It isn't strictly necessary to do this, but it is pretty useful to support cropping without trashing the device allocation.