* The internal printf was already used for all numeric types but PIX of course
has special encoding for strings so this was manually handled. Instead use the
callback-based formatter and decode strings for there, so that varargs string
length and string padding formatters are supported.
* On the active thread GSM reads come from the local GSM cache (not the global GSM data)
* This brings consistency in debugger UI when seeing the GSM data as variables (which is populated from the local GSM cache) and seeing the results of reading from the GSM data
GSM writes already populated the local GSM cache and the global GSM data
GSM Sync populates the local GSM cache with the data from the global GSM data
* Update any SSA max points which are inside a loop to the next uniform block
* This covers the case of SSA IDs that are assigned to but never accessed
Example HLSL construct that is correct after this change (and incorrect before this change)
if (id >= 2 && id <= 20)
{
...
}
else
{
... <THE CORRECT THREADS MERGE HERE INTO A SINGLE TANGLE>
}
Also tweaked DXIL ControlFlow GraphVis output
Generate the graph in a string for use with RDCLOG or writing to a file
Changed (full) convergence nodes to be blue rectangles
Partial convergence nodes are rounded green rectangles
Partial convergence edges are green dashed lines
FIXUP GENERATE PARTIAL CONVERGENCE
* It is impossible to emit a true 16-bit type on fxc, the minXX types we round
up internally to a 32-bit type since that's how they are defined to appear in
external resources like cbuffers and SRV/UAVs.
* The new 16-bit type enums that are shared between fxc/dxc structs are not
actually ever emitted by fxc for RDEF types.
* Maps are recorded as open whenever we intercept them, usually only falling off
for high traffic resources or direct maps like WRITE_NO_OVERWRITE.
* Unmaps can be successful any time as long as they're intercepted as reads (no-
op) or write discard (since we just need to intercept these).
* Unmaps from other write types require a map during an active capture to ensure
we properly set up shadow pointers.
With GLES, a precision specifier is mandatory for float types.
Specifying one in the user shader is not enough because it happens too
late after uvec2 and uvec4 uses in the custom prefix.
Set the thread property SubgroupId for the extra lanes outside of the subgroup
pass the workgroup laneIndex to BeginDebug
Set the thread property GroupThreadIndex, GroupFlatIndex for all workgroup lanes
Use SV_GroupThreadID to fill in threadid in the compute fetcher instead of SV_DispatchThreadID
Keep SV_DispatchThreadID to identify the candidate thread
* The problem here is that due to design flaws in the extension when ASs are in
use we don't know whether a memory allocation will need BDA or not an the
application doesn't have to set any flag - unlike for normal buffer BDA. So we
promote (almost) all memory allocations to BDA when using ASs even if they're
not needed.
* This normally works fine except if during self-capture the replay process
allocates some normal memory before all application replayed allocations have
been made, the self-capturing will promote it to BDA and request a replayable
address that might clash with a later address the application had used and
would be needed.
* To solve this, we ensure that during capture we don't create wrapped
allocations more than necessary - to avoid causing clashes - as well as
ensuring that on replay we only create new allocations after all replayed
allocations.
* We also take advantage of dedicated allocations for fake swapchain images,
since dedicated image allocations will not be promoted to BDA.