* We now take a more vulkan-like approach, by forcing READ_BIT on for
buffers/maps that are coherent, and leaving it alone while idle. During
capture we do the same memcmp & save updates as before.
* This is signifcantly faster while idle, though still slow to capture due to
the number of sync points in GL (per draw). Roughly scales with O(m*n) where m
= number of bytes of memory coherently mapped and n = number of draws in a
frame.
* This gives a one-click way to run the last capture, if it's not
complex/regular enough to be worth saving to a settings file on its own.
* Doesn't save much if you're selecting an exe as the previous exe location is
remembered, but if you also have command line parameters or a working
directory it can help.
* This is the only way in GL to do rendering from one mip to another. We handle
it and display the whole texture even if it's temporarily constricted, and
display the mip state in the pipeline viewer.
* If the mip state is constricted at the start of the frame capture, only mips
0..MAX will be visible at all and other mips will be assumed to not be valid.
* This allows us to have sRGB as a type hint, and better matches API format
types.
* It's currently impossible and unlikely to ever be the case that srgb is
applied to anything other than UNorm, so having it be independent from the
component type was a degree of freedom that was unused.
* We need to fill all descriptors even if the stencil is skipped dynamically in
the shader, since we're not using VK_EXT_descriptor_indexing. Attempt to
create a dummy UINT MSAA texture.
ExtObject extends the SDObject structure with helper
methods.
Intervals are used for memory region tracking.
Change-Id: I38198c0a096ed838d527b6526216fb28326ebc89
* This means it outputs natively/properly to stdout/stderr and its output can be
redirected with pipes.
* It does mean we need to be very careful whenever it's run internally to not
pop up a command window, which happens by default.
* We'd previously subtract the bitfield value twice, leading to underflow and
then lots of unknown bits appear to be set. Instead we should clear the bit so
that it's safe to apply multiple times.
* We coerce the type to the FlagBits enum for serialisation so the
stringification picks up the bits properly. However the variable is properly
typed as just 'Flags' which is a uint32_t typedef, so manually specify its
typename afterwards.