driver: do transfers in-place if possible

Only allocate and copy a buffer when this is neccessary, when a
texture needs to be tiled.