* This causes all devices to be included in the capture, when that isn't
what we want. If the application creates and destroys some devices
they must not be included in the capture or we end up with multiple
devices and can use them in a inconsistent manner.
* The active m_Device is still marked as referenced in the frame so it
will be pulled in that way.
* If the application did some CPU side synchronisation that's not
visible in the capture (unlike a queue Wait() which we replay as a GPU
sync) then there might be overlap that causes simultaneous use
problems. So instead we sync between submissions on different queues
to ensure we don't overlap by accident.
* When referencing all resources we use this function to determine what
should be excluded, and in this case we want to make sure that e.g.
the device record and any swapchain records are included, but the
queue/list records or frame capture record should be omitted as they
will be included specially.
* Since D3D12 doesn't allow recording to multiple commands at once, if
we end up doing a partial replay and including a data upload that uses
a list to upload, we need a separate list and allocator.
* There's still an issue lurking that the compressed size is stored as
32-bit on disk, but at least now we don't store the uncompressed size
as 64-bit but track it as 32-bit.
* The serialisation is going to change Soon(tm) anyway so this
workaround should be enough for now, since hopefully compressed size
is comfortably below uncompressed size.
* This was previously needed to be stencil-before-depth to workaround an
nvidia driver bug, but now depth-before-stencil works around a RADV
hang and it no longer seems to be necessary for nvidia.
* The RADV issue is being fixed upstream but this is a 'free' workaround
until that arrives.
* If we pick up on keyup, it might be a keypress from somewhere else
(like a dialog) that was released on our control. Instead we should
look for keydown.
* This is used primarily for the buffer/mesh viewer to be able to pin
the index/element column to the left side, group columns together with
a noticeable separator, and other minor tweaks.
* Unfortunately due to tight private coupling and lack of virtual
functions in the QTableView and QHeaderView, a few unrelated functions
have to be re-implemented to point to our own header.
* Since we don't mark descriptor sets or the written data as referenced
until the descriptor set is actually used, any writes for sets that
are otherwise unused might be missing the necessary objects.
* This is harmless though so we just make sure not to warn about them
being missing as it gets spammy.