* This happens with atidxx64.dll which gets loaded as a stub and a real
thing. If we hook the wrong dll then we might not intercept some calls
that go to the real thing.
* In particular, LiquidVR tries to use the AMD extensions and if we
don't properly block those calls, it will lead to a crash on replay.
* We don't support self-hosted captures this way, and this prevents a
crash if the user accidentally left the env var set when running the
replay program.
* The drawcall may modify some pipeline state - e.g. we want to fetch
append/consume counter values after the draw to be consistent with the
rest of the UI, and if the draw is a renderpass boundary we want to
fetch the bindings after the renderpass has started, not before.
* This most commonly happens launching an Android program that takes a
while to launch, or if you're launching a program with the delay for
debugger option set.
* Instead of the whole UI hanging, you'll get a progress dialog to
appear while it's waiting.
* The function isn't exported via dlsym, so it needs to be fetched via
glXGetProcAddress. Calling our own internal wrapper will fetch the
real pointer and populate it.
* We need extra descriptors during some analysis events for patching e.g
shaders for overlays and things. This is because D3D12 only allows one
heap of any given time bound at once.
* D3D12 also limits the size of that heap, and the limit is not
queryable so the application can make a heap of maximum size that it
uses all of.
* There's no solution for this, in this case we just can't add more
descriptors and when we try to use the last one for our own purposes
we stand a small chance of stomping an important descriptor.
* The component must be clamped (ie if the stride is 8 bytes, .z is not
valid) rather than the place of the component (.xxxy is fine - even if
.y is in the 'w' place)
* Always at least pick the current instance, even if no others are
visible
* Only apply to VS output picking. Inputs either don't vary with inst ID
or are trivial (all verts identical) depending on the element selected
* Respect the currently selected element instead of always picking
the position output
* If we're selecting a different instance, we have to queue the vertex
selection because otherwise the refreshing of rows breaks it