* dxc emits a PDB which contains a stream with the debuginfo DXBC container,
which we expected to happen for fxc too. Instead fxc just emits the bare SPDB
chunk PDB. So we need to try to guess what to expect and/or handle both.
* This seems to only happen in SM5.1 builds for some reason, if an array has 0
length and 1 stride then we try to auto-calculate the stride and length when
needed in structs.
* cbuffer and input registers no longer have any names elided into them, they
are 'raw' registers. The source mapping provides the information of where they
come from as best as possible.
* Since we're now using source-mapping for constants, fix some source mapping
issues with arrays, nested structs/arrays, and matrix major-ness.
* Moving away from 'registers' explicitly being stored, we now have a single
variable array where the shader representation is responsible for allocating
it.
* In DXBC we calculate the number of each type of mutable variable (temps,
indexable temps, and outputs) and assign slots linearly.
* We also update some naming - high-level variables aren't "locals" since they
could be globals too, and debugging variables aren't "registers" but simply
the variables we use for debugging which may be more complex than float4 for
other APIs.
* The local variable matching by string name is unnecessary for this change
but will be more useful in future after further refactors where there isn't
a single list of variables to index into at the upper level.
* This avoids having the UI need to do a scan and expecting to find
"instruction:" on the start of a line.
* We also move the callstack to be stored per-step, and not in the line info
mapping.
* Instead of having an N:N mapping of parts of variables to parts of registers,
instead we gather everything together under each variable and it has a list of
registers that comprise it.
* Any gaps are represented as undefined register mappings, for components that
aren't available in any register.
* Also adds support for arrays in the type info
* We allow register mapping aliasing since it can happen during function calls
if the same local is declared in two places - the PDB doesn't seem to add a
gap for the 'parent' variable unfortunately.