* On APIs like vulkan the view casting happens from an already typed format, so
don't assume that casts are only applied when the underlying format is
typeless. When a cast is not valid the view format should never be different
from the underlying image format as the API should never make it possible to
validly create or bind a view with a different format.
* Subresource handling is more consistent - we pass around a struct now that
contains the array slice, mip level, and sample. We remove the concept of
'MSAA textures count samples as extra slices within the real slices' and
internalise that completely. This also means we have a consistent set
everywhere that we need to refer to a subresource.
* Functions that used to be in the ReplayOutput and use a couple of implicit
parameters from the texture viewer configuration are now in the
ReplayController and take them explicitly. This includes GetMinMax,
GetHistogram, and PickPixel.
* Since these functions aren't ReplayOutput relative, if you want to decode the
custom shader texture or the overlay texture you need to pass that ID
directly.
* Previously we had "Frame X" and "Start of Frame" hardcoded in the event
browser, and the end of frame was in many cases assumed to be a present call.
However with the in-application API this is not necessarily true.
* Presents are now serialised separately in all APIs and displayed wherever they
happen in the frame, and if there is no present at the end of the frame an
"End of Capture" marker is inserted. Similarly API-defined captures are not
given a potentially misleading frame number.
* Previously x and y always ranged from 0,0 to width-1,height-1. Even for lower
mips, the value was just effectively shifted.
* This is quite unclear at the API level so instead x and y are now relative to
the selected mip's dimensions.
Implemented PerformanceCounterViewer::OnEventChanged to handle global event changes.
Behaviour can be toggled on/off via a new 'Sync Views' button similar to the Mesh Viewer; the default is off.
* In particular, if there is a mismatched layer registered under e.g. /etc then
we always need to elevate, even if the user wants their layer to be fixed and
registered user-local.
* The histogram shouldn't be calculated as channel-wise averages, but instead by
'stacking' the channels (each channel contributes 1 to the appropriate
bucket).
* Degenerate channels (where min==max) are excluded and listed only as a single
spike, to avoid blowing out the automatic y-axis.
* If the UI was launched with a filename as a parameter to open the capture, it
will be added to the recent capture file list. Only later (relatively
speaking) if we make a capture connection will we realise that it is temporary
and potentially delete the file. If we do so, remove the capture from the
recent file list.
* When the same sampler is used in multiple combined image/sampler descriptors
we only list the sampler once to avoid really verbose unnecessary rows. Use
row highlighting to indicate which sampler is used with which image, and add
it to the view details tooltip with the image layout
* In particular make it clear that crashes caught in the injected program may or
may not be a RenderDoc bug. Even if we could point the finger to a particular
DLL we can't necessarily tie that DLL to the responsibility of either us or
the application.