* We want to be able to declare a 'name' of a resource and then fetch it
later. To do this we create a tiny little reference (either an int on
windows, or a pointer+length elsewhere), then actually fetch the data
later.
* Added to the vulkan loader after 1.0.65, this lets us intercept the
enumeration of instance extensions (before our layer is actually
initialised) so that we can filter out unsupported extensions.
* By default this is off as it will continually add more and more
messages each time the frame is replayed. It could be useful to turn
on to
* We also enable VK_EXT_debug_report any time it's available, not just
when we're enabling the validation layers.
* Some distribution packages (Ubuntu at least I think) point the nvidia
vulkan ICD registration at libGL.so. Since for libGL hooking we have
to redirect dlopen("libGL.so") to ourselves, this means the vulkan
loader loads librenderdoc instead of libGL. If we don't export the VK
ICD entry points, it will fail to load that ICD.
* This solution isn't perfect - we export all three main ICD entry
points. If the real ICD doesn't export one, we will fail and cause
problems, since the loader won't fall back to older paths unless the
symbol is completely missing. For now though this is fine since the
nvidia ICD exports all three.
* The only way to solve that properly would be to intercept all calls to
dlsym and redirect these functions by name to go to the real handle
instead of ourselves - vastly overcomplicated for this edge case.
* This was fast before but I started noticing the lag. Instead, we can
do it asynchronously when polling for remote host status, every few
seconds. This should still be good enough as people are probably going
to be used to devices taking a moment to appear.
* This causes a full rebuild in VS because the command line has changed
every time you commit or checkout in git (because the git commit
/D parameter has changed).
* Since we only need it in UI-facing projects we remove it from
every project except qrenderdoc, core renderdoc, and renderdoccmd.
They will still rebuild when the commit changes but technically VS is
right to do so.
* There's weird behaviour seen where after binding a descriptor set with
an offset, subsequent work in other command buffers doesn't behave
correctly. Re-binding the descriptor set with a 0 offset seems to fix
it, so I assume the offset is leaking and applying to subsequent
binds that don't have any dynamic offsets.
* Instead we write transparent black when out of bounds. This only works
when we're blending, but the cases that we don't blend are when we do
a blit to a precisely sized output target with no offset, so it
shouldn't cause a problem.
* Mostly used for passing a progress float back during a long blocking
call like opening a capture or doing a copy.
* This is much more feasible for python to bind to.
* In several cases we just use a tiny lambda that updates a float anyway
since we can't push the progress directly into a progress dialog, but
need to let it query from a temporary in-between float.