Navigation Menu

Skip to content

Version v0.21

Choose a tag to compare
@baldurk baldurk released this 24 Sep 14:25

Binary zips and installers for this release (and others) can be found on the builds page. Both stable and beta builds are up to date with this release, but beta builds will be updated more regularly. You can choose which type of release you want to install and receive updates for.

Below are the visible changes since v0.20. There have also been a bunch of internal changes like lots of work to OpenGL and linux support (still lots to do, but progressing well), so if that interests you keep an eye on the changes here on github 😄

Other than many bugfixes some highlights include support for the missing common shader debugging operations, pixel history, a quad overdraw overlay, and a revamped save texture function.

As a side note, for users of Unreal Engine 4 there is a plugin for it that was written by Temaran, which integrates RenderDoc closely into the engine.


  • When 'debug device' was selected, if any debug messages were saved to the log there was a crash reading the log.
  • Shader bytecode reading is more robust when undocumented data is encountered (See #54)
  • Shader viewer didn't display line numbers for files with > 1000 lines (See #57)
  • Fix Shader debugging always using pixel shader resources & samplers (See #59, #75)
  • Fix views of the backbuffer failing if their format was specified as DXGI_FORMAT_UNKNOWN (Part of #53)
  • Default options weren't properly set on capture, this together with #61 fixed other part of #53
  • As a follow up, prevent crash closing logs with #61 (it might still break in other ways though).
  • Fix for crash-reported exceptions thrown while reading from/writing to config files.
  • Possible fix for reported crash after failing to inject into a process
  • Shader debugging fix for circumstances where sampling parameters are long (See #64)
  • Fix a crash if UpdateSubresource is called on a resource otherwise not referenced in a frame.
  • Fix deferred command list executes not showing children
  • Fix for case where multiple executes of the same command list were not handled correctly
  • Possible fix for reported crash with invalid Rect inside dockpanelsuite code.
  • If a constant buffer has no reflection data available, the buffer viewer is opened (See #60)
  • When reading matrices from constant buffer data, respect padding of each row/column to a vec4 (See #69)
  • Skip anything but the first geometry shader output stream (partially addressing #27)
  • Handle streamout declarations with NULL semantic name - specifies a gap (See #55)
  • Fix a case where EndEvent marker calls right before the final Present() would be lost.
  • Fix an incorrect use of std::map operator[] that would add invalid entries and possibly cause a crash.
  • Address inconsistent use of culture formatting, with numbers potentially formatted as "0,0" but a list of numbers as "X,Y,Z,W". Given lack of localisation, instead we now always use UK English culture (See #72)
  • Fix not being able to launch a process for capture on 32bit windows - it was mis-identified as a 64bit process (See #66)
  • Fix 'how did this ever work' style bug, where matrix copies would copy the size of the whole matrix for each row (and overwrite their array bounds)
  • Changed to IAT hooking from mhook trampoline hooking, for better compatibility with some dlls mhook couldn't rewrite (such as 64bit opengl32.dll)
  • Workaround for internal compiler error in D3DCompiler_43.dll when pixel debugging by avoiding flow control, also now bundle D3DCompiler_47.dll with installation to help avoid this happening again (See #81)
  • Change behaviour when 'allow fullscreen' is off to be more compatible with applications, even if it involves less consistency (See #80)
  • Fix initial contents not being applied before first internal log-readthrough, which lead to incorrect values being fetched when decoding Indirect() draw/dispatch calls.
  • When shader debugging, helper pixels continue to run without having any side-effects, to ensure gradients are correct.
  • Fixed a crash on log close when replaying over the network on a remote host
  • Fixed a crash in shader disassembly when debug info is present and an input file is completely empty.
  • Better display of struct types in constant buffer previewer
  • Speculative fix for a crash enumerating log viewers while loading a log (See #77)
  • Fix texture histogram not properly respecting channels - it was only ever reading from Red rather than whatever combination of channels you had selected.


  • Added support for arrays in the buffer viewer (#56) and hex-formatted values as xint, xshort and xbyte
  • Added a bit visualisation to shader debugger, e.g. r0.x,b will display 32-bit binary visualisation (Thanks Kamuyuq - #71)
  • Pixel co-ordinates displayed in status bar on the texture viewer are clamped to the dimensions of the texture (See #68)
  • Add ability to show checkerboard/solid coloured background even when not displaying alpha to make texture boundaries clearer (See #69)
  • Add toggle for by-convention gamma 'correction' of linear data (See #58)
  • Added a faint hint text to the working directory box, indicating that the working directory will be guessed from the executable.
  • Support for setting a friendly name via SetPrivateData() on shaders
  • Added a button to flip textures vertically, mostly useful for systems that render upside down until a final flip
  • Sample selection added to the texture viewer, to allow choosing which sample to show (or a resolved image) when viewing a multisampled texture (See #79)
  • The constant buffer previewer now allows you to set a custom format for when reflection information isn't available, the same as the buffer format viewer.
  • Implemented several missing pieces of functionality in shader debugging:
    • Indexable temp registers x0[] etc, commonly generated for sampling kernels or other dynamically-indexed set of constants (See #73)
    • Groupshared memory, in compute shaders, and atomic opcodes interacting with uavs or groupshared.
    • Support for texture UAVs
    • gather4* opcodes (Thanks valeriog-crytek - #75)
    • samplepos, sampleinfo, lod opcodes
    • New double type opcodes from D3D11.1
    • SV_Coverage and SV_PrimitiveID semantics (See #74)
  • Added a pixel history view. Launched from the texture viewer next to the debug button, the history shows all pixel modifications of the selected pixel since the start of the frame on the current texture.
  • Pixel history in action
    • For each event that modified the target it shows whether or not it successfully wrote at least one fragment, or whether a test e.g. depth test failed. You can then expand it to see each fragment that wrote.
    • UAV modifications are simply listed as before/after values since by definition there isn't a 1:1 correspondence with which pixels wrote to a given texel.
    • While the pixel history window is selected, the timeline bar shows modification events instead of texture usage.
    • Failed events can be hidden, optionally.
  • Added an overlay 'quad overdraw' which shows overdraw on a per-2x2 quad basis. Thanks to Stephen Hill @self_shadow) for the idea and implementation.
  • Quad overdraw - comparison with and without depth prepass
  • Save texture functionality has been completely revamped.
    • Textures can now be saved to several forms - DDS, PNG, JPG, TGA, BMP, and HDR (radiance)
    • DDS will attempt to preserve the original texture as much as possible - saving out depth/array slices, mips and preserving the original format.
    • For other formats you can select how you want to map down the texture - selecting mips, exporting only one slice or multiple, mapping HDR images to 0-255 LDR.
    • Revamped save dialog
    • Slices of a depth texture can be saved in a grid
    • Slices saved as grid
    • Cubemaps can also be saved in a cross pattern
    • Cubemap saved as cross