* Proper GL doesn't seem to support this internal format, and fortunately the
contents save/load work fine with GL's built-in swizzling if we treat the
texture as RGBA8 instead.
* This is not needed on Vulkan because Vulkan uses a per-draw callback system
that automatically splits up multidraws into single draws for replay. On D3D11
there is no multidraw so it doesn't come up there.
* On GL we can e.g. have one draw touching the pixel half-way through a
multidraw, and then want to replay from that draw through to the next touching
draw which could be much later or in the same multidraw. It assumes we can
always replay from one draw to the next.
* We add a capture option that defines a soft limit we aim to keep under for
memory overhead during capture, excess initial states after that will be
stored temporarily on disk.
* 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