* These are currently non-functional but will be implemented in follow-up
commits so they're not committed disabled (inaccessible via QueryInterface
etc).
* Triangle fans
* 16-bit types in shader declarations
* Trivial/non-wrapped new interface versions
* New mostly-ignorable enums: D3D12_COMMAND_LIST_TYPE_NONE,
D3D12_COMPARISON_FUNC_NONE
* Alpha constant blend factors
* New sampler filtering with anisotropic min/mag and point mip
* New ABGR4 format
* MSAA UAVs
* Allow SM6.7
* Given socket corruption or network errors these strings could contain
unprintable characters so we sanitise them reasonably. This also ameliorates a
potential security concern with arbitrary strings being written to a log, but
these connections are still considered trusted and users should not be
exposing RenderDoc ports to the internet.
* In ReadLargeBuffer we read directly into an external buffer with ReadExternal,
but for sockets when reading externally we want to read ahead of the current
spot (non-blocking) as much as possible to batch small reads together. Rather
than making ReadExternal handle or detect reads to external buffers, we
instead avoid ReadLargeBuffer as it is an optimisation for direct I/O to avoid
unnecessary memcpy's and is not relevant for sockets.
* We also limit the array size to 1GB for 32-bit. The 4GB/1GB limit is far
larger than reasonable for strings but can be handled the same way regardless.
* Synchronous commands are on the stack, so incrementing the done flag should be
the last thing we do to interact with them. That includes checking for self-
deletion afterwards
* We changed all uses of getenv to our Process::GetEnvironmentVariable in
a1422df, but on android this causes an infinite recursion because its
implementation of GetEnvironmentVariable uses LaunchProcess to query for the
variable, which then tries to look up the PATH variable (which does not exist
on android).
* Bash overrides getenv/setenv to look up its own variable set, but breaks since
we need to modify the environment before main() when it initialises its
variable set. Instead what happens is the first setenv initialises that
variable in a blank set and so all subsequent environment variables are NULL.
Then in main() the variable set gets initialised from environ, removing any
changes that were made.
* Pointer types implicitly referenced by objects but not directly (like global
variable or alloc/gep pointers) are not guaranteed to be present, so we need
to add them ourselves to parse correctly and identically to LLVM.