Version v1.15
This release comes with a significant revamp to the event browser, to make it easier to customise the view of which events are displayed and how, as well as to format them for display. As part of this RenderDoc now uses the term 'action' to refer to what was loosely called a drawcall before - anything on the GPU timeline that visibly changes resource contents, such as draws and dispatches but also clears, copies, resolves, etc.
There are also improvements to how bindless resources are displayed on D3D12 when using SM5.1 DXBC shaders. Your shaders are now patched to annotate resource usage at runtime and this data is used to determine which resources to show - only those actually referenced by the given action. This significantly reduces the number of resources shown and makes it easier to find what is relevant. This feature is planned to come to SM6.0 DXIL shaders, but that will be in a future release given how difficult DXIL is to work with.
Binary releases are available on renderdoc.org with zip and installer for Windows and binary tarball for linux.
Main Highlights
-
The Event Browser has been significantly refactored. By default the display is almost identical to what it was before, with the exception that 'API Calls' placeholder entries are no longer visible and any marker regions only containing state setting or other non-action events will be invisible. The new functionality means these are no longer necessary.
The events visible by default shows only actions (the new term used for drawcalls), the same as previous versions, with a default filter of
$action()
. However the filter is now customisable and acts as a simple search query type filter. For example if you wanted to see Barriers in addition to normal actions you could add aBarrier
term:Or if you wanted to hide copies and clears you could remove those with
-Copy -Clear
:Filters can also have functions that query on properties of actions, for example showing draws with more than 10,000 vertices/indices:
The filter can be modified to include or exclude whichever events you wish, and a blank filter allows viewing all API calls in sequence with no omissions, including state setting:
The filters can be customised and saved, and an interactive configuration panel can be used to interactively build filters and see the documentation on the fly:
For more information on how to use filters see the documentation on filtering events.
-
In addition to filtering which events are shown, the configuration panel shown above also allows you to show parameter names as well as values, show all parameters to function calls, or disable 'custom formatted' action names such as renderpass begin or end which shows the load and store ops. By default only the most relevant parameters are shown.
-
The new Event Browser includes a simple 'breadcrumbs' display showing where in the marker hierarchy the current event is. Each node has a dropdown that can select sibling markers at the same level:
-
Bindless feedback is available on D3D12 for DXBC shaders (SM5.1). This feature has existed for a while on Vulkan but is now implemented on D3D12. Note that because patching shaders on D3D12 is inherently unreliable, please report any issues you find either with resources being wrongly excluded or included.
Python API changes
- Some places have renamed
drawcall
→action
to be consistent with the new terminology:DrawcallDescription
→ActionDescription
- see below for some notes.DrawFlags
→ActionFlags
.DrawFlags.APICalls
was removed as API calls actions no longer exist.CaptureOptions.captureCallstacksOnlyDraws
→CaptureOptions.captureCallstacksOnlyActions
- The
EventBrowser_HideEmpty
andEventBrowser_HideAPICalls
members ofqrenderdoc.PersistentConfig
have been removed as these settings are no longer relevant. - Several members of
CaptureContext
have been renamed as above:CaptureContext.CurSelectedDrawcall
→CaptureContext.CurSelectedAction
CaptureContext.CurDrawcall
→CaptureContext.CurAction
CaptureContext.GetFirstDrawcall
→CaptureContext.GetFirstAction
CaptureContext.GetLastDrawcall
→CaptureContext.GetLastAction
CaptureContext.CurDrawcalls
→CaptureContext.CurRootActions
CaptureContext.GetDrawcall
→CaptureContext.GetAction
As above, these returnrenderdoc.ActionDescription
renamed fromrenderdoc.DrawcallDescription
.
In particular note that for the new ActionDescription
struct the per-action name
member has been removed. There is a customName
member but for most actions this will be empty. The name for an action can be determined by looking up its chunk in the structured data, as given by the last API event in its list of events.
The name for the action is the name of the chunk, and optionally you can format the parameters. A new helper method exists GetName
to format the action name without parameters, and it takes the structured file as a parameter. This will generate a name like DrawIndexed()
and not DrawIndexed(123, 45)
. You may want to only include parameters that are marked with SDTypeFlags.Important
, which is a hint to which parameters are most relevant to a user.
Features/Improvements
- UI: Event browser is significantly refactored to allow custom filtering and display of events.
- UI: Breadcrumbs view added to event browser to navigate the frame.
- UI: In the pipeline state viewer when the depth test is disabled show that explicitly for any sub-states which are ignored, like depth writes or depth function.
- UI: Improve the find and find-all dialog in shader viewer, with double click on results to jump to them.
- UI: When shader debugging with source, stepping now allows for 'step into' which was the previous default and will enter any function calls, as well as 'step over' and 'step out' which will respectively try to stay in the same callstack frame (not entering any new ones) or leave the current function. All stepping and running options are now available both forwards and backwards.
- UI: Show better window titles for edited shaders.
- UI: Web links in validation messages are made clickable.
- UI: Added multi-selection for copy-paste and export options to the shader message viewer.
- UI: Improve the sorting on shader messages, to sort properly by order of invocation.
- UI: Clarify some error message dialog text.
- UI: Fix buffer export title always showing the same instead of varying by the format being exported.
- UI: Recognise
debugPrintfEXT
in glsl syntax highlighting. - UI: Add some optimisations for large number of API events for a single action, and for large numbers of resources bound in Vulkan or D3D12.
- UI: Fix the text being hard to read on dark theme when a row is highlighted for having more details in the pipeline state view.
- OpenGL:
glClear
is always listed as an action even if colour isn't cleared. - D3D12: DXBC shaders (SM5.1) now have bindless feedback so large arrays of descriptors only display those resources that are used.
- D3D12: Display the read-only state flags on depth-stencil views.
- D3D12: Added signature validation on
D3D12Core.dll
embedded in captures. - D3D12: Serialise explicitly any Unmaps which indicate that there is no written data.
- Docs: Reorganised and clarified docs on how to annotate/markup sections of a capture.
Bugfixes
- UI: Fix a crash if a user tries to toggle a bookmark in the event browser with no capture loaded.
- UI: Fix some cases where text like
param@5
was incorrectly interpreted as a reference to EID 5. - OpenGL: Fix a crash when queueing a capture of frame 0 of an application.
- OpenGL: Fix a problem with use of texture views on android.
- OpenGL: Fix a problem where unmapping a persistent mapped resource would fail a frame capture unnecessarily.
- Vulkan: Fix a crash when push constants are provided insufficient data.
- Vulkan: Disable use of
KHR_buffer_device_address
on Qualcomm as it causes crashes. - Vulkan: Disable use of
KHR_buffer_device_address
on Intel on non-latest drivers. - Vulkan: Fix a crash if
NULL
vertex buffers are bound usingVK_EXT_robustness2
. - Vulkan: Fix potential fatal errors if invalid printf strings are specified in shaders.
- Vulkan: Fix a crash if
0xFFFFFFFF
is used as a component inOpVectorShuffle
. - Vulkan: Fix a crash where code would temporarily do a no-op write to potentially const pNext structures.
- Vulkan: Fixed hardware ISA and other pipeline-based disassemblies not generating correctly when editing shaders.
- Vulkan: Fix a potential deadlock when capturing and detecting coherent mapped memory writes.
- D3D12: Fix a potential crash when constant buffers with no corresponding root signature element are viewed in the pipeline state view.
- D3D12: Fix reference counting that could lead to devices leaking.
- D3D12: Fix a crash that could happen if multiple devices are alive and have resources allocated at once.
- D3D12: Fix an error shader debugging typed resource loads where expansion fills in components - reading float4 from RGB should set 1.0 in the alpha column.
- Linux: Fix problems capturing child processes depending how they
fork
andexec
. - Android: Fix config settings not propagating properly to android on some android versions.
- Android: Fix a potential timeout if a very large capture is opened.
- Android: Fix an issue where many command buffers were generated unnecessarily during capture load that could cause crashes on some drivers.
- Android: Fix a crash when generating discard patterns for ASTC textures.