* This is a stupid requirement as the quad overdraw shader doesn't use any
interpolators, but the D3D12 runtime complains and refuses to create a PSO
unless the PS has a matching signature. This works as long as the position was
the first output from the previous stage, but if it isn't the PSO fails to
create.
* To fix this, we take the existing shader and patch it by grafting the output
signature from the last stage over onto the input signature, and patching up
where the position is.
* Unfortunately there isn't an easy registry key to check to see if the
2015-2019 redist that we need is installed. Instead we need to check the
major/minor version to see if it's at least 14.20.
* This is complicated by the fact that windows installer returns DWORD registry
values with an extra # but provides no built-in way to strip it so it can be
compared numerically. The solution we've used here is a custom vbscript
action, but apparently they are problematic. Worst case I believe this will
try to install the runtime when not necessary, which might require an
unnecessary reboot. Or alternatively it may misdetect the runtime as installed
but the large majority of people have a compatible redist so this isn't too
bad either.
* Normally we only check mapped memory when it's referenced during capture by
some binding, but for BDA we don't have bindings so we have to conservatively
check it every time.
Specify the maximum count of parameters instead of number of bytes
i.e.
GLint iscol;
GL.glGetInternalformativ(target, fmt, eGL_DEPTH_COMPONENTS, sizeof(GLint), &isdepth);
becomes
GL.glGetInternalformativ(target, fmt, eGL_DEPTH_COMPONENTS, 1, &isdepth);
From GL references pages: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGetInternalformat.xhtml
bufSize
Specifies the maximum number of integers of the specified width that may be written to params by the function.
* 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.