Version v1.7
Version v1.7
Here we are with v1.7, a release containing a number of bugfixes and other improvements.
This release is aimed at starting a new cadence of updates roughly every other month. The aim is to reduce the time between a bug being reported and fixed, and that fix making it into a stable release. Nightly builds always have the latest fixes but for good reason most users prefer to stay on stable releases.
Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.
Python breaking changes
-
All python scripts that use the replay API must now explicitly initialise and shut down RenderDoc replay API use. The
InitialiseReplay
function must be called before any other use of the API, and once all API use is done thenShutdownReplay
must be called. These functions can only be called once, it's not possible to initialise and shutdown multiple times. Failing to shutdown correctly may lead to memory leaks, and failing to initialise properly could lead to undefined behaviour or crashes. -
ReplayOutput.PickVertex
no longer takes an event ID parameter, it implicitly uses the current event ID. -
ReplayController.GetCBufferVariableContents
takes an extrasize
parameter to optionally clamp the source range of the buffer. This can be set to 0 for the previous whole-buffer behaviour. -
ReplayController.DebugVertex
no longer takes instance or vertex offset parameters, these are automatically populated from the drawcall data. -
SigParameter.arrayIndex
has been removed. -
The API for debugging shaders has been heavily refactored.
ReplayController.DebugVertex
,ReplayController.DebugPixel
etc still return aShaderDebugTrace
but it doesn't contain a list of states. Instead the trace can be passed toReplayController.ContinueDebug
to return a list ofShaderVariableState
.Each state contains per-step information like the step number, instruction, etc, as well as a list of
ShaderVariableChange
. Each change indicates either a debug variable (e.g. a register) changing, coming into scope (indicated by an uninitialised before value), or going out of scope (with an uninitialised after value).Since the changes are bi-directional this allows stepping forward and backwards, accumulating changes.
For more information consult the relevant documentation.
Features/Improvements
- Improved performance for capturing D3D12 programs that bind very large descriptor tables (bindless style).
- When loading textures in the image viewer the sRGB interpretation is no longer stuck on and can be toggled off.
- Improve handling of queue ownership transfer barriers in Vulkan.
- Treat
vkCmdFillBuffer
the same as other clears, as a drawcall listed in the event browser with a resource usage entry. - Add resource usage entries for CPU writes to resources.
- Added a global font scale for the user interface.
- In capture connection window, captures will have the file size listed to more easily detect degenerate/empty captures.
- Add support for
VK_KHR_shader_non_semantic_info
. - The find/replace dialogue has changed from a "search direction" and then find next to having find previous/next buttons.
- For viewing very large buffers there's a paging system to jump through 10,000 rows at once.
Bugfixes
- Fix MSAA mismatch on D3D12 leading to corrupt mesh viewer rendering on NV GPUs.
- Fix precision loss when saving non-uniform texture formats (e.g. depth-stencil or RGB9E5) to HDR/EXR.
- Fix crash calling
ID3D12DebugCommandList::AssertResourceState
. - Fix handling for
SAMPLER
descriptor writes on vulkan. - Fix broken pixel history on D3D11 when the target texture is BGRA8 viewed as sRGB.
- Fix array specifiers in buffer viewer format always displaying first element for all columns.
- Fix component display in texture viewer status bar when opening special formats (e.g. block compressed textures) in standalone image viewer.
- Fix pixel picking when using custom visualisation shaders in image viewer.
- Fix buffer viewer not rendering correctly in D3D12 on windows 7
- Fix custom shaders being applied to mips incorrectly.
- Fix a crash when mapping textures on deferred contexts on D3D11.
- Fix near and far plane specifiers being backwards in mesh view.
- Fix camera properties being reset intermittently in mesh view.
- Fix support for fetching postvs from vertex shaders using subgroups.
- Fix errors loading captures that enable
VK_EXT_tooling_info
. - Fix problems with D3D12 overlays on high MSAA levels.
- Prevent race condition if multiple threads create identical D3D12 object.
- Fix handling of promoted extensions around Vulkan 1.2.
- Fix resource usage being incorrect after indirect draws.
- Respect byte range when binding constant buffers on different APIs, instead of always allowing reading out of bounds data in the constant viewer.
- Only enable bufferDeviceAddressCaptureReplay in VK1.2 feature struct when bufferDeviceAddress is supported.
- Fix crash in
vkCmdBindTransformFeedbackBuffersEXT
ifpSizes
parameter isNULL
. - Fix global hook on windows.
- Fix GL capture when no valid context can be made current.
- Improve handling of multi-dimensional array input/outputs from SPIR-V shaders.
- Ensure that queue used in
vkQueuePresentKHR
is included in the capture. - Handle multiple push constant ranges properly when fetching vertex output on vulkan.
- Fix a memory leak on D3D12 if many queues are created.
- Fix a use-after-free problem on D3D12 if a buffer is used and destroyed mid frame.
- Fix crash if image views in imageless framebuffer are garbage.
- Fix rendering for
VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
textures. - Fix a crash loading a completely empty capture on D3D11.
- Fix crash on D3D12 when triangle size overlay is selected for a point/line rendering draw.
- Fix problems on Vulkan when no graphics queue is fetched by the application, even if we reserved one.
- Fix launching android applications which customise their process name.
- Fix wrong debugging when loading from multisampled textures.
- Fix interpolation mode on PS inputs not being respected when debugging pixels.
- Don't clear compressed textures on vulkan when resetting frame data.
- Fix certain cases where depth texture MSAA <-> Array copies would fail on D3D12.
- Fix handling of EXT_debug_marker/KHR_debug inconsistency.
- Fix python exception handling in python UI extensions.
- Fix crash when using overlay on D3D11 MSAA depth textures with Quality != 0.
- Fix extreme edge case where JDWP packets from android come back out-of-order.
- Add additional error handling when GPUPerfAPI initialisation fails.
- Handle gl_BaseVertex/gl_BaseInstance and gl_DrawID as built-in inputs correctly.
- Fix fetching of mesh output data in multi-draw cases on GL.
- Fix loading captures with
ID3D12Device::OpenExistingHeapFromAddress
on devices with tier 1 heap capability. - Don't report duplicate GL extensions with those we support even if the driver doesn't.
- Fix replaying captures with
VkPhysicalDeviceVulkan12Features
wrongly enabling unsupportedbufferDeviceAddress
feature. - Fix case where pixel history could run dispatches multiple times and generate unwanted side-effects.
- Fix the behaviour for fetching out-of-bounds vertex buffer inputs (if part of a vector goes out of bounds, the whole vector is replaced with 0,0,0,1).
- Fix conversion of nanosecond counters on vulkan.
- Fix type mismatch in counter results on vulkan.
- Fix crash if error occurs importing files in UI.
- Fix crash if no drawcall is selected when exporting pipeline state to HTML.
- Fix RTVs not being included in capture when using
RTsSingleHandleToDescriptorRange
.