Skip to content

Version v1.16

Choose a tag to compare
@baldurk baldurk released this 30 Sep 16:26
· 1438 commits to v1.x since this release

Version v1.16

This release is primarily a follow-up to v1.15, with the bindless feedback expanded now to support DXIL SM6.x shaders via shader patching.

One thing to note, the event browser refactor added in v1.15 had an unfortunate bug. If RenderDoc hadn't previously been used on a system and v1.15 was the first install, such that there was no configuration settings saved, the event browser would not start up with the default $action() filter to mimic the filtering from previous versions, and wouldn't have any sample filters added. v1.16 and forwards will now address this only if no filters have been configured, such that users who have started to use the filters won't see any changes but those who didn't use any filters will have the bug fixed and will see the same thing as someone who updated from before v1.15.

Binary releases are available on with zip and installer for Windows and binary tarball for linux.

Main Highlights

  • The bindless feedback for D3D12 which was added in v1.15 now supports DXIL SM6.x shaders, via DXIL patching. This does not require the presence of dxcompiler.dll or dxil.dll from DXC on the system as the patching and hashing is all done within RenderDoc's code.

    Note this does not yet support the new SM6.6 heap-indexed binding access, this only applies to arrayed descriptor binding access.

  • The API backends have been hardened to handle the majority of cases where an API fatal error happens during replay while analysing a capture - device lost/TDR, out of GPU memory, or when using remote-replay if the remote server crashes or disconnects.

    When this happens the backend is unloaded and a null backend is loaded in its place, so the UI will continue to function but most panels will be non-functional - pipeline state will be empty, resource contents will not be displayed and any texture/buffer views will be empty. The capture can still be saved (unless the remote server has been disconnected) and a prompt will be given to report a potential bug. Note that on some APIs and GPU drivers, the process may be considered 'corrupt' and unable to load further captures.


    Since these bugs aren't a traditional CPU crash, any bug reported from this is required to include the capture as otherwise it's not useful. If you don't want to share the capture you can still email me directly. If the crash was caused by a remote server disconnecting and the capture isn't saved locally, the bug can't be reported until that happens.

    Note that a fatal error like this during capture is not handled and in the vast majority of cases cannot be captured.

Python API changes

  • No breaking API changes.


  • UI: Don't clear the find text when closing the find bar, or when switching between captures in the event browser.
  • UI: When using the find bar in the event browser, jump to the nearest visible result respecting the current filter.
  • UI: In the mesh viewer if no draw is selected, display that information as well as indicating which event is considered selected (which may be non-obvious if a marker region is selected).
  • UI: On linux the 'send error report' button was disabled incorrectly, although crash reports aren't supported on linux it was intended to allow manually submitting reports and attaching captures. This will only be allowed for builds with proper git commit hashes.
  • UI: Use the correct entry point when disassembling shaders in spirv-cross.
  • D3D12: Add counter support for some calls like copies, clears, and ExecuteIndirect.
  • D3D12: Improve worst-case time to load capture with very large ExecuteIndirect() calls with few actually executed commands.
  • OpenGL: Manually emulate bad vertex-casting behaviour on GL. This is when glVertexAttribPointer is used to specify an integer formatted component and the shader reads an input. This is invalid, but most drivers cast int -> float, then the float bits are read as int (e.g. 0x3f800000) so we emulate that.
  • AMD: Shader disassembly targets have been updated to include RDNA2 targets, and some legacy devices which may not be supported by AMD have been removed.


  • General: The installer will be more correct about checking if the required VC redist is installed, to prevent false positives on older incompatible versions.
  • UI: Fix a crash when opening the event browser after a capture is loaded.
  • UI: Fix a race condition with the crash handler that could lead to crashes itself during early startup.
  • UI: Display fake added markers in timeline bar.
  • UI: Ignore W component for mesh input 3D visualisation in mesh viewer.
  • UI: Respect the current filter when using find in the event browser.
  • UI: Fix a vertex-picking crash when right clicking in the mesh viewer with an empty draw.
  • UI: Tweak the event browser so that when selecting a marker region it won't implicitly select the marker pop event, but the last 'real' event.
  • UI: Improve some workflow oddities when managing captures between a capture connection window and the main window itself.
  • UI: Don't include NaN/inf durations when summing action durations in event browser.
  • UI: Fix a problem where RGP captures wouldn't save properly when made from the UI.
  • UI: Fix a crash displaying an error message for a mis-formed $action() filter.
  • Android: Fix a crash on Quest and potentially other android devices when creating internal vulkan instance.
  • Android: Ignore any activities which show up in some packages.
  • Vulkan: Fix problems selecting events after indirect-count drawcalls.
  • Vulkan: Fix a case where storage images/buffers could be missing contents if they are overwritten later in the capture after being read.
  • Vulkan: Fix handling of degenerate/empty dedicated allocation extension structures.
  • Vulkan: Ignore clear calls for unused attachments in vkCmdClearAttachments.
  • Vulkan: Fix a potential deadlock when a driver crashes.
  • Vulkan: Fix a validation warning possibly generated when using imageless framebuffer and image view usage extensions.
  • Vulkan: Fix a crash when debugging shader modules that have multiple entry points.
  • Vulkan: Fix a problem where shader printf results would not be accurate when the shader isn't pure (has side-effects that affects its execution).
  • Vulkan: Fix the API call summary of vkCmdSetScissorWithCountEXT in the event browser including internal serialised data.
  • Vulkan: Fix missing mapped writes to memory when it's only used in submissions via bufferDeviceAddress.
  • Vulkan: Fix a crash when the mesh viewer tries to display invalid indexed draws with no index buffer bound.
  • Vulkan: Remove optimisations around memory maps where applications that call vkFlushMappedMemoryRanges are trusted to annotate all writes even to coherent memory, to prevent the need to check for changes. Now applications will be accurately captured even if calls to that functions on coherent memory are badly placed.
  • D3D11: Fix some cases where the pipeline state for input assembly would be wrong if no input layout was bound.
  • D3D11: Fix debug messages being off-by-one with the listed event.
  • D3D12: Fix arrays of resources in DXIL being marked as entirely unused.
  • D3D12: Fix cases where binds would be hidden depending on their ordering in the root signature.
  • D3D12: Handle MakeResident/Evict being refcounted to allow multiple calls, as well as handling placed resources residency being from the underlying heap.
  • D3D12: Fix some problems with fetching geometry output in the mesh viewer.
  • D3D12: Fix a race condition where mapped memory updates could be lost if one thread is writing to one part of the buffer while it's being serialised on another thread.
  • D3D12: Display ByteAddressBuffer s in the pipeline state viewer based on the shader binding, not the flag on descriptors which may not be present.
  • OpenGL: Fix depth texture data from previous frames not being correctly present on GLES.
  • OpenGL: Fix the API call summary of glDispatchCompute in the event browser including internal serialised data.
  • OpenGL: Fix a case where GL context tracking would break and result in failed a captures and corrupted GL state.
  • OpenGL: Fix crash serialising glVertexArrayVertexBuffers with NULL buffer array.