* This is possible when capturing a program that uses experimental feature to
allow unhashed shaders. We don't replay this so it would fail. We could enable
the feature, but this is just as easy and means it works even when
""development mode"" isn't enabled.
* We never want to inherit these, and e.g. Qt process launches are hardcoded to
always inherit handles so these need to be excluded so files don't stay open.
- Ensure there is space for the Stream Out counters at the beginning of the SO buffer
- Fix use-after-Unmap of the SO statistics data
- Reset the state correctly after syncing every 1000 instances
- Unmap the SO buffer when no output instances are found
* For draws/dispatches that aren't pure - i.e. modify state that they read from
- we need to be sure we don't replay the action before running it to fetch
feedback. For that reason we need to replay up to the action first, then fetch
feedback.
* This is all a result of us adding extra usage to images - for imageless
framebuffers the usage needs to match so we need to patch the framebuffer
usage at create time. Then if image views are used that have specified usage
subset we need to patch that too.
* This applies when selecting a marker region, the effective EID is the one
actually replayed to an represented in the UI. As-if it were directly
selected.
* We create an instance during early android startup to force our library to
stay loaded, but we shouldn't try to enable any debug extensions because on
some android devices that can cause problems.
* In v1.15 if you upgraded from a previous version and had a renderdoc config
file then the persistent storage storing the filters would get loaded with an
empty variant map, so the defaults could be set. However if you had no config
file at all this wouldn't happen so no defaults would be set.
* We detect the case where we load an old profile and it has blank current
filter or saved filters, and fill in the defaults now. If the filter has been
customised or some saved filters exist, respectively, we don't touch them.
* We check for errors to try to catch them as soon as possible, and early-out
return even in the middle of functions. The idea being even if this leaves us
in a weird state we won't get called again as the replay controller will
detect the error and substitute out a dummy driver.
* The UI will become non-functional and the backend will be replaced with a do-
nothing one that keeps things alive without needing error bulletproofing
everywhere in the real backend.