Serialisation functions were updated for new structs and enum values. CaptureQueueSubmit was updated to recurse nested command buffer records so that command buffers and their resources are referenced in the capture. The logic for rebasing secondary command buffer events was updated to support nesting. The PartialReplayData struct was updated so all partial submissions can be tracked during active replay.
Manages the capturing, serialising, and replay of acceleration structures for Vulkan. It works in a similar way to how device memory is handled:
* A temporary host-accessible buffer is created for each AS
* The AS is serialised (in the Vulkan AS sense of the word) into it
* The buffer handle is stored in the initial contents and downloaded when
appropriate
* Replay is handled similarly but in reverse
* Workaround added for broken Mali AS serialising
Note this is missing the descriptor and SPIR-V handling, that work will follow in a later PR.
The serialiser version has been bumped for backwards compatibility with 'RenderDoc for Arm GPUs 2024.0'.
* This means that truly empty sources with no name or source are still properly
filtered out - which is how OpSource works. Sources that are empty but have a
name (e.g. ones referenced by #line directives) will still be kept, and
unnamed sources with contents will be kept and given the unnamed filename.
Made some helper functions static and removed unused helper function
float GetDepthValue(DXGI_FORMAT depthFormat, const byte *pValue)
Remove anonymous namespace and use static file scope functions instead
Moved from D3D12 Pixel History to common code to share with Vullkan Pixel History.
Similar to DecodeFormattedComponents() but it keeps UInt, SInt component data as uint, int.
DecodeFormattedComponents() now calls DecodePixelData() and then casts the uint, int data to float for UInt, SInt component data.
For use during replay to enable more situations for graceful handling of OOM
VkAllocateMemory can return VK_UNKNOWN_ERROR in some situations
Used in FetchVSOut() to gracefully handle draws with very large vertex counts
On Pixel 8 phones we were seeing 'INSTALL_FAILED_NO_MATCHING_ABIS' on stdout but it was being checked on stderr only.
The lack of 32bit support is detected again from CheckAndroidServerVersion(..) but it only prints to the log, no logic changes occur. This then caused the 'force queryable' checking to be performed on a not-installed APK which returned ResultCode::AndroidAPKVerifyFailed back to the runner.
The change is to check for INSTALL_FAILED_NO_MATCHING_ABIS on stdout too, and if that check still fails then the later check will bypass verfiication keeping the existing Succeeded result.
* With only a single semaphore we can only have one frame in flight and get
validation layer messages if we run faster than that and re-use the
renderStartSemaphore before the previous frame has completed.
* When the shader outputs a value larger than the texture format
supports, the use of a 32bit target for history targets resulted in the
Tex After for fragments showing a value larger than possible.
* The int/uint path for ConvertAndFillInColor was missing the clamping
step that the other path includes.
Output "ViewIndex" into the pixel shader hits array
Select the pixel shader input which matches the viewIndex to the passed in view
Ignore the view parameter if set to ~0U (rd.ReplayController.NoPreference)
Ignore the view parameter if any subpass has empty multiviews
Vertex shader output Red for view 0, Green for view 1, fragment shader does not use viewIndex.
Fragment shader output Red for view 0, Green for view 1, vertex shader does not use viewIndex.
Geometry shader output Red for view 0, Green for view 1, vertex and fragment shader do not use viewIndex.
Python checks vertex and pixel shader debug output against replay rendering output
DebugShaderInputs struct contains existing the parameters:
sample
primitive
and a new parameter
view
Default constructor for DebugShaderInputs sets the parameters to NoPreference (~0U).