Do not pixel debug on an unknown primitive ID (-1)
Allow pixel debug and vertex debug on non-drawcall actions which have non-zero drawIndex i.e. Indirect draws
DebugShaderInputs struct contains existing the parameters:
sample
primitive
and a new parameter
view
Default constructor for DebugShaderInputs sets the parameters to NoPreference (~0U).
* Ideally we would also include mesh output here, but we would need a way to
clear the postvs cache every so often to avoid bloating, otherwise it will
generate too much data iterating the whole capture.
This is supported by OpenGL, and on Vulkan with
VK_EXT_primitive_topology_list_restart. On Vulkan, all drivers are
known to support this even without
VK_EXT_primitive_topology_list_restart. On D3D, primitive restart is
only supported for strip topologies.
Previously, RenderDoc specifically disabled primitive restart for
non-strip topologies. In this change, that is no longer done. If the
app enables primitive restart, so will RenderDoc behave accordingly. It
would be the responsibility of the app to avoid primitive restart if the
API doesn't allow it.
* 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.
* These map more naturally to python tuples and are easier to wrap in and out.
* We also tidy up the FloatVecVal etc and standardise the members of
ShaderValue.
* 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).
* 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 also make sure that if we go back to a previous event to debug, that we
look up the right output corresponding to where it's bound there (since it
might be bound to a different slot).
* Built entirely independently of the main renderdoc build (for now).
* Contains python scripts & framework for running tests on a renderdoc build,
which will be run nightly.