Called when loading captures in Iter_Test and Repeat_Load
Checks the consistency of EventIds:
Walk the actions to find all the referenced EventId's:
- Error if any EventId is duplicated
- Error if the EventId's are not contiguous (with no gaps)
- Bind the same resource as the Indirect Buffer and the Index Buffer
- Defines the resource usage when an indirect command binds the same resource for multiple usags i.e. Indirect + Index Buffer
- Descriptor buffer contents set by earlier command buffer than usage in a single submit
- Verifies the resource usage submit replay is correct (one command buffer at a time)
Execute multiple secondary command buffers at once
Test loose events (barriers) on nested secondary command buffer, secondary command buffer which is submitted multiple times and a command buffer which is submitted multiple times
Submit the same command buffer multiple times
* We normally deduplicate during capture, but replay can introduce new
duplication against internal objects. Using ReplaceResource() would fix this
but updating the wrapper map is necessary for D3D11 to query current state
properly.
* Without this then buffers over 32-bit range which are treated as a 1D resource
could fail. Note that most APIs don't actually behave well with >=4GB buffers.
Placing `alignas` before the type is more in-line with the C++ standard,
Microsoft Learn examples, and other places in this codebase. While the
old way worked with MSVC, this is more consistent and improves
compatibility with other tools without affecting the MSVC build.
* This would generally only come up with gl_PerVertex, and was hidden before
because gl_Position is the first member. It likely would also reproduce if a
user had a struct output from the mesh shader.
* It's impossible to distinguish a separate TEXCOORD0 and TEXCOORD1 from an
array at TEXCOORD0. However making this an array by that same logic is fine.
We can't make an array though if there is another element in between they must
be contiguous.
* If immutable samplers are used the sampler parameter of a descriptor update
could be garbage. Checked for elsewhere but not handled in descriptor update
template unwrap.
ALooper_pollAll was obsoleted since NDK 27 and resulted in
renderdoccmd_android.cpp:526:8: error: 'ALooper_pollAll' is
unavailable: obsoleted in Android 1 - ALooper_pollAll may ignore
wakes. Use ALooper_pollOnce instead. See The API documentation for
more information
Since we poll from within a loop, we can replace it by ALooper_pollOnce
directly. But to be on the safe side, do this only on NDK 27+.