* Due to standards nonsense the availability of isinf/isnan in C++ is quite
complex and varies a lot between compilers. Trying to access them reliably is
quite brittle and they're easy to implement with bit-inspection of float
patterns, so we do that instead.
* It's illegal for an application to pass an unknown pNext struct since they
must correspond to enabled extensions and we disallow all unsupported
extensions.
* Rather than crashing or corrupting the serialisation though we strip and don't
serialise the extension struct. This may or may not succeed but the
application is already in undefined territory.
* When we encounter an unsupported extension on replay this cannot be handled
since we don't know how to skip its serialisation. This becomes a fatal error.
* This allows persistent config storage and registering tweak variables that
works independent of the UI's configuration.
* Config vars can be debug only, which means they will be compiled out in stable
version releases. This allows for debug-logging tweaks that are available in
all builds (including nightly builds) for diagnostic purposes, but have zero
overhead in stable releases.
* Variables have a loose hierarchy defined with _ or . to separate nodes.
* We instead always have 3rdparty/ in the relevant include search paths and rely
on that. Each library still has its own unique base dir within 3rdparty to
clarify where the include is coming from.
* Mostly moving includes from common headers to cpp where possible, and removing
includes of the whole thing where only enums or rdcstr etc are needed.
* If we only copy the slot contents without converting Vk* handles to IDs then
we run the risk that the resource will be deleted and re-allocated mid frame
before we do that at serialise time.
* Instead we fetch IDs immediately and serialise as IDs, then look up the
handles on replay
Added a special chunk flag indicating that chunk size is a 64 bit value.
This allows to handle larger chunks (which heppens quite rarely) while
still maintaining backward compatibility with the majority of traces.
Bumped RDC file version of 0x101 (1.1) to make sure older version cannot
read the new file format.
ExtObject extends the SDObject structure with helper
methods.
Intervals are used for memory region tracking.
Change-Id: I38198c0a096ed838d527b6526216fb28326ebc89
* 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.