Handle trace-scope execution masks properly.

Previously, trace-scope always used the current execution mask. In
practice, this doesn't work because the execution mask can change in
the middle of a block.

The SkVM code generator handles this by storing off the execution
mask when a trace-scope +1 is written, and reusing that mask when
the corresponding -1 is written. SkRP now mimics this approach. We
now have two calls `pushTraceScopeMask` and `discardTraceScopeMask`.
These compute `TraceMask & ExecutionMask` and save it onto the top
of the current stack. Scope increases and decreases use this mask
directly and do not check the current execution mask.

Change-Id: Ied97f51bf0a60c31d6b5a99b11b25e3a5b45ef60
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/664178
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
11 files changed