* The builtin is more directly useful but the signature index allows us to match
up inputs and outputs that don't have a builtin meaning (pure interpolators).
Added fetching of texture data for UAVs, to allow stores to occur.
Fixed issues with sample/gather when debugging a compute shader.
Added a demo for dispatch in D3D12.
This fixes an ambiguity between old captures (where missing MemRefs
indicates a lack of information, and we need to act pessimistically), vs
new captures where the memory contents were not accessed (e.g. only
bound to images). Now the latter case will have an explicit MemRefs
entry indicating that the memory was not referenced.
Change-Id: Ib76d56ef6f2e250952412b4cdbe0b2432a4ca0ec
* When we need a SPIR-V pointer we box up a real pointer to a ShaderVariable,
and optionally column/scalar selectors if it's a pointer to a scalar within a
vector or matrix.
* For globals in opaque storage classes we'll allocate our own ShaderVariables
so that we can safely keep pointers to them. Otherwise IDs of temporary
pointers (from OpAccessChain) should always be a strict subset of the lifetime
of the ID it's pointing to, so we can keep the pointer around. The variables
don't move and are persistently allocated so they won't be relocated from
under us (we pre-allocate space for the IDs).
* Before passing back a ShaderVariable to the outside world, we evaluate its
current value. Thus pointers are presented as if they are just variables that
happen to update when their parent does.
* We standardise on definitions: source variable names contain the full path,
and identify debug variable by full path. Debug variable members only contain
the child element - so foo doesn't contain members foo[0] or foo.bar, it
contains [0] or bar. Path walking happens when mapping source variable to
debug variable.
* This works just as well for DXBC but works much better for SPIR-V where debug
variables can be more complex.