* If we hit a fatal error during initialisation, the structured file pointer
still points at the temporary serialiser's structured file. It's not until we
finish loading that we swap it into the driver-stored file that we can safely
return and detach ownership of.
* Unfortunately there isn't an easy registry key to check to see if the
2015-2019 redist that we need is installed. Instead we need to check the
major/minor version to see if it's at least 14.20.
* This is complicated by the fact that windows installer returns DWORD registry
values with an extra # but provides no built-in way to strip it so it can be
compared numerically. The solution we've used here is a custom vbscript
action, but apparently they are problematic. Worst case I believe this will
try to install the runtime when not necessary, which might require an
unnecessary reboot. Or alternatively it may misdetect the runtime as installed
but the large majority of people have a compatible redist so this isn't too
bad either.
* In the old codepath for a valid existing window we'd create a cloned DC and
use that to pop with. However that DC is then released so we have created the
'stale DC' situation. This can cause problems with subsequent context
activations when we try to push/pop to populate GL hooks and fail to pop
properly as the queried DC is invalid.
* If we save the current capture from a connection window we want to do that via
the main window so the UI can be properly updated and so we can save it
properly through the replay manager, so the old one can be removed safely.
* Normally we only check mapped memory when it's referenced during capture by
some binding, but for BDA we don't have bindings so we have to conservatively
check it every time.
* When using VS In we want to ignore the W component, but that already happens
explicitly for vulkan/GL in the shader. Mirror that same solution to D3D
instead of trying to force a 3-component format which may not be supported
(e.g. on AMD R16G16B16_*)
* 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.