* On some GPUs the stencil output comes in all channels, not just green, and
it's unclear if this is legal or not. To be safe just mask out the green we
expect.
* This is needed particularly for integer textures which are incomplete if
sampled (even with a non-sampling instruction) with the default LINEAR
filtering.
* Previously if a handle was reused, and then a stale descriptor referencing the
old handle was removed it would remove the *new* object from the list of
referenced resources. This could cause a resource to be not included in a
capture if nothing else added a new reference.
* When the renderpass has an initialLayout = UNDEFINED, that applies to the
whole resource on 3D textures even if we're only rendering to a slice at a
time
* On all APIs structs are aligned up to 16-byte alignment, and on D3D as with
arrays then elements coming after the struct can be packed into the padding
after the last struct element.
* These tests ensure that texture rendering works correctly for all different
types of texture types, and for all formats, across different APIs, including
across a remote-proxy connection.
* 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.
* We assume that fxc won't output a denormalised float in the bytecode, and this
prevents us from flushing integer inputs to otherwise flushable float-type
operations
* Instead of tracking their lifetime with that object, we move the lifetime
tracking into the parent VulkanGraphicsTest and destroy them all at the end. A
single handle can optionally be free'd on its own.
* 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.