Currently, selecting an event with children (e.g. vkCmdExecuteCommands)
in the event browser will cause the API inspector window to show the
final child event, rather than the event itself. This behaviour makes
sense everywhere else: selecting an event with children shows the state
after all children have completed.
However, for the API inspector, we want to be able see API calls for
the parent event when it is selected rather than those of its last
child, particularly in the case of vkCmdExecuteCommands which may have
other API calls leading up to it.
To allow this, distinguish between the "current event" and "selected
event". For an event with children, the former refers to the last
child, while the latter refers to the event itself. ILogViewerForm now
has two separate event callbacks for when either one changes.
The API inspector now makes use of the selected event, while everything
else continues to use the current event.
Before editing a pipeline, we need to recreate its creation info struct.
Compute pipelines have their own VkComputePipelineCreateInfo instead of
VkGraphicsPipelineCreateInfo, and we now make that distinction.
* This means that any 'degenerate' cases of only one event or so on will
still have enough slots to be able to handle reasonable amount of
overdraw. The only case that will fail is if every event has loads of
hits, but on average there should be enough slots allocated.
* This requires that every operation on output windows leaves the state
untouched, so make a few changes to arrange that.
* By doing this it means any unstable/non-deterministic results are
consistent between the current capture inspection and the shader
debug results.
* Without this, the RADV open source driver also gets checked, and its
version is 0.0.1 so it gets marked as buggy.
* Unfortunately there's not a great way to identify different drivers
for the same piece of hardware (ie. PCI IDs are the same).
* We have to use the original allocators when re-recording because the
capture may record multiple command buffers at the same time,
requiring multiple allocators.
* This doesn't actually fix any problems, but a couple of crash reports
exposed the fact that we try to use the result of CreateDescriptorHeap
before checking for errors - this leads to a crash and hides the real
problem.
* Located via a crash report - if there are no initial states in a
capture at all, then initStateCurList will still be NULL after trying
to apply them.
* Should fix a reported crash - it looks like an invalid buffer ID was
passed, and there's no protection for this.
* As with other invalid API use, RenderDoc isn't intended to be totally
safe against bad API use. This check is easy to add though and should
catch some simple cases.
* I received a few crash reports with a disposed buffer viewer still
doing work. My theory is that some operation took long enough that the
user was able to close the viewer (perhaps *because* it was taking a
long time) and subsequent work then didn't handle the window having
been closed.
* The last fix to this file wasn't complete - both width and height must
be greater than 0 for the area to be valid to fill.
* Fixes an uploaded crash report.
Disable warnings in qt (warn_off) then remove -w from qt compiler flags
to re-enable previous renderdoc warnings
Use qt standard way to enable c++11 eg CONFIG += c++11