[SkSL] Support readonly textures as sampled textures or storage images

* Previously, adding the readonly qualifier to a texture always upgraded it to a storage texture. However, only textures which require writing need the storage modifier.

* This patch allows a `readonly texture2D` to represent either a sampled texture (by omitting the pixel format) or a true read-only storage image  (by including the pixel format).

* This distinction matters because in SPIR-V, a sampled texture performs a texture read with `OpImageFetch`, but a storage image uses `OpImageRead`

Bug: b/262429132
Bug: b/537737666
Change-Id: I407178fd26fe60261522b311e19a87447be0480f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1342296
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Nathan Sanchez <nathanasanchez@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
49 files changed