Reorganization of IR generator's API and interaction with compiler

- Move all of IR generator's fields private (except for fContext, which
  is used ~everywhere).
- Eliminate start() and finish(), fold this logic into convertProgram.
  The division of what was set/reset in different places was pretty
  arbitrary. Now, convertProgram does everything. Along that line, have
  it actually return the "outputs" as an IRBundle (a small collection of
  the things that the compiler needs). This seems better than the
  compiler ripping out IR generator's internals.
- IR generator's POD field initialization was a mix of in-class and
  constructor. Move all the constant initialization to declarations.
- No need to look up sk_PerVertex at start (or convertProgram) time, so
  remove fSkPerVertex, and just do the lookup when we're about to use
  it.
- IRGenerator::convertProgram is fairly long now, but all the code is in
  one place. You don't have to think about the order that three
  different member functions are called (along with the caller mutating
  the internal state between those three calls).

- In the compiler, add an AutoSource helper to manage changing and
  restoring the fSource pointer everywhere.
- Rename the loadXXXIntrinsics functions to loadXXXModule, have them
  return the module, and wrap the whole thing up in a single
  moduleForProgramKind() helper.

Change-Id: I0c9b6702f8786792963e3d9408d6619e5ab393e2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/324696
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
5 files changed