github baldurk/renderdoc v1.15
Version v1.15

latest releases: v1.32, v1.31, v1.30...
2 years ago

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 a Barrier term:

    Filtered event browser showing barriers as well as actions

    Or if you wanted to hide copies and clears you could remove those with -Copy -Clear:

    Filtered event browser showing actions except copies and clears

    Filters can also have functions that query on properties of actions, for example showing draws with more than 10,000 vertices/indices:

    Filtered event browser showing only draws over 10,000 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:

    Unfiltered event browser showing all API calls

    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:

    Filter configuration panel

    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.

    Events in the event browser listing parameter names
    Events in the event browser showing all parameters

  • 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:
    image

  • 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.

    Before:
    many resources bound, so many displayed

    After:
    only a few resources used, so few displayed

Python API changes

  • Some places have renamed drawcallaction to be consistent with the new terminology:
    • DrawcallDescriptionActionDescription - see below for some notes.
    • DrawFlagsActionFlags.
    • DrawFlags.APICalls was removed as API calls actions no longer exist.
    • CaptureOptions.captureCallstacksOnlyDrawsCaptureOptions.captureCallstacksOnlyActions
  • The EventBrowser_HideEmpty and EventBrowser_HideAPICalls members of qrenderdoc.PersistentConfig have been removed as these settings are no longer relevant.
  • Several members of CaptureContext have been renamed as above:
    • CaptureContext.CurSelectedDrawcallCaptureContext.CurSelectedAction
    • CaptureContext.CurDrawcallCaptureContext.CurAction
    • CaptureContext.GetFirstDrawcallCaptureContext.GetFirstAction
    • CaptureContext.GetLastDrawcallCaptureContext.GetLastAction
    • CaptureContext.CurDrawcallsCaptureContext.CurRootActions
    • CaptureContext.GetDrawcallCaptureContext.GetAction
      As above, these return renderdoc.ActionDescription renamed from renderdoc.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 using VK_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 in OpVectorShuffle.
  • 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 and exec.
  • 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.

Don't miss a new renderdoc release

NewReleases is sending notifications on new releases.