* If we encounter a preinitialised image on vulkan we need to snapshot its
contents on replay because we can't on capture due to the inability to
transition its layout for copy. By definition the underlying memory can be
used, so we just need to ensure it is properly marked dirty and referenced
* This also reveals a separate bug, that image states being deleted from a mid-
capture destruction of an image loses information we need, so defer these
cleanups until after the capture ends.
* This is mostly pass-through as RenderDoc will never interact with it - if the
abort actually fires the device is gone and we can't capture. We enable it to
prevent needing to recompile shaders.
VulkanEventNode contains all data for an Event during loading: APIEvent, ActionDescription, resource usage, debugMessages, annotations.
Action ID, Event ID is not computed whilst loading is happening.
At the end of Loading when the VulkanEventNode's have been flattened into linear submission order then the VulkanEventNode's are baked into RenderDoc replay APIEvents and Actions. Event IDs and Action IDs are assigned as part of the baking process
- loose event annotation
- a barrier at end of command buffer
- at end of command buffer attached to vkEndCommandBuffer
- command buffer with no actions, just set marker
- annotations before/during/after vkCmdDrawIndirectCount calls
Separate the arguments instead of a single argument
Use a different execute command line parameter for different terminal tools
-e : default
-x : for gnome-terminal
Applications that use these extensions have shaders with new
instructions. The driver should receive the features struct
via a vkCreateDevice pNext chain to enable the feature. This
change simply adds this extension as a supported extension,
and adds the pNext structs to the supported structs.
* This isn't necessary if only one main queue is in use as FlushQ() syncs our
main queue, but if the submission is on a separate compute family for example
we need to sync it before processing any indirect readbacks.
* These are identical to the old versions but with a return value, so we can
share the implementation and have a common path just with a bool, and discard
the return value as needed.
* In the new path, only successful writes will be serialised.