* In many cases (particularly on D3D11/D3D12) the replay would simply
forward functions as-is to the debug manager for implementation. This
meant that change any of those function signatures required more
tedious copy-pasting than was necessary, and didn't make much sense.
* Now the replay class is responsible for implementing all the
functionality and owns any debug-only API resources, but can still use
the debug manager for any indirect utility functions like caching,
etc.
* The API resources are better organised by task in the replay class
rather than being all over the place.
* Finally on vulkan, added some helper functions to reduce the
boilerplate involved in initialising objects.
* 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.