* This is a deliberate break of compatibility since the field is now often
empty, for non-markers. This means code will get a more explicit error when
the name is being referenced, so it can be updated to fetch the name it needs
as needed.
* There's not a good accepted terminology for this kind of event, and for
historical reasons 'drawcall' has been the accepted term, even though
that can be quite confusing when a dispatch or a copy is a 'drawcall'.
* This is particularly highlighted by the event browser filters where
$draw() includes draws and dispatches, but $dispatch() only includes
dispatches, it's hard to intuitively understand why $draw() matches all
of these calls.
* As a result we've defined the term 'action' to cover these types of
events in the same way that we defined 'event' in the first place to
mean a single atomic API call.
* On all APIs when depth is disabled the writes are skipped as well. Explicitly
set the function and write state to say that they are disabled.
* This also papers over a weirdness on D3D11 which has confused a couple of
people, where the retrieved desc with GetDesc() on a state object can be
different to the one it was created with when you set ignored parameters -
like the depth function with depth disabled.
* We need to use the bindpoint mapping to ensure we look up the correct usage
information. Also iterating over the unsorted shader resources potentially
gives us out-of-order bindings, so we resort by bindpoint (which was sorted
into binding order in the implementation).
* Most remote replay links are slow enough that the lag introduced by
synchronously fetching and displaying these thumbnails would be annoying for
simple mouse-over scenarios.
* If there would be no tooltip otherwise, it just shows the thumbnail. Otherwise
any tooltip text (like view parameters or image layout) is displayed below the
thumbnail
* This in particular means push constants and specialization constants on vulkan
but also applies to root-value cbuffers on D3D12.
* GL bare uniforms are not feasible to expose in this way.
* We can't assume ranges in root signature elements map to shader binding
arrays, there is a many:many relationship (one range can have multiple
elements, or only part of an array, one array can have multiple ranges).
* If we default to D3D11 at construction time, if we have persist data (very
likely) and it's for another API then we'll have to destroy the D3D11 viewer
and recreate the other API's viewer.
* We tune the pipeline state view and texture viewer to only iterate over a
small list of dynamically used binds in the (vastly more common) case where
unused binds are not being shown.
* This is still accurate, what we're missing is "read data as int, then cast to
float" which is represented by setting 'floatCast' to true. A normalized cast
or interpret is accurately represented by saying the input is snorm/unorm
typed.
* We can still highlight them as empty the same as we do for insufficiently
sized constant buffers, but we should display the proper resource contents.