* e.g. class instances only crazy people use, so there's no point to have
it eating up a ton of space when 99.9% of the time it's empty. Also
the border colour in samplers is only listed if the addressing is set to
use the border colour.
* I also collapsed down some of the columns to make it a little simpler
visually, like min lod/max lod become just "lod clamp" with a range, and
constant buffers simplified down to a couple of columns.
* When jumping between draws the tables are rebuilt which destroys any
vertical scrolling, so we save/restore it which means the same row will
be at the top of the view. If there are fewer resources it'll just be
as scrolled down as possible.
* Even though this is latched state from glClearColor etc, this means we
don't have to list that in the pipeline state, we can just show it here
where it's relevant.
* If we generate an unmap chunk on a buffer while idle, it contains
'dangerous' data set at that point - it means that if we fetch the buffer
initial contents at frame start, these are actually saved *before* the
unmap chunk, in the initialisation/creation chunk which contains the
shadow copy. Then the unmap overwrites with older data.
* When mapping buffers, we should always either update the initial chunk or
mark the buffer dirty so the initial chunk is refreshed on capture.
* This was changed in commit 99c6719928 and
was probably ok before then (although going into the serialise function
was unnecessary and did some redundant copies into a chunk we were going
to throw away). I'm not sure why I made that change, if it was to fix a
bug I can't understand how. I guess I'll see if anything breaks.
* We were allowing *any* difference between depth and render targets, but
that's not quite right. Oversized depth is fine, but e.g. mismatched
multisampled and not is invalid.
* We also take frame references on invalid attempted OM sets, so that the
targets don't get trimmed from the log and potentially make the set valid
* This will allow the adding of things like 'redundant api call' for calls
that have no effect, as well as potential problems like drawing with an
empty viewport, or similar things that are common problems. Reading out-
of-bounds on buffers etc is a good example of 'defined' behaviour that
is probably not desired.
* These heuristics could also identify potential performance problems.
* It also supports adding debug messages after log-load time, so you could
do an additional extra-strength pass, or do a detailed check of one
draw call (e.g. a broken draw, to try and figure out the problem). If
there are any unread debug messages, the status bar will flash and the
debug messages window will show a count as (N).
* This allows 'partial' rows in the mesh viewer, if a vertex input element
references invalid/out of bounds data, but the others are fine (coming
from different streams).
* When idle if we map a resource that doesn't have backing store (like a
texture that wasn't initialised on creation) we create shadow storage
for the map. We only need it temporarily, so make sure to free it after
we unmap, otherwise it will stick around for hte lifetime of that
resource (!).
* It's not exactly feature parity but it's a start, and any UI would use
this under the hood.
* This means at least linux has a semi user-friendly way to launch and
capture programs - it's limited but you can just use
$ ./bin/renderdoccmd -c /path/to/program "argument string"
from the root of the repository.
* Logfile and capture options (which can't be set yet, but you could easily
hack in something to set them in renderdoccmd.cpp) are passed via
environment variables to the child process.
* At the moment it only works if the files from the capture are in the
exact same absolute paths (so generally on the same machine or same
distro will likely satisfy this, if the library versions are unchanged).
* Also since linux doesn't have a built-in way of verifying that symbols
match via GUIDs there's no checking yet. We could md5 or otherwise hash
the files to make sure they match.
* If there is no match at all we don't prompt for better symbols currently.
* I've added a little platform stamp onto the start of the module database
per-platform just so linux/windows won't try to load each other's symbols
as otherwise the logs are cross-platform. I didn't bump the serialise
version as this is a rarely used (and transient, typically) feature, so
not worth adding backwards compatiblity code. Symbols from an old windows
log won't resolve but that's not a problem. Symbols from a new log won't
load and will probably crash in an old version, but I'm not worried about
that.