* This is a bit convoluted so follow with me here...
* As an optimisation, when not capturing a frame we serialise clears as
clears for resources and mark those resources as clean. This way if a
resource is cleared, then used in the frame, we don't have to worry
about fetching or storing its initial data - we just replay the clear
once while initialising and we're done.
* The alternative here is to mark a resource dirty when it's cleared,
and then we might have to read back and serialise a completely flat
image - rather wasteful.
* The problem is that if the resource is referenced but its view isn't
then the view will be trimmed from the capture and we don't have it
around to actually perform the clear. This only started being a
problem when views were tracked in their own separate records.
* We can't create a circular dependency from view -> resource -> view
as that would create cycles and keep lots of things alive pointlessly.
Instead we add serialisation of the resource & view descriptor so that
we can recreate the view on demand if need be. This adds 32 bytes to
each clear and since clears aren't hugely frequent it's not a big deal
* This can happen when there's divergence in an if/else, or in how many
times a loop executes. We need to make sure threads go back to being
lockstep once the flow converges so derivatives remain valid.
* I honestly don't know why this fixes it really. I finally got a
reliable repro which involved somehow scrollbars becoming visible and
creating their window handles in a weird circumstance while dragging
the window off fullscreen, and that causing the window handle create
to fail.
* Defined as beginning at the creation of the first swapchain, to the
first Present().
* This is mostly useful for samples that don't enter a proper present
loop and just present once before exiting.
* Previous versions accessing the http URLs will be redirected soon (as
of time of writing this). The POST /bugsubmit won't be redirected as
it's not feasible to redirect POST requests, but that will continue
working.
As-is, glslang doesn't provide default locations on inputs so these weren't
getting any location decorations whatsoever. This is illegal in Vulkan.
While putting them in a struct *should* be possible in theory, glslang
doesn't like to do it with the glsl version in the shader. Just splitting
them into separate inputs seems like the most reliable solution.
* Currently at least glslang doesn't emit OpSource with source data
embedded, so we don't pull it out and for the moment we just pre-fill
the shader editor with the disassembly text (which is sort of but not
really GLSL) as a better-than-nothing default.