* This lets us print what driver is available without opening a capture, useful
for autotest logging.
* We also print the driver version & vendor on capture as well as replay for all
APIs. Previously we were only printing this reliably on replay for GL/Vulkan
but it's useful everywhere for post-mortem debugging.
* These are the shader tools we ship with official builds. Most people don't
need these scripts, but here they are just in case (and so I don't lose them).
* This option will now toggle on the behaviour to fill undefined buffer contents
with a marker value, both if they're created without data (it will be zero
filled instead) or mapped with discard (it will keep the old contents
instead).
* There were too many hard to find problems or misconceptions about the buffer
filling for it to be useful. Now it will be opt-in instead.
* This happens at the application's risk since there's no way to know what
effect the vendor extension will have or even if it will work together with
renderdoc's hooking.
* In many cases these structs are redundant and currently aren't ever serialised
directly or valid to be included in next chains. However it's better to take
the hit now and implement this universally in case new structs are needed in
future. It's easier to keep up with when new structs are added, and it means
we have the compiler checking we've handled all structs and don't forget one.
* There are some specific exceptions for structs that really need special
handling and are just treated as if they're unsupported, on the assumption
that any special handling will be implemented elsewhere.
* On some implementations, external images have lower memory requirements than
an identical non-external image. To account for the replay being non-external
we create both and pick the worst when reporting memory requirements to the
app, so that it allocates enough for us on replay.
* We need a workaround for cubemaps where our redundant-glTexImage2D call has
dropped a glTexImage2D on level 0 of another cubemap face that should be
'initialising' it. What we do is just upload all faces. Initial contents will
then replace the contents.
* However, this assumes there will be initial contents to replace. If we only
have a set of cubemap uploads because the cubemap was uploaded within the
captured frame, we can't do this replicate each time or the last face uploaded
will be splatted across all. Instead we check to see if this is the first
glTexImage2D call on a level, and only replicate in that case.