SkImage::subset now takes a GrDirectContext* as its first parameter (this can be nullptr for non-gpu backed images. Images which are backed by a codec or picture will not be turned into a GPU texture before being read. This should only impact picture-backed images, which may not be read correctly if the picture contain nested texture-backed images itself. To force a conversion to a texture, clients should call SkImages::TextureFromImage, passing in the image, and then call subset on the result. Documentation has been clarified that SkImage::subset will return a raster- backed image if the source is not backed by a texture, and texture-otherwise.

SkImages::SubsetTextureFrom has been added to subset an image and explicitly return a texture- backed image. This allows some optimizations, especially for large images that exceed a maximum texture size of a GPU.

SkImage::makeRasterImage and SkImage::makeNonTextureImage now take a GrDirectContext* which clients should supply for reading-back pixels from texture-backed images.